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

2022-09-19 01:33:11 字數 2571 閱讀 1931

一、概念簡述

在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命令解除安裝模組,採用這種動態載入的方式便於驅動程式的除錯,同時可以針對產品的功能需求,進行核心的裁剪...