驅動開發之模組

2021-07-25 23:21:03 字數 2415 閱讀 4099

模組

可以在執行時插入到核心中的**叫做模組

模組和應用程式的區別

應用程式         模組

1. 執行空間        使用者空間         核心空間

2. 入口函式        main             載入函式

3. 庫              usr/lib          核心原始碼庫

4. 資源釋放        可以釋放         必須釋放

5. 段錯誤的危害    危害小           危害大

模組三要素

模組許可證宣告(必須)

module_license( "gpl" )

模組載入函式(必須) 

1 --  預設形式

int init_module(void)

2 -- 自定義形式

int hello_init(void)

module_init(hello_init);

模組解除安裝函式(必須) 

1  -- 預設形式

void cleanup_module(void)

2 -- 自定義形式

void hello_exit(void)

module_exit(hello_exit);

操作模組的命令

1. 插入模組

sudo insmod hello.ko

2. 檢視核心中插入的所以模組

lsmod

定位查詢

lsmod | grep hello

3. 檢視printk的資訊

dmesg

清除printk的緩衝區: sudo dmesg -c   //先顯示再清除

sudo dmesg -c   //直接清除

4. 刪除乙個模組

sudo rmmod hello

模組引數

insmod ***.ko btrate=115100

1. 在模組裡面定義乙個變數來接收引數

int myint = 0;

2. 宣告這個變數是用來接收引數的

module_param(引數名,引數型別,引數讀/寫許可權)

module_param(myint, int, 0600);

//引數描述 ,可以通過modinfo檢視

module_parm_desc (myshort, "a short integer");

3. 使用

insmod hello.ko myint=10 mystring="hello" myarr=1,3,5,7

多檔案程式設計

模組匯出符號

***********************************==  搭建字元裝置驅動的框架  *************************====

驅動分類

按訪問順序分類:

字元裝置

順序訪問

滑鼠,鍵盤,串列埠      幀緩衝裝置

c塊裝置

按塊進行訪問,一般都有緩衝區

儲存裝置

b網路裝置

soket

網絡卡裝置號

檢視當前主機的裝置號

1.cd /dev

ls -l |grep 裝置名     //顯示主裝置號和次裝置號

2.cat /proc/devices   //只顯示主裝置號

本質:32位的無符號整形   dev_t

高12位:主裝置號   代表這個裝置屬於哪一類裝置

低20位:次裝置號   區分這個裝置屬於這類裝置中的具體哪乙個

自定義裝置號:

int major = 255;

int minor = 0;

//傳統的方法

dev_t devno = major << 20 | minor;

dev_t devno = mkdev(major, minor);

註冊裝置號

int register_chrdev_region(dev_t from, unsigned count, const char *name)

from:要註冊的裝置號

count:要註冊的數量

name:名字

返回值:成功返回0, 失敗返回負數

釋放裝置號:

void unregister_chrdev_region(dev_t from, unsigned count) 

動態申請裝置號

int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name) 

dev:輸出引數,用來儲存申請到的裝置號

baseminor:你要申請的第乙個次裝置號

返回值:成功返回0, 失敗返回負數

最後:當前linux核心用的標頭檔案:

linux驅動開發 模組引數

在我們使用模組的時候需要在裝載時傳遞引數給模組,linux 支援在裝載模組的同時傳入引數 比如 num 和who就是傳入模組的引數 insmod hello.ko num 10 who jack 模組引數必須用module parm巨集宣告,這個巨集定義在,剛才連個引數在模組中的定義如下 stati...

RTC模組驅動開發總結

1 rtc模組的裝置驅動模型 2 i2c模組的驅動模型 3 rtc模組涉及的檔案和資料結構 934x.c 該檔案為系統的硬體平台檔案,定義了rtc模組用到的硬體資源,包括記憶體位址空間,gpio,中斷資源,並將rtc裝置註冊進核心的裝置鍊錶中。rtc ds1307.c 該檔案為rtc模組的裝置驅動檔...

驅動開發 1 模組hello world

本文介紹在核心編譯模組 載入和解除安裝模組的過程。首先開發環境是linux 4.4.0 兩份 hello.c makefile。這兩份 放到 呢?答案是 都可以,不過要注意放在乙個資料夾下。這個資料夾的位置就是makefile中的current path,編譯終端在這個資料夾開啟就行。hello.c...