天天看點

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視窗中所在位置)加入以下任一段代碼:

    第三步:編輯配置檔案Kconfig,加入驅動選項,使之在make menuconfig 的時候出現

打開 kernel-2.6.13/drivers/char/Kconfig 檔案,添加

config DEMO_WYK

        tristate "DEMO test module"

        depends on X86_32

其他版本有:config QQ2440_HELLO_MODULE

        tristate "QQ2440/mini2440 Hello Module sample"

        depends on ARCH_S3C2410

        help

        QQ2440 hello module sample

or

   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 後面不變;

Step5:在kernel-2.6.13目錄下執行make menuconfig

在Device Driver——Character Driver下将QQ2440_HELLO_MODULE選為M,子產品方式,退出儲存設定。

Step6:執行指令 make modules。在char目錄下産生qq2440_hello_module.ko的檔案。傳到開發闆上。

Step7:在超級終端 執行 chmod a+rwx qq2440_hello_module.ko

Step8:加載驅動子產品,執行insmod qq2440_hello_module.ko

顯示:

Hello, QQ2440 module is installed !

Step9:解除安裝驅動子產品,執行rmmod qq2440_hello_module.ko

顯示加載驅動子產品,執行

Good-bye, QQ2440 module was removed!

繼續閱讀