linux 驅動配置項添加

2010-07-19 16:01

linux驅動加載

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

發佈了137 篇原創文章 · 獲贊 31 · 訪問量 116萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章