当前位置: 技术问答>linux和unix
关于linux驱动的那点事????????、
来源: 互联网 发布时间:2016-11-28
本文导语: 最近在学linux驱动,选了宋宝华的一本linux设备驱动详解 作为入门读本,看完了,一些简单的程序也跟在后面做了,但是这本书在讲 网卡 声卡驱动等 实体设备的时候驱动只是简单的介绍了一下 这个设备驱...
最近在学linux驱动,选了宋宝华的一本linux设备驱动详解 作为入门读本,看完了,一些简单的程序也跟在后面做了,但是这本书在讲 网卡 声卡驱动等 实体设备的时候驱动只是简单的介绍了一下 这个设备驱动的架构,里面主要的结构体等知识!!对于驱动我还没有完全认识:我现在想请教驱动高手几个问题!!
例如我拿字符驱动为例子,在写字符驱动的时候是不是只要写一个设备的 注册,初始化等工作,其主要工作就是 填充 file_operation实体,如open,read,ioctl等的实现!!????
这样理解对吗??? 我是驱动新手 ,问题有点简单。
例如我拿字符驱动为例子,在写字符驱动的时候是不是只要写一个设备的 注册,初始化等工作,其主要工作就是 填充 file_operation实体,如open,read,ioctl等的实现!!????
这样理解对吗??? 我是驱动新手 ,问题有点简单。
|
linux驱动工作模式就是这样的。
linux设备可以分为3种。
字符设备和块设备有一个file_operation指针。内核通过里面函数指针与驱动进行交互。
网络设备结构中则直接有各个函数指针,交互方式与前两者稍微有点不同(网络设备没在文件系统中没有设备文件,用户通过设备名引用网络设备,所以没有file_operation指针)。
按照操作系统I/O原理,可以把I/O系统分为4层:
1,中断处理层
2,设备驱动层
3,与设备无关的I/O软件层
4,用户空间的I/O软件
上面的函数指针就是提供了2层和3层之间的借口。这种方式提高了操作系统的兼容性,也为操作系统管理大量的设备提供了基础。
linux设备可以分为3种。
字符设备和块设备有一个file_operation指针。内核通过里面函数指针与驱动进行交互。
网络设备结构中则直接有各个函数指针,交互方式与前两者稍微有点不同(网络设备没在文件系统中没有设备文件,用户通过设备名引用网络设备,所以没有file_operation指针)。
按照操作系统I/O原理,可以把I/O系统分为4层:
1,中断处理层
2,设备驱动层
3,与设备无关的I/O软件层
4,用户空间的I/O软件
上面的函数指针就是提供了2层和3层之间的借口。这种方式提高了操作系统的兼容性,也为操作系统管理大量的设备提供了基础。
|
module_init
注册设备号
设备号与file_operation关联
填充file_operation
添加设备
module_exit
最后用内核编译下你的代码
注册设备号
设备号与file_operation关联
填充file_operation
添加设备
module_exit
最后用内核编译下你的代码