第五章 linux字符设备驱动程序_笔记.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.6 linux字符设备驱动程序 [4-6-1]linux驱动程序介绍(参考课件) 驱动程序:使硬件工作的软件。 模型一的缺点:软件程序的复用性不好 模型二的缺点:如果驱动程序接口变化,则所有的应用程序就必须都改 模型三:即linux驱动程序驱动模型:如图“使用驱动程序所示”。解决了上述两种模型的缺点。 linux驱动程序的分类: ◎ 字符设备驱动(重点) ◎ 网络接口驱动(重点) ◎ 块设备驱动 1)字符设备: 字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,这样的驱动通 常实现open,close,read和write系统调用。 2)块设备: ◎ 在大部分unix系统,块设备不能按字节处理数据,只能一次传送一个或多个长度是 512字节(或一个更大的2次幂的数)的整块数据。 ◎ 而Linux则允许块设备传送任意数目的字节。 因此块和字符设备的区别:仅仅是驱动的接口函数与内核的接口函数不同。 3)网络接口: 任何网络事物都通过一个接口来进行,一个接口通常是一个硬件(eth0),但它也可以 是一个纯粹的软件设备,比如回环接口(lo)。一个网络接口负责发送和接收数据报文。 字符设备与块设备:随机访问? 块设备随机访问,字符设备必须按顺序访问 驱动程序安装方式:有两种 模块方式(已知)(insmod, rmmod) ◎ 直接编译进内核 如何直接把驱动程序(内核模块)编译进内核? 需要修改两个文件:Kconfig,Makefile(Kconfig用来产生配置菜单,到处有Kconfig): 第一步:首先把驱动程序或内核模块源文件(hello.c)放到内核源代码相应的目录下(根据 功能选择目录)(如drivers/char下) 第二步:修改Kconfig,修改所放源文件目录下的Kconfig,在内核源代码的顶层目录执行: vi drivers/char/Kconfig(打开Kconfig),然后在其中加上如下两行代码(照着写): config HELLO_WORLD Bool “helloworld” 第三步:通过make menuconfig ARCH=arm进入配置菜单,选中刚添加(要编译进内核) 的项。配置结果体现在(.config)中,.config文件位于内核源代码顶层目录下,通 过 vi .config可以查看。可以看到:CONFIG_HELLO_WORLD=y 第四步:修改Makefile,修改所放源文件目录下的Makefile。照着写 obj-$(CONFIG_HELLO_WORLD) += hello.o (加上这一项,hello.c) 第五步:编译内核。修改好后,回到内核源代码顶层目录执行如下命令编译内核。: male uImage ARCH=armCROSS_COMPILE=arm-linux- ***************************** hello.c代码如下:********************************** #include linux/module.h #include linux/init.h static int __init hello_init() { printk(hello world!\n); return 0; } static void __exit hello_exit() { printk(KERN_EMERG hello exit!\n); } module_init(hello_init); module_exit(hello_exit); ***************************************************************************** 编译完成启动内核的过程中,会打印出:Hello World!信息。因为执行了模块初始化函数。 __init标志表示此函数将被放置到初始化代码段;内核在启动时,会依次调用初始化代码段中的函数指针。__exit类似。 驱动程序使用: linux用户程序通过设备文件(也称:设备节点)来使用驱动程序操作字符设备和块设备(根据*fp找到在内核里面对应的sturct file结构,从而找到相应的read,write函数) 网络设备没有设备文件,设备文件在dev目录下面。 [4-6-2]字符设备驱动程序设计(参考课件) 1、主次设备号 字符设备通过字符设备文件来存取。字符设备文件由使用ls –l命令后输出的第一列的“c”标识。在dev目录下使用ls –l命令可以看到设备文件项中有2个数字,由逗号分隔,这些数字就是设备文件的主次设备编号。前主后次。 1.1设备号的作用 思考:字符设备文件与字符设备驱动

文档评论(0)

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

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

1亿VIP精品文档

相关文档