一、概念簡述
在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,表示不編譯;
三、遇到的問題
問題:動態載入過程中,出現下面錯誤:
錯誤:註冊和登出裝置的符號未知。
解決方法:尋找依賴關係,檢視幾個符號的定義,發現在soundcore.c檔案中定義了以上幾個函式,同時匯出了符號,以register_sound_dsp為例,如下圖所示:
所以應該先載入soundcore.ko,後載入s3c2410-oss.ko。
注意:在kconfig和makefile檔案中定義了依賴關係,也可以查詢到問題的原因。
2023年10月17日星期一12時22分
Linux的兩種安裝方式
首先,介紹一下linux的安裝方式,可以是yum安裝,也可以是原始碼包安裝。yum 安裝nginx非常簡單,就輸入一條命令即可。sudo yum y install nginx 安裝 nginx sudo yum remove nginx 解除安裝 nginx 通過yum安裝的時候提示下面的錯誤 y...
linux 安裝nginx兩種方式
1 安裝依賴包 yum y install gcc zlib zlib devel pcre devel openssl openssl devel 2 官網下在nginx 3 cd usr local中mkdir nginx建立資料夾存放配置檔案 5 解壓 tar zxvf nginx xx.ta...
Linux驅動的兩種載入方式過程分析
一 概念簡述 在linux下可以通過兩種方式載入驅動程式 靜態載入和動態載入。動態載入利用了linux的module特性,可以在系統啟動後用insmod命令新增模組 ko 在不需要的時候用rmmod命令解除安裝模組,採用這種動態載入的方式便於驅動程式的除錯,同時可以針對產品的功能需求,進行核心的裁剪...