第6讲 Linux字符设备驱动程序设计.ppt

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

12、加载LED驱动程序入内核。 insmod gd_leds.ko * 13、编写、运行用户端的测试程序。 如第5讲的5.4的例2,将程序改为: * #include stdio.h #include stdlib.h #include unistd.h #include sys/ioctl.h #include fcntl.h int main(int argc, char **argv) { int led_fd=0,flash=0; led_fd = open(/dev/gd_leds, 0); if (led_fd 0) { perror(open device leds err.); exit(1); } while (1) { ioctl(led_fd, (flash++)%2, 3); //ioctl(fd, on/off, led_no); usleep(100000); //延时单位 :微秒 } close(led_fd); return 0; } * 使内存更加紧凑和灵活。 ? 修改内存时,不必全部重新编译内核,可节省时间。系统中如果需要使用新模块 ,只要编译相应的模块然后使用特定的程序将模块插入即可。 ? 模块可以不依赖于某个固定的硬件平台,即使它依赖于某些特殊的硬件特点。 ? 模块的目标代码一旦被链接到内核,它的作用和静态链接的内核目标代码完全等 价。所以当调用模块的函数时,无需显示的消息传递。 * 同一个驱动程序可以管理多个设备,它们依靠次设备号来区别。次设备号只在驱动程序内部使用,系统内核直接把次设备号传递给驱动程序,由驱动程序去管理。 * 第6讲 Linux字符设备驱动程序设计 嵌入式操作系统 * 本讲主要内容 6.1 Linux设备驱动简介 6.2 字符设备驱动程序框架 6.3 字符设备举例 6.1 Linux设备驱动简介 设备驱动程序和应用程序的关系: * 应 用 程 序 驱 动 程 序 设 备 write read ioctl ioctl Linux设备驱动属于内核模块的一部分。 Linux内核模块介绍  Linux内核的整体结构非常庞大,其包含的组件非常多。我们如何把需要的部分都包含在内核中呢? 把需要的功能都编译到linux内核,随同Linux 启动时加载。 以模块方式扩展内核功能。使用insmod 加载,使用rmmod 删除。这种方式控制了内核的大小,而模块一旦被插入到内核,它就和内核其他部分一样。 * Linux内核模块的优点与缺点 优点 使内核更加紧凑和灵活; 修改内核时,不必全部重新编译整个内核。系统如果需要使用新模块,只要编译相应的模块,然后使用insmod将模块装载即可; 模块的目标代码一旦被链接到内核,它的作用域和静态链接的内核目标代码完全等价。 缺点 由于内核所占用的内存是不会被换出的,所以链接进内核的模块会给整个系统带来一定的性能和内存利用方面的损失; 装入内核的模块就成为内核的一部分,可以修改内核中的其他部分,因此,模块的使用不当会导致系统崩溃; 为了让内核模块能访问所有内核资源,内核必须维护符号表,并在装入和卸载模块时修改符号表; 模块会要求利用其它模块的功能,所以,内核要维护模块之间的依赖性。 Linux内核模块与应用程序的区别 C语言程序 Linux内核模块 运行 用户空间 内核空间 入口 main() module_init()指定; 出口 无 module_exit()指定; 连接 ld insmod 运行 直接运行 insmod * 设备分类: 字符设备 以字节为单位逐个进行I/O操作 字符设备中的缓存是可有可无 不支持随机访问 如串口设备等 块设备 块设备的存取是通过buffer、cache来进行 可以进行随机访问 例如IDE硬盘设备 可以支持可安装文件系统 网络设备 通过BSD套接口访问 设备文件 Linux抽象了对硬件的处理,所有的硬件设备都可以作为普通文件一样来看待。 可以使用和操作文件相同的、标准的系统调用接口来完成打开、关闭、读写和I/O控制操作 字符设备和块设备是通过文件节点访问的。在Linux的文件系统中,可以找到(或者使用mknod创建)设备对应的文件名,称这种文件为设备文件。 主设备号和次设备号 主设备号:标识该设备的种类,也标识了该设备所使用的驱动程序: 主设备号的范围只能是1-255 Linux内核支持动态分配主设备号 次设备号:标识使用同一设备驱动程序

文档评论(0)

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

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

1亿VIP精品文档

相关文档