Linux驅動的兩種載入方式過程分析

2021-06-22 13:12:12 字數 2388 閱讀 4221

一、概念簡述

在linux下可以通過兩種方式載入驅動程式:靜態載入和動態載入。

動態載入利用了linux的module特性,可以在系統啟動後用insmod命令新增模組(.ko),在不需要的時候用rmmod命令解除安裝模組,採用這種動態載入的方式便於驅動程式的除錯,同時可以針對產品的功能需求,進行核心的裁剪,將不需要的驅動去除,大大減小了核心的儲存容量。

在台式電腦上,一般採用動態載入的方式;在嵌入式產品裡,可以先採用動態載入的方式進行除錯,除錯成功後再編譯進核心。

二、例項分析

下面以linux下音訊驅動的載入為例,分析兩種方式的載入過程。

1、靜態載入

1)解壓核心,修改硬體架構和編譯器;

將核心壓縮檔案linux-2.6.8.1-zzm.tar.bz2解壓到/home/sxy/目錄下,命令是

儲存後退出。

2)配置核心;

在核心原始碼樹目錄下,輸入make menuconfig命令,進入核心配置介面,進入「load an alternate configuration file」選項,載入配置檔案kernel_2410.cfg,儲存退出,過程如下圖所示:

再次輸入make menuconfig命令,編輯sound選項,將其編譯進核心(

*),結果如下圖所示,最後儲存配置,退出。

3)編譯核心;

在原始碼樹目錄下輸入make zimage命令,編譯完成後可以在/arch/arm/boot/目錄下生成zimage映象檔案。

2、動態載入

1)解壓核心,過程與靜態編譯時一樣,略;

2) 配置核心,前面過程與靜態編譯時一樣,再次輸入命令make menuconfig,配置sound選項時,將其編譯成模組(

m),結果如下圖所示,最後儲存配置,退出;

這樣就將音效卡驅動編譯成模組,可以動態選擇是否載入到核心中。

說明:首先,將虛擬機器下的/home/目錄掛載到開發板上的/tmp/目錄下,然後先後載入

soundcore.ko

和s3c2410-oss.ko

兩個模組,最後通過lsmod命令檢視是否載入上音效卡驅動,結果顯示載入成功,這樣就可以在應用空間程式設計,實現音訊的錄放等操作。

ps:①

採用make menuconfig

命令時,選項*代表

y,表示將驅動編譯進核心;

m表示將驅動編譯成模組;空代表

n,表示不編譯;

核心檔案與模組兩者有很多東西必須匹配,編譯器版本、原始碼版本、編譯時的配置等,所以當核心檔案修改了,譬如修改了驅動的編譯選項(y、m、n

三、遇到的問題

問題:動態載入過程中,出現下面錯誤:

錯誤:註冊和登出裝置的符號未知。

解決方法:尋找依賴關係,檢視幾個符號的定義,發現在soundcore.c檔案中定義了以上幾個函式,同時匯出了符號,以register_sound_dsp為例,如下圖所示:

所以應該先載入soundcore.ko,後載入s3c2410-oss.ko。

注意:在kconfig和makefile檔案中定義了依賴關係,也可以查詢到問題的原因。

2023年6月21日星期六11時25分

linux linux驅動載入的兩種方式

動態載入 在系統啟動後,通過insmod或modprobe命令載入.ko核心目標檔案,成功後可通過mknod指令進行掛載節點,不需要的時候可通過rmmod命令來解除安裝模組。優點 1 生成的核心檔案小 2 系統啟動時間短。3 使用靈活。缺點 每次使用都需要通過命令進行載入與解除安裝,操作麻煩。靜態載...

Linux驅動的兩種載入方式過程分析

一 概念簡述 在linux下可以通過兩種方式載入驅動程式 靜態載入和動態載入。動態載入利用了linux的module特性,可以在系統啟動後用insmod命令新增模組 ko 在不需要的時候用rmmod命令解除安裝模組,採用這種動態載入的方式便於驅動程式的除錯,同時可以針對產品的功能需求,進行核心的裁剪...

Linux驅動的兩種載入方式過程分析

一 概念簡述 在linux下能夠通過兩種方式載入驅動程式 靜態載入和動態載入。若採用靜態載入的驅動較多,會導致核心容量非常大,浪費儲存空間。動態載入利用了linux的module特性,能夠在系統啟動後用insmod命令加入模組 ko 在不須要的時候用rmmod命令解除安裝模組,採用這樣的動態載入的方...