字元裝置驅動開發簡要

2021-10-07 19:44:11 字數 2233 閱讀 4768

linux 驅動開發中我們需要按照其規定的框架來編寫驅動,所以說學 linux 驅動開發重點是學習其驅動框架。

linux 驅動有兩種執行方式:

第一種就是將驅動編譯進 linux 核心中,這樣當 linux 核心啟 動的時候就會自動執行驅動程式。

第二種就是將驅動編譯成模組(linux 下模組擴充套件名為.ko),在 linux 核心啟動以後使用「insmod」命令載入驅動模組。在除錯驅動的時候一般都選擇將其編譯 為模組,這樣我們修改驅動以後只需要編譯一下驅動**即可,不需要編譯整個 linux **。而且在除錯的時候只需要載入或者解除安裝驅動模組即可,不需要重啟整個系統。總之,將驅動編 譯為模組最大的好處就是方便開發,當驅動開發完成,確定沒有問題以後就可以將驅動編譯進linux 核心中,當然也可以不編譯進 linux 核心中,具體看自己的需求。

驅動模組的載入和解除安裝

驅動編譯完成以後擴充套件名為.ko,有兩種命令可以載入驅動模組:insmod和 modprobe,insmod

是最簡單的模組載入命令,此命令用於載入指定的.ko 模組,比如載入 drv.ko 這個驅動模組,命令如下:

insmod drv.ko

驅動模組的解除安裝使用命令「rmmod」即可,比如要解除安裝 drv.ko,使用如下命令即可:

rmmod drv.ko

字元裝置註冊與登出

對於字元裝置驅動而言,當驅動模組載入成功以後需要註冊字元裝置,同樣,解除安裝驅動模組的時候也需要登出掉字元裝置。

1

static

struct file_operations test_fops;23

/* 驅動入口函式 */

4static

int __init ***_init

(void)5

14return0;

15}1617

/* 驅動出口函式 */

18static

void __exit ***_exit

(void)19

2324

/* 將上面兩個函式指定為驅動的入口和出口函式 */

25module_init

(***_init);26

module_exit

(***_exit)

;

第 10 行,呼叫函式 register_chrdev 註冊字元裝置,主裝置號為 200,裝置名字為「chrtest」,

裝置操作函式集合就是第 1 行定義的 test_fops。要注意的一點就是,選擇沒有被使用的主裝置號,輸入命令「cat /proc/devices」可以檢視當前已經被使用掉的裝置號,如圖 40.2.2.1 所示(限於篇幅原因,只展示一部分):

編譯驅動程式

工程建立好以後就可以開始編寫驅動程式了,新建 chrdevbase.c,首先編譯驅動程式,也就是 chrdevbase.c 這個檔案,我們需要將其編譯為.ko 模組,建立makefile檔案。

編譯成功以後就會生成乙個叫做 chrdevbaes.ko 的檔案,此檔案就是 chrdevbase 裝置的驅動模組。至此,chrdevbase 裝置的驅動就編譯成功。

執行測試載入驅動模組

檢查開發板根檔案系統中有沒有「/lib/modules/4.1.15-」這個目錄,如果沒有的話自行建立。將 chrdevbase.ko 複製到 /lib/modules/4.1.15-

輸入如下命令載入 chrdevbase.ko 驅動檔案:

insmod chrdevbase.ko

建立裝置節點檔案

驅動載入成功需要在/dev 目錄下建立乙個與之對應的裝置節點檔案,應用程式就是通過操

作這個裝置節點檔案來完成對具體裝置的操作。輸入如下命令建立/dev/chrdevbase 這個裝置節點檔案:

mknod /dev/chrdevbase c 200 0

其中「mknod」是建立節點命令,「/dev/chrdevbase」是要建立的節點檔案,「c」表示這是個字元裝置,「200」是裝置的主裝置號,「0」是裝置的次裝置號。

解除安裝驅動模組

如果不再使用某個裝置的話可以將其驅動解除安裝掉,比如輸入如下命令解除安裝掉 chrdevbase 這個裝置:

rmmod chrdevbase.ko

驅動 linux裝置驅動 字元裝置驅動開發

preface 前面對linux裝置驅動的相應知識點進行了總結,現在進入實踐階段!linux 裝置驅動入門篇 linux 裝置驅動掃盲篇 fedora下的字元裝置驅動開發 開發乙個基本的字元裝置驅動 在linux核心驅動中,字元裝置是最基本的裝置驅動。字元裝置包括了裝置最基本的操作,如開啟裝置 關閉...

字元裝置驅動開發

一 驅動模組的載入和解除安裝 linux 驅動有兩種執行方式,第一種就是將驅動編譯進 linux 核心中,這樣當 linux 核心啟動的時候就會自動執行驅動程式。第二種就是將驅動編譯成模組 linux 下模組擴充套件名為 ko 在 linux 核心啟動以後使用 insmod 命令載入驅動模組。在除錯...

驅動開發 字元裝置1

函式的呼叫 open syscall define3 sys open char filename,inflag do sys open do file open path openat do tmpfile return fd finish open do dentry open open ino...