驅動的兩種編譯方法

靜態編譯

        就是直接把驅動放到內核中,成爲內核中的一部分。把寫好的驅動源代碼(led.c文件)放到,內核的字符驅動中(路徑爲:linux-2.6.32.2/drivers/char ),然後修改下配置;

第一部分要修改的是:

        修改文件Kconfig(vim linux-2.6.32.2/drivers/char/Kconfig)

        往裏面添加:

        config MY2440_LEDS
           tristate "Leds driver yzh"(在make  menuconfig時顯示的驅動模塊名稱)

          depends on ARCH_S3C2440  (如果選擇了這個配置,表示只有在s3c2440系統上纔會出現這個選項)
          default y
           ---help---
               myLeds yuzhihui  

        修改上面一部分只是在make menuconfig時能夠有相應的選項來給用戶選擇是否加載這個驅動模塊;

    

        選擇模塊步驟(也就是編譯內核步驟):

        make menuconfig(在這之前要把開發板內核對應的屏幕配置文件修改成.config文件,比如:cp config_mini2440_x35 .config)

       1、如果在Kconfig中添加配置時選擇了depends on  ARCH_S3C2440,那麼這裏要先進入:system type --> 選擇你依賴的平臺。如果沒有添加那句話,則這裏可以省略;

       2、依次進入:Device Drivers  --->>  Character devices --->>   <*> Leds driver yzh (這時候就會有你上面添加的模塊選項)

   

第二部分要修改的是:

        修改文件Makefile(vim linux-2.6.32.2/drivers/char/Makefile)

        往Makefile中添加句:obj-$(CONFIG_MY2440_LEDS)   += myLed.o;其中CONFIG_MY2440_LEDS是根據上面Kconfig中來的,myLed.o  則是根據你的源文件:myLed.c來的。


        當上面make menuconfig後可以到 .config中看看會有句:CONFIG_MY2440_LEDS=y ;表示已經選中了這個模塊編譯到內核中去了;


        當make menuconfig 順利選擇模塊後,就開始編譯內核了,命令:make zImage;

        最後到 /arch/arm/boot/中找到zImage就是編譯後的內核了;


動態加載:

        直接在宿主機中用Makefile把驅動源代碼編譯成 .ko文件,然後通過nfs服務器拷貝到開發板中,直接用insmod加載進去就可以了。


測試:

        首先可以用命令:cat /proc/devices  來查看下已經加載的驅動,並且顯示主設備號和次設備號

        接着在/dev下創建一個設備節點:mknod yzhChar c 250 0;mknod 表示創建的是設備節點;yzhChar 表示該設備文件的名稱(當測試是用open打開該文件);c 表示是字符設備文件;250  表示是主設備號;0 表示是次設備號;

  

        如果測試程序就可以把/dev/yzhChar當作一個普通文件來讀寫操作。


        sscanf("123456","%s",buf);//此處buf是數組名,它的意思是將123456以%s的形式存入buf中!



轉自:http://blog.csdn.net/yuzhihui_no1/article/details/45083415

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