linux驅動學習筆記(一)

2021-07-07 01:35:21 字數 1242 閱讀 5317

1. linux下的c程式設計特點

if/forwhile/switch語句,「{"不另起一行

if和for只有一行**,不要使用"";對於函式需要另起一行使用""。

2. switch case 語句switch 與 case 對齊使用

3. 核心模組的載入,解除安裝,顯示命令

insmod 載入核心模組

rmmod  解除安裝核心模組

lsmod 顯示當前核心模組,對應/pro/modules檔案

4. linux核心模組程式結構

⑴模組載入函式(一般需要)

⑵模組解除安裝函式(一般需要)

⑶模組許可證宣告(必須)

⑷模組引數(可選)

⑸模組匯出符號(可選)

⑹模組作者等資訊宣告(可選)

5. 模組載入函式

static int __init initialization_function(void)

module_init (initialization_function);

模組的載入必須以module_init(函式名)的形式被指定;

6. 模組解除安裝函式

static int __exit cleanup_function(void)

module_exit(cleanup_function);

模組在解除安裝的時候不返回任何值,必須以module_exit(函式名)的形式來指定。

7. 模組載入和解除安裝完成的功能

1)若模組載入函式時註冊了***,則模組解除安裝函式應該登出***。

2)若模組載入函式動態申請了記憶體,則模組解除安裝函式應釋放該記憶體。

3)若模組載入函式申請了硬體資源(中斷、dma通道、i/o埠和i/o記憶體等)的占用,則模組解除安裝函式應該釋放掉這些硬體資源。

4)若模組載入函式開啟了硬體,則解除安裝函式中一般要關閉之。

8. 模組的使用計數

linux 2.4核心中模組在身通過mod_inc_use_count、mod_dec_use_count巨集來管理自己被使用的次數。

linux 2.6核心提供了管理介面try_module_get(&module)和module_put(&module),取代了2.4核心中的模組使用計數管理巨集。

int try_module_get(struct module *module);返回0表示呼叫失敗,

void module_put(struct module *module);用於減少模組的計數。

只有當前裝置不再被使用時,模組才允許被解除安裝。

Linux核心 驅動學習筆記 一

今天討論到核心啟動階段對外部裝置初始化的過程,於是粗略的看了一下相關 得到以下一些印象 未必正確,希望大家指正 1.對外部裝置初始化 出現的地方應該是 init 程序 bootloader start 彙編 decompress start kernel rest init kernel threa...

linux驅動學習筆記

1.先從最簡單的例子開始 include include module license dual bsd gpl static int hello init void printk kern alert hello,world n return 0 static void hello exit vo...

Linux 驅動學習筆記 字元裝置驅動模板 一

驅動入口函式 static int init init void 驅動出口函式 static void exit exit void 將上面兩個函式指定為驅動的入口和出口函式 module init init module exit exit module license gpl 新增協議 modu...