网站大量收购独家精品文档,联系QQ:2885784924

Linux设备驱动开发幻灯片.ppt

  1. 1、本文档共62页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux设备驱动开发幻灯片

misc_register ()用来注册其他类型设备的,它的主设备是10调用register_chrdev(),设备名和函数指针通过miscdevice结构获得,同时结构体还保存设备的次设备号 编写模块的规则 不能访问C库如 printf(), strcat(),只能使用内核提供的头文件 内核有自己的C功能函数,如类似于printf()的printk() 只能使用内核提供的头文件 不要使用浮点数 声明变量为static的,防止命名空间污染 模块调试技术 内核对调试的支持:配置内核时make menuconfig注意选择debug,编程时CONFIG_DEBUG_INFO等宏的引用 printk及信息显示级别 /proc系统提供的信息 printk 就如同在编写用户空间的应用程序,打印信息有时是很好的调试手段,也是在代码中很常用的组成部分。但是与用户空间不同,在内核空间要用函数 printk 而不能用平常的函数printf。printk和 printf很类似,都可以按照一定的格式打印消息,所不同的是,printk还可以定义打印消息的优先级。这些不同优先级的信息可以输出到控制台上、/var/log/messages里。其中,对输出给控制台的信息有一个特定的优先级console_loglevel。若优先级小于这个整数值时,则消息才能显示到控制台上,否则,消息会显示在/var/log/messages 里。若不加任何优先级选项,则消息默认输出到/var/log/messages文件中。 printk include/linux/kernel.h下对不同日志级别的定义 #define KERN_EMERG 0 /* system is unusable */ #define KERN_ALERT 1 /* action must be taken immediately */ #define KERN_CRIT 2 /* critical conditions */ #define KERN_ERR 3 /* error conditions */ #define KERN_WARNING 4 /* warning conditions */ #define KERN_NOTICE 5 /* normal but significant condition */ #define KERN_INFO 6 /* informational */ #define KERN_DEBUG 7 /* debug-level messages */ 优先级console_loglevel被指定为1~8之间的整数值。如果设定为1,则只有级别为0的信息才能到达控制台。如果设定为8,则包括调试信息在内的所有消息都显示出来 /proc /proc 文件系统是一个伪文件系统,它是一种内核和内核模块用来向进程发送信息的机制。这个伪文件系统让用户可以和内核内部数据结构进行交互,获取有关进程的有用信息,在运行时通过改变内核参数改变设置。与其他文件系统不同,/proc存在于内存之中而不是硬盘上,在加载模块成功后,可以使用查看/proc/device文件获得相关设备的主设备号。 思考 内核何时调用模块? lsmod和/proc/modules 当内核需要的某功能不存在时通过运行modprobe调入相应模块,modprobe运行前检查依赖关系/lib/modules//$(shell uname -r)/modules.dep insmod rmmod 模块是如何工作的? 通过module_init告诉内核本模块提供的操作函数 当内核需要操作模块时则调用模块提供的函数 模块不再使用时执行module_exit,手工或关机时 提纲 设备驱动概述 如何编写内核模块 如何编写设备驱动 字符设备驱动实例 设备驱动编写流程 在上一节中已经提到,模块在调用 insmod命令时被加载,此时的入口点是module_init函数,通常在该函数中完成设备的注册。同样,模块在调用 rmmod函数时被卸载,此时的入口点是module_exit函数,在该函数中完成设备的卸载。在设备完成注册加载之后,用户的应用程序就可以对该设备进行一定的操作,如read、write等,而驱动程序就是用于实现这些操作,在用户应用程序调用相应入口函数时执行相关的操作。设备驱动程序流程图如下所示: 驱动接口:向内核提供的设备操作接口 Linux中的I/O子系统向内核中的其他部分提供了一个统一的标准设备接口,这是通过include/linux/fs.h中的数据结构file_operations来完成的: struct file_operations { loff_t (*llseek) (struct

文档评论(0)

liwenhua11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档