一、概念簡述
在linux下可以通過兩種方式載入驅動程式:靜態載入和動態載入。
動態載入利用了linux的module特性,可以在系統啟動後用insmod命令新增模組(.ko),在不需要的時候用rmmod命令解除安裝模組,採用這種動態載入的方式便於驅動程式的除錯,同時可以針對產品的功能需求,進行核心的裁剪,將不需要的驅動去除,大大減小了核心的儲存容量。
在台式電腦上,一般採用動態載入的方式;在嵌入式產品裡,可以先採用動態載入的方式進行除錯,除錯成功後再編譯進核心。
linux下pci裝置驅動程式之註冊詳解
裸機驅動與linux裝置驅動的區別
linux裝置驅動開發詳解(第2版)高畫質pdf
二、例項分析
下面以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,表示不編譯;
三、遇到的問題
問題:動態載入過程中,出現下面錯誤:
錯誤:註冊和登出裝置的符號未知。
解決方法:尋找依賴關係,檢視幾個符號的定義,發現在soundcore.c檔案中定義了以上幾個函式,同時匯出了符號,以register_sound_dsp為例,如下圖所示:
所以應該先載入soundcore.ko,後載入s3c2410-oss.ko。
注意:在kconfig和makefile檔案中定義了依賴關係,也可以查詢到問題的原因。
本文永久更新鏈結位址:
linux linux驅動載入的兩種方式
動態載入 在系統啟動後,通過insmod或modprobe命令載入.ko核心目標檔案,成功後可通過mknod指令進行掛載節點,不需要的時候可通過rmmod命令來解除安裝模組。優點 1 生成的核心檔案小 2 系統啟動時間短。3 使用靈活。缺點 每次使用都需要通過命令進行載入與解除安裝,操作麻煩。靜態載...
Linux驅動的兩種載入方式過程分析
一 概念簡述 在linux下可以通過兩種方式載入驅動程式 靜態載入和動態載入。動態載入利用了linux的module特性,可以在系統啟動後用insmod命令新增模組 ko 在不需要的時候用rmmod命令解除安裝模組,採用這種動態載入的方式便於驅動程式的除錯,同時可以針對產品的功能需求,進行核心的裁剪...
Linux驅動的兩種載入方式過程分析
一 概念簡述 在linux下能夠通過兩種方式載入驅動程式 靜態載入和動態載入。若採用靜態載入的驅動較多,會導致核心容量非常大,浪費儲存空間。動態載入利用了linux的module特性,能夠在系統啟動後用insmod命令加入模組 ko 在不須要的時候用rmmod命令解除安裝模組,採用這樣的動態載入的方...