- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)