兩篇讓我理解linux驅動的文章及我的精練總結

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   使用   

第一篇

轉載自csdn vipclx

編寫Linux驅動八步驟

一、建立Linux驅動架構(裝載、卸載Linux驅動)

    Linux核心在使用驅動時首先要裝載驅動,在裝載過程中進行一些初始化動作(建立裝置檔案、分配記憶體等),在驅動程式中需提供相應函數來處理驅動初始化工作,該函數須使用module_init宏指定;Linux系統在退出是需卸載Linux驅動,卸載過程中進行一些退出工作(刪除裝置檔案、釋放記憶體等),在驅動程式中需提供相應函數來處理退出工作,該函數須使用module_exit宏指定。Linux驅動程式一般都要這兩個宏指定這兩個函數,所以包含這兩個宏以及其所指定的兩個函數的C程式可看作是Linux驅動的架構。

二、註冊和登出裝置檔案

    任何Linux驅動都需要有一個裝置檔案來與應用程式進行互動。建立裝置檔案的工作一般在上一步module_init宏指定的函數中完成的,可以使用misc_register函數建立裝置檔案;刪除裝置檔案的工作一般在上一步module_exit宏指定的函數中完成的,可以使用misc_deregister函數刪除裝置檔案。

三、指定驅動相關資訊

    驅動程式是自描述的,驅動程式的資訊需要在驅動原始碼中指定。通過MODULE_AUTHOR(作者姓名)、MODULE_LICENSE(使用的開源協議)、MODULE_ALIAS(別名)、MODULE_DESCRIPTION(驅動描述)等宏來指定與驅動相關的資訊,這些宏一般寫在驅動源碼檔案的結尾。可通過modinfo命令擷取這些資訊。

四、指定回呼函數

    Linux驅動包含了很多動作,也稱為事件,如“讀”“寫”事件,觸發相應事件時Linux系統會自動調用對於驅動程式的相應回呼函數。一個驅動程式不一定要指定所以的回呼函數。回呼函數通過相關機制進行註冊。如與裝置檔案相關的回呼函數使用misc_register函數註冊。

五、編寫商務邏輯

    沒什麼可說的,總不能註冊一些空的回呼函數,什麼也不做吧。

六、編寫Makefile檔案

    Linux核心源碼的編譯規則是通過Makefile檔案定義的,每個Linux驅動程式必須要有一個Makefile檔案。

七、編譯Linux驅動程式

    Linux驅動程式可直接編譯進核心(使用obj-y編譯),也可以作為模組單獨編譯(使用obj-m編譯)。

八、安裝和卸載Linux驅動

    如果將驅動編譯進核心,只要Linux使用該核心,驅動程式就會自動裝載。如果Linux驅動程式以模組單獨存在,需要使用insmod或modprobe命令裝載Linux驅動模組,使用rmmod命令卸載該模組。

第二篇

 

 

Linux 驅動程式開發步驟

Linux 核心就是由各種驅動組成的,核心源碼中大約85%是各種驅動程式的代碼。核心中驅動程式種類齊全,可以在同類型驅動的基礎上進行修改以適應具體單板
       編寫驅動的痛點並不是硬體的具體操作,而是弄清楚現有驅動程式的構架,在這個構架中加入這個硬體。花費精力的地方在於,瞭解某裝置的驅動構架,找到修改的位置。

     此外,還要考慮驅動的並發問題等。  編寫Linux大致流程:    1.查看原理圖,資料手冊,瞭解裝置的操作方法    2.在核心中找到相近的驅動程式,以它為模板進行開發,有時候需要從0開始    3.實現驅動程式的初始化,比如向核心註冊這個驅動程式,這樣應用程式傳入檔案名稱時,核心才能找到相應的驅動程式。     4.設計所要實現的操作,如open,close,read,write等函數。    5.實現中斷服務(中斷並不是每個裝置驅動所必須的)   6.編譯驅動程式到核心中,或者用insmod命令載入   7.測試驅動程式。   驅動程式的載入和卸載     可以將驅動程式靜態編譯進核心中,也可以將他作為一個模組在使用時再載入。在配置核心時,如果某個配置項被設為m,就表示他被編譯成一個模組     insmod載入    rmmod卸載   lsmod查看核心中已經載入了哪些模組     當使用insmod載入模組時,模組的初始化函數被調用,它用來向核心註冊驅動程式。 當使用rmmod卸載模組時,模組的清除函數被調用   假設初始化函數為my_init,清除函數為my_cleanup 則   module_init(my_init);       module_exit(my_cleanup);

 

一 編寫字元裝置驅動   編寫字元裝置驅動程式就是為具體的硬體的file_operations結構編寫各個函數   那麼,當應用程式通過open,read,write等系統調用訪問某個裝置檔案時,Linux系統怎麼知道去調用哪個驅動程式的file_operator結構中的open,read,write等成員呢?      1.模組初始化時,將主裝置號與file_operations一起註冊         驅動程式中有一個初始化函數,在安裝驅動程式時會調用它。在初始化函數中,會將驅動程式file_operation結構連同其主裝置號一起向核心進行註冊。對於字元型裝置,使用int  register_chrdev 這樣,應用程式操作裝置檔案時,Linux系統會根據裝置檔案類型,主裝置號找到核心中註冊的file_operation結構,(對於塊裝置為block_device_operations結構),次裝置號僅供驅動程式自身用來分辨他是同類裝置中的第幾個。    編寫驅動程式的大致過程: 1.編寫驅動程式初始化函數。    進行必要的初始化,包括硬體初始化(也可放在其他地方),向核心註冊驅動程式等。 2.構造file_operation    進階的驅動編程還涉及中斷,select機制,fasync非同步通知機制。等

 

  驅動程式編譯 將光碟片上編寫好的XXX.c的驅動檔案放入核心drivers/char 子目錄下,在drivers/char/Makefile中添加下面一行 obj-m += XXX.o 然後在核心根目錄下執行“make modules”,就可以產生.ko檔案   最後,要在開發板根檔案系統中建立裝置檔案 mknod /dev/leds c 231 0

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.