嵌入式系统实验报告
Linux 设备以在模块程序中的 include<linux/> 之 前通过宏定义
#define__NO_VERSION__表明不定义模块的版本信息。
内核模块程序与一般应用程序之间主要不同之处是,模块程序没有 main()函数,模块程
序在装载时调用 init_module(void)函数添加到内核中,在卸载时调用 void cleanup_module( )
函数从内核中卸载。另外一个应用程序从头到尾只执行一个任务,但一个模块可以把响应未
来请求的事务登记到内核中,然后等待系统调用,内核模块程序结构如图 所示。
Module Kernel
insmod init_module( ) register_capability( )
capabilities[]
printk( )
. . . . .
rmmod cleanup_module( ) unregister_capability( )
图 主、从设备号
应用程序通过设备文件系统(devfs)的名字(或节点)访问硬件设备,所有的设备节点在
/dev 目录下。利用 mknod 命令生成设备文件系统的节点,但只有超级用户才能生成设备文。
Mknod 命令必须要有设备名和设备类型,主设备号(Major Number),次设备号(Minor
Number)等 3 个参数。主设备号用于内核区分设备驱动,次设备号用于设备驱动区分设备。
一个设备驱动可能控制多个设备。新的设备驱动要有新的主设备号。在内核源代码的
Documentation/ 中定义了所有设备的主设备号。在创建设备的时候不要与常用的设
备好冲突。
驱动程序基本框架
如果采用模块方式编写设备驱动程序时,通常至少要实现设备初始化模块、设备打开模
块、数据读写与控制模块、中断处理模块(有的驱动程序没有)
嵌入式Linux设备驱动实验报告 来自淘豆网m.daumloan.com转载请标明出处.