在類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了。