2012年(10)
分类: LINUX
2012-05-25 09:54:56
Linux驱动基础
驱动程序的概念:
直接控制硬件工作的程序。
驱动程序的历史:
早期的驱动程序每个应用程序拥有单独的直接控制硬件的方法。缺点:驱动程序没有复用即多个应用程序不能使用同一个驱动程序来控制硬件,浪费计算机空间与人力。
后来发展到驱动程序与应用程序相对独立,但一旦驱动程序接口的函数名、函数的参数需要增加或者减少,应用程序也需要做相应的修改,工作量可能会很大。
现在的Linux驱动框架:随着学习深入会一步一步的解释
驱动程序的分类:
不同的分类方法分类不同,但大致包含以下几类:
字符设备驱动
网络接口驱动
块设备驱动
字符设备:按字节Byte为最小访问单位的设备。不能随机访问。字符驱动用来驱动字符设备,通常实现open,close,read,write系统调用。
块设备:通常来讲按照块(一般是512字节或者2的N次方字节)的大小为最小单位访问的设备,一次传送一个或多个块的整块数据,支持随机访问。Linux允许块设备传送任意数目的字节,允许以字节为单位来访问。
块设备和字符设备的区别是块设备能
网络接口:所有的网络事件都是通过接口来进行的,一般是一个硬件设备,但也有可能是一个软件设备,如回环接口(lo:从网卡0发出的数据报文,被它自己(网卡0)接收,并没有传输到网络介质上去)网络接口负责发送和接收数据报文。
驱动程序安装:
模块方式:开发过程采用
编译进内核:发布时采用(有时发布也采用模块方式,因为以模块方式发布驱动程序不需要公布源码而编译进内核必需发布源码)
将驱动程序直接编译进内核的方法:
举例:helloworld.c是一个驱动程序文件
1 将helloworld.c拷贝到Linux系统目录下的drivers文件下的相应设备文件夹下(如字符设备的文件夹是char)
2 在设备文件夹下修改Kconfig(产生menuconfig中的选项),添加config HELLO_DRIVER
bool “hello driver” 这样在make menuconfig时就会在字符设备选项里增加hello driver选项
3 在设备文件夹下修改Makefile:添加obj-$(CONFIG_HELLO_DRIVER) +=helloworld.o