linux内核与驱动学习笔记(二)----对驱动简单的认识

模块与驱动的分类:

设备驱动:字符设备、块设备、网络设备驱动。

1、字符设备:

是一个可以当做字节流来存取的设备、字符设备驱动否则实现这样的功能。这样的

驱动至少实现read、write、open、close等系统调用接口。例如文本控制台(/dev/console)和

串口(/dev/ttyS0)就是很好的字符设备例子。字符设备的框架相对而言较为简单一点,有时间把这2个

驱动程序搞懂,基本字符设备驱动的学习就差不多了。字符设备本身类似于文件操作,只是文件可以

随意的移动,然而字符设备仅仅是数据通道,你只能顺序存储。当然也存在特例,例如frame grabber。

2、块设备:

如同字符设备,块设备通过/dev下面的文件系统节点来存储。块设备(例如一个磁盘)应该是

可以驻有一个文件系统的,linux可以像字符设备一样,可以一次存取任意字节数的数据。块设备和字符

设备的区别可能就仅仅在内核的内部管理数据上的方式不同。当然接口也是不一样的。

3、网络设备:

网络设备是任何一个网络事务都是通过一个接口来进行的,就是说一个能与其他主机进行数据交换的设备。

这里所指的接口是只一个硬件或者软件设备(比如回环接口但很少),网络设备驱动一般都值设计成对报文的

接收和发送。网络设备不是一个面向于数据流的设备,因此一个网络接口就不像前2种设备那么容易的映射

到文件系统的节点上,所以也不使用read、write等系统调用接口而是使用内核调用报文相关的函数接口。

 

PS:驱动程序编写过程中我们需要牢记的一些安全观念:

1、任何从用户进程接收的输入应当保持极大的怀疑态度,除非你是能够核实它,否则就不要信任。

2、从内核中获取的任何内存应当清零或者使用前对其初始化否则可能发生信息泄露。

3、如果你的设备解析系统发生给它的数据,那么就需要确保用户不能发送任何危及系统的东西。

4、要考虑设备操作的后果,一些特定的操作,例如加载一个适配卡或者格式化一个磁盘,能影响到系统的运行,就必须限制在授权的用户才能使用。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章