编写linux驱动程序步骤
一、建立Linux驅(qū)動框架(裝載、卸載Linux驅(qū)動)
? ? Linux內(nèi)核在使用驅(qū)動時首先要裝載驅(qū)動,在裝載過程中進行一些初始化動作(建立設備文件、分配內(nèi)存等),在驅(qū)動程序中需提供相應函數(shù)來處理驅(qū)動初始化工作,該函數(shù)須使用module_init宏指定;Linux系統(tǒng)在退出是需卸載Linux驅(qū)動,卸載過程中進行一些退出工作(刪除設備文件、釋放內(nèi)存等),在驅(qū)動程序中需提供相應函數(shù)來處理退出工作,該函數(shù)須使用module_exit宏指定。Linux驅(qū)動程序一般都要這兩個宏指定這兩個函數(shù),所以包含這兩個宏以及其所指定的兩個函數(shù)的C程序可看作是Linux驅(qū)動的框架。
二、注冊和注銷設備文件
? ? 任何Linux驅(qū)動都需要有一個設備文件來與應用程序進行交互。建立設備文件的工作一般在上一步module_init宏指定的函數(shù)中完成的,可以使用misc_register函數(shù)創(chuàng)建設備文件;刪除設備文件的工作一般在上一步module_exit宏指定的函數(shù)中完成的,可以使用misc_deregister函數(shù)刪除設備文件。
三、指定驅(qū)動相關信息
? ? 驅(qū)動程序是自描述的,驅(qū)動程序的信息需要在驅(qū)動源代碼中指定。通過MODULE_AUTHOR(作者姓名)、MODULE_LICENSE(使用的開源協(xié)議)、MODULE_ALIAS(別名)、MODULE_DESCRIPTION(驅(qū)動描述)等宏來指定與驅(qū)動相關的信息,這些宏一般寫在驅(qū)動源碼文件的結(jié)尾。可通過modinfo命令獲取這些信息。
四、指定回調(diào)函數(shù)
? ? Linux驅(qū)動包含了很多動作,也稱為事件,如“讀”“寫”事件,觸發(fā)相應事件時Linux系統(tǒng)會自動調(diào)用對于驅(qū)動程序的相應回調(diào)函數(shù)。一個驅(qū)動程序不一定要指定所以的回調(diào)函數(shù)。回調(diào)函數(shù)通過相關機制進行注冊。如與設備文件相關的回調(diào)函數(shù)使用misc_register函數(shù)注冊。
五、編寫業(yè)務邏輯
? ? 沒什么可說的,總不能注冊一些空的回調(diào)函數(shù),什么也不做吧。
六、編寫Makefile文件
? ? Linux內(nèi)核源碼的編譯規(guī)則是通過Makefile文件定義的,每個Linux驅(qū)動程序必須要有一個Makefile文件。
七、編譯Linux驅(qū)動程序
? ? Linux驅(qū)動程序可直接編譯進內(nèi)核(使用obj-y編譯),也可以作為模塊單獨編譯(使用obj-m編譯)。
八、安裝和卸載Linux驅(qū)動
? ? 如果將驅(qū)動編譯進內(nèi)核,只要Linux使用該內(nèi)核,驅(qū)動程序就會自動裝載。如果Linux驅(qū)動程序以模塊單獨存在,需要使用insmod或modprobe命令裝載Linux驅(qū)動模塊,使用rmmod命令卸載該模塊。
總結(jié)
以上是生活随笔為你收集整理的编写linux驱动程序步骤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ORAN专题系列-20:5G O-RAN
- 下一篇: linux驱动 自旋锁