一、概念簡述
在linux下能夠通過兩種方式載入驅動程式:靜態載入和動態載入。
若採用靜態載入的驅動較多,會導致核心容量非常大,浪費儲存空間。
動態載入利用了linux的module特性,能夠在系統啟動後用insmod命令加入模組(.ko),在不須要的時候用rmmod命令解除安裝模組,採用這樣的動態載入的方式便於驅動程式的除錯,同一時候能夠針對產品的功能需求。進行核心的裁剪,將不須要的驅動去除。大大減小了核心的儲存容量。
在台式電腦上,一般採用動態載入的方式;在嵌入式產品裡。能夠先採用動態載入的方式進行除錯,除錯成功後再編譯進核心。
二、例項分析
以下以linux下音訊驅動的載入為例,分析兩種方式的載入過程。
1、靜態載入
1)解壓核心,改動硬體架構和編譯器;
將核心壓縮檔案linux-2.6.8.1-zzm.tar.bz2解壓到/home/sxy/資料夾下,命令是
。解壓後得到核心源**資料夾檔案linux-2.6.8.1-zzm,進入該資料夾,編輯makefile檔案,將arch改為arm。cross_cpmpile改為arm-linux-,例如以下圖所看到的:
儲存後退出。
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命令解除安裝模組,採用這種動態載入的方式便於驅動程式的除錯,同時可以針對產品的功能需求,進行核心的裁剪...