字符设备是指所有能像字节流一样访问的设备,其接口支持面向字符的I/O操作,它不经过系统的快速缓存,而是负责管理自己的缓冲区结构。字符设备接口只支持顺序存储的功能,一般不能进行任意长度的I/O请求,而是限制I/O请求的长度必须是设备要求的基本块长的倍数。
字符设备是指在I/O传输过程中以字符为单位进行传输的设备,如鼠标、键盘,打印机等最基本、最常用的设备。字符设备驱动程序是Linux系统最基本、最常用的驱动程序之一。只要不挂载文件系统的设备,都可以用字符设备来描述。可以使用与普通文件相同的文件操作命令对字符设备文件进行操作,如打开、关闭、读和写等。
概括地说,字符设备驱动主要包括:
1)定义一个结构体staticstructfile_operations变量,并在其内定义一些设备的打开、关闭、读、写和控制函数。
2)在结构体外分别实现结构体中定义的这些函数。
3)向内核中注册或删除驱动模块。
字符设备驱动程序的框架的核心是数据结构structfile_operation,它是一系列指针的集合。每个被打开的文件都对应于一系列的操作,需要在驱动程序中加以实现。其定义如下(在/include/linux/fs.h中定义):
这个结构的每个成员的名字都对应一个系统调用。用户进程利用系统调用在对设备文件进行诸如read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。
对于每个进程,都包含一个files_struct结构,用来记录文件描述符的使用情况,定义在include/linux/sched.h中。Linux中的一个进程最多只能同时打开NR_OPEN_DEFAULT个文件。
structinode定义文件在/includelinux/fs.h中,用来代表一个文件。structinode包括很重要的两个成员:一个代表设备文件的设备号,另一个代表字符设备的数据结构。同一个文件可以被打开多次,所以可以对应很多structfile,但是只对应一个structinode。
(www.xing528.com)
对于大多数的字符设备,只要其中的部分操作即可。
【例8-1】字符设备驱动。
这是字符设备驱动程序的例子。
设计步骤
1)在Vim中创建一个新工程文件,命名为“test.c”。
2)在“test.c”中创建如下代码。
在Vim中创建一个新工程文件,命名为“Makefile”。在“Makefile”中创建如下代码。
例8-1程序的运行结果如图8-3所示。
图8-3 例8-1程序的运行结果
在图8-3中,test设备已经加入到Linux内核中。可以编写程序对test字符设备进行访问。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。