Shih-Shen Lu

統計

技術分享網頁導覽‎ > ‎Linux‎ > ‎

Linux Device Driver(LDD)(uncomplete)

  • 前言

Linux Device Driver(Linux 裝置驅動程式)

        顧名思義,裝置要能被控制,就必須要有可以控制它的程式,但由於linux的space分為kernel level與user level,所以當一般應用程式與硬體裝置有需要互動時,則需要透過device node來作媒介溝通,然而有媒介卻還不夠,需要有可以跟device node溝通的媒介,所以驅動程式就上場了。下圖為user level process與kernel level device driver及device node之間的關係。


  • 開門見山 小例子

  • 開發環境需求

  • 基本概念建立

    • /dev/*
        該資料夾下,主要存放目前已存在的device node,何謂device node,與單一硬體相對映的file node,目前又需分為三種device node
  1. character device
  2. block device
  3. 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才可以用,不然屆時呼叫都是沒有用的。