欢迎来到天天文库
浏览记录
ID:12287416
大小:413.00 KB
页数:10页
时间:2018-07-16
《linux字符设备驱动程序_笔记》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、4.6linux字符设备驱动程序4.6linux字符设备驱动程序[4-6-1]linux驱动程序介绍(参考课件)驱动程序:使硬件工作的软件。模型一的缺点:软件程序的复用性不好模型二的缺点:如果驱动程序接口变化,则所有的应用程序就必须都改模型三:即linux驱动程序驱动模型:如图“使用驱动程序所示”。解决了上述两种模型的缺点。4.6linux字符设备驱动程序10/104.6linux字符设备驱动程序linux驱动程序的分类:◎字符设备驱动(重点)◎网络接口驱动(重点)◎块设备驱动1)字符设备:字符设备是一种按字节来访问的设备,字符驱动则负责驱动
2、字符设备,这样的驱动通常实现open,close,read和write系统调用。2)块设备:◎在大部分unix系统,块设备不能按字节处理数据,只能一次传送一个或多个长度是512字节(或一个更大的2次幂的数)的整块数据。◎而Linux则允许块设备传送任意数目的字节。因此块和字符设备的区别:仅仅是驱动的接口函数与内核的接口函数不同。3)网络接口:任何网络事物都通过一个接口来进行,一个接口通常是一个硬件(eth0),但它也可以是一个纯粹的软件设备,比如回环接口(lo)。一个网络接口负责发送和接收数据报文。字符设备与块设备:随机访问?块设备随机访问,
3、字符设备必须按顺序访问驱动程序安装方式:有两种◎模块方式(已知)(insmod,rmmod)◎直接编译进内核如何直接把驱动程序(内核模块)编译进内核?需要修改两个文件:Kconfig,Makefile(Kconfig用来产生配置菜单,到处有Kconfig):第一步:首先把驱动程序或内核模块源文件(hello.c)放到内核源代码相应的目录下(根据功能选择目录)(如drivers/char下)第二步:修改Kconfig,修改所放源文件目录下的Kconfig,在内核源代码的顶层目录执行:vidrivers/char/Kconfig(打开Kconfi
4、g),然后在其中加上如下两行代码(照着写):configHELLO_WORLDBool“helloworld”第三步:通过makemenuconfigARCH=arm进入配置菜单,选中刚添加(要编译进内核)的项。配置结果体现在(.config)中,.config文件位于内核源代码顶层目录下,通过vi.config可以查看。可以看到:CONFIG_HELLO_WORLD=y第四步:修改Makefile,修改所放源文件目录下的Makefile。照着写obj-$(CONFIG_HELLO_WORLD)+=hello.o(加上这一项,hello.c)
5、第五步:编译内核。修改好后,回到内核源代码顶层目录执行如下命令编译内核。:maleuImageARCH=armCROSS_COMPILE=arm-linux-hello.c代码如下:#include#includestaticint__inithello_init(){4.6linux字符设备驱动程序10/104.6linux字符设备驱动程序printk("helloworld!");return0;}staticvoid__exithello_exit(){printk(KER
6、N_EMERG"helloexit!");}module_init(hello_init);module_exit(hello_exit);编译完成启动内核的过程中,会打印出:HelloWorld!信息。因为执行了模块初始化函数。__init标志表示此函数将被放置到初始化代码段;内核在启动时,会依次调用初始化代码段中的函数指针。__exit类似。驱动程序使用:linux用户程序通过设备文件(也称:设备节点)来使用驱动程序操作字符设备和块设备(根据fp找到在内核里面对应的sturctfile结构,从而找到相应的read,write函数)网络
7、设备没有设备文件,设备文件在dev目录下面。[4-6-2]字符设备驱动程序设计(参考课件)1、主次设备号字符设备通过字符设备文件来存取。字符设备文件由使用ls–l命令后输出的第一列的“c”标识。在dev目录下使用ls–l命令可以看到设备文件项中有2个数字,由逗号分隔,这些数字就是设备文件的主次设备编号。前主后次。4.6linux字符设备驱动程序10/104.6linux字符设备驱动程序1.1设备号的作用思考:字符设备文件与字符设备驱动如何建立联系?——通过主设备号设备文件所对应的主设备号和驱动程序所对应的主设备号相同的话,那么这个驱动程序就对
8、应这个设备文件。(设备文件的主设备号通过创建设定,驱动程序通过申请获得)主设备号:用来标识与设备文件相连的驱动程序。次设备号:被驱动程序用来辨别操作的是哪个设备。总
此文档下载收益归作者所有