Linux Device Driver(Linux 裝置驅動程式) 顧名思義,裝置要能被控制,就必須要有可以控制它的程式,但由於linux的space分為kernel level與user level,所以當一般應用程式與硬體裝置有需要互動時,則需要透過device node來作媒介溝通,然而有媒介卻還不夠,需要有可以跟device node溝通的媒介,所以驅動程式就上場了。下圖為user level process與kernel level device driver及device node之間的關係。 該資料夾下,主要存放目前已存在的device node,何謂device node,與單一硬體相對映的file node,目前又需分為三種device node - character device
- block device
- network device
如何分辨呢? $ ls -l /dev;) 下圖中,c 開頭的是character device、b 開頭的是block device,至於有l開頭的則是一般的link - Major/Minor用途
- Device driver handler
linux 已定義handler structure, file_operations, 但這只是一個外殼,內部的各個operations都要自己定義,等各個operations都定義好後,要透過file_operation 去指定。可使用gcc的擴充語法,就不用一個個指定了,指定方法如下 struct file_operations devnode_fops = { .open = devnode_open, .close = devnode_close, .ioctl = devnode_ioctl };
|
指定好後,剩餘沒有指定到的operations就會自動指向NULL,當然只有你有指定的operations才可以用,不然屆時呼叫都是沒有用的。
|