模塊與驅動的分類:
設備驅動:字符設備、塊設備、網絡設備驅動。
1、字符設備:
是一個可以當做字節流來存取的設備、字符設備驅動否則實現這樣的功能。這樣的
驅動至少實現read、write、open、close等系統調用接口。例如文本控制檯(/dev/console)和
串口(/dev/ttyS0)就是很好的字符設備例子。字符設備的框架相對而言較爲簡單一點,有時間把這2個
驅動程序搞懂,基本字符設備驅動的學習就差不多了。字符設備本身類似於文件操作,只是文件可以
隨意的移動,然而字符設備僅僅是數據通道,你只能順序存儲。當然也存在特例,例如frame grabber。
2、塊設備:
如同字符設備,塊設備通過/dev下面的文件系統節點來存儲。塊設備(例如一個磁盤)應該是
可以駐有一個文件系統的,linux可以像字符設備一樣,可以一次存取任意字節數的數據。塊設備和字符
設備的區別可能就僅僅在內核的內部管理數據上的方式不同。當然接口也是不一樣的。
3、網絡設備:
網絡設備是任何一個網絡事務都是通過一個接口來進行的,就是說一個能與其他主機進行數據交換的設備。
這裏所指的接口是隻一個硬件或者軟件設備(比如迴環接口但很少),網絡設備驅動一般都值設計成對報文的
接收和發送。網絡設備不是一個面向於數據流的設備,因此一個網絡接口就不像前2種設備那麼容易的映射
到文件系統的節點上,所以也不使用read、write等系統調用接口而是使用內核調用報文相關的函數接口。
PS:驅動程序編寫過程中我們需要牢記的一些安全觀念:
1、任何從用戶進程接收的輸入應當保持極大的懷疑態度,除非你是能夠覈實它,否則就不要信任。
2、從內核中獲取的任何內存應當清零或者使用前對其初始化否則可能發生信息泄露。
3、如果你的設備解析系統發生給它的數據,那麼就需要確保用戶不能發送任何危及系統的東西。
4、要考慮設備操作的後果,一些特定的操作,例如加載一個適配卡或者格式化一個磁盤,能影響到系統的運行,就必須限制在授權的用戶才能使用。