linux字符设驱动程序_笔记.docVIP

  • 4
  • 0
  • 约 10页
  • 2017-03-06 发布于贵州
  • 举报
linux字符设驱动程序_笔记

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 #include 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)

1亿VIP精品文档

相关文档