问:Linux内核有那么多驱动程序,如何才能确定自己需要访问的驱动程序?
答:通过设备文件中包含的设备号信息
问:Linux内核中,如何描述描述文件?
答:<1>struct inode 描述文件属性信息(文件类型,权限,大小,修改时间,设备号[设备文件])
<2>struct file 描述一个打开的文件(打开的方式,文件偏移量,...)
[注意:只要打开一次文件,就会分配一次]
问:应用层访问底层字符设备驱动的过程?
答:open---->设备文件
struct inode:设备号
--------->struct cdev
它的一个成员记录操作硬件设备的函数接口
(struct file_operations)
寻找成功之后:
struct inode 结构体记录struct cdev这个结构体首地址
struct file 结构体记录struct file_operations这个结构体首地址
问:写字符驱动,需要做什么?
答:<1>struct cdev:Linux 针对字符设备的通用描述
struct led_device{
struct cdev cdev;//通用的字符设备描述
...
};
需要给自己设计的结构体分配空间
<2>提供硬件设备的操作函数接口
struct file_operations 结构体做填充
需要将这个结构体的首地址记录在struct cdev结构体中
<3>申请一个空闲的设备号
<4>使用设备号,将struct cdev这个结构体添加到系统中去
七 写字符设备驱动,驱动需要包含哪些信息
1.设备号
|
|
2.struct cdev
|
|
|
3.一组函数接口 -----> struct file_operations