2010-07-19 16:01
在類unix作業系統中,驅動載入方式一般分為:動態載入和靜態載入,下面分別對其詳細論述。
一、動態載入
動態載入是將驅動模組載入到核心中,而不能放入/lib/modules/下。
在2.4核心中,載入驅動命令為:insmod ,刪除模組為:rmmod;
在2.6以上核心中,除了insmod與rmmod外,載入命令還有modprobe;
insmod與modprobe不同之處:
insmod 絕對路徑/××.o,而modprobe ××即可,不用加.ko或.o字尾,也不用加路徑;最重要的一點是:modprobe同時會載入當前模組所依賴的其它模組;
lsmod檢視當前載入到核心中的所有驅動模組,同時提供其它一些資訊,比如其它模組是否在使用另乙個模組。
二、靜態載入
(一)概念
在執行make menuconfig命令進行核心配置裁剪時,在視窗中可以選擇是否編譯入核心,還是放入/lib/modules/下相應核心版本目錄中,還是不選。
(二)操作步驟
linux裝置一般分為:字元裝置、塊裝置和網路裝置,每種裝置在核心源**目錄樹drivers/下都有對應的目錄,其載入方法類似,以下以字元裝置靜態載入為例,假設驅動程式源**名為ledc.c,具體操作步驟如下:
第一步:將ledc.c源程式放入核心原始碼drivers/char/下;
第二步:修改drivers/char/config.in檔案,具體修改如下:
按照開啟檔案中的格式新增即可;
在檔案的適當位置(這個位置隨便都可以,但這個位置決定其在make menuconfig視窗中所在位置)加入以下任一段**:
tristate 'leddriver' config_ledc
if [ "$config_ledc" = "y" ];then
bool ' support for led on h9200 board' config_ledc_console
fi說明:以上**使用tristate來定義乙個巨集,表示此驅動可以直接編譯至核心(用*選擇),也可以編制至/lib/modules/下(用m選擇), 或者不編譯(不選)。
bool 'leddriver' config_ledc
if [ "$config_ledc" = "y" ];then
bool ' support for led on h9200 board' config_ledc_console
fi說明:以上**使用tristate來定義乙個巨集,表示此驅動只能直接編譯至核心(用*選擇)或者不編譯(不選),不能編制至/lib/modules/ 下(用m選擇)。
第三步:修改drivers/char/makefile檔案
在適當位置加入下面一行**:
obj-$(config_ledc) += ledc.o
或者在obj-y一行中加入ledc.o,如:
obj-y += ledc.o mem.o 後面不變;
ok,經過以上的設定就可以在執行make menuconfig命令後的視窗中的character devices---> 中進行選擇配置了。選擇後重新編譯就ok了。
新增linux核心驅動
1.將核心驅動.ko放入 lib modules 3.2.0 23 generic kernel drivers 目錄下 2.執行depmod a來解決依賴 掃瞄driver下的驅動依賴關係 命令執行完成後,會自動生成modules.dep 和modules.alias。dep為依賴關係。3.更新當...
linux 使用者配置項
1 終端命令提示符設定 在.bashrc檔案下新增 ps1 u h w 2 新增當前路徑到環境變數 在.bash profile檔案下新增 path path export path 3 設定中文編碼環境 在.bash profile檔案下新增 export lang zh cn.utf 8 4 設...
Linux 新增DNS配置
dns主要用於網域名稱與 ip 位址的相互轉換,以及控制網際網路的電子郵件的傳送。問題背景 最近使用了乙個新的伺服器,想傳送郵件,結果發不出來。日誌提示server或port錯誤 檢查了一下沒有錯誤啊,於是登入後台ping一下郵件伺服器的位址,比如 ping smtp.163.com,結果ping不...