基於mini2440上的Linux驅動動態載入問題

來源:互聯網
上載者:User

    這兩天在板子上載入模組的時候,遇到了各種問題,與我第一次載入模組時碰到的問題大同小異,故記錄在部落格,僅供查閱。

 

    1.PC機和目標板核心版本不一致

       問題提示:version magic '2.6.32.2 mod_unload modversions ARMv4 ' should be '2.6.32.2-FriendlyARM mod_unload ARMv4 '

 

       準確來說,PC機上的核心所指的是用於編譯模組的核心的版本,並不一定就是運行在PC上linux系統上的核心版本。用指令 uname -r 所查詢到的版本號碼,就是後者。之前按照mini2440使用者手冊的流程,配置好PC機上用於實驗的核心,但由於一段時間以來的搗鼓,早已“面目全非”,先將其還原。

       (1)在核心linux-2.6.xxxxxx # 目錄上,執行make distclean     //清除,即還原

       (2)在同一目錄上執行 cp config_mini2440_t35 .config          //使用現成配置

       (3)執行 make menuconfig   之後退出即可                          //核心儲存配置資訊之用

       (4)執行 make zImage                                                  //編譯核心

       (5)執行 make modules                                                 //編譯模組

 

        一般來說經過上述幾步即可與板子上的核心同一版本,前提當然是正在使用的核心版本與板載的核心版本相符。

 

     2.測試程式在板上啟動並執行問題

        問題提示:syntaxerror : "(" unexpected

 

        剛開始以為是ftp傳送方式,導致檔案傳送不完整所引起的問題,後來再三驗證其他程式,並無異常,所以排除這個可能。瞎弄了一陣,突然發現是makefile的問題,我竟然把它用gcc而不是arm-linux-gcc編譯了!頓時暈了一陣!以下附上arm-linux-gcc編譯方式的簡單makefile檔案

 

       CROSS=arm-linux-</p><p>all : jarvis_led #產生執行檔案的名字,可改<br />jarvis_led : jarvis_led.c #這裡給出原始碼檔案<br /> $(CROSS)gcc -o jarvis_led jarvis_led.c #此處注意縮排是一個tab</p><p>clean :<br /> @rm -vf led *.o *~

    3.編譯驅動模組方法

       這裡我們討論的是字元驅動,所以先把驅動程式複製到核心目錄下 /drivers/char 裡。接著就是對 /drivers/char 裡的Kconfig和Makefile進行改寫的操作了。

 

       (1)Kconfig

        我們在make menuconfig 介面上所看到的資訊就是在Kconfig檔案中定義的,所以我們需要編譯自己的驅動的話,總得先把自己的驅動放進介面,之後才能進行選擇是編譯模組(M)還是直接編譯進核心(*)吧。添加代碼如下

 

config LED_MODULE                           //與Makefile產生聯絡

        tristate "jarvis_led_module"        //在menuconfig 介面上我們就看到這個名字啦

        depends on ARCH_S3C2410

        default m if MACH_FRIENDLY_ARM_MINI2440

 

        要想看到上面的資訊,我們需要進入menuconfig-->Device Drivers-->character devices,就能看到自己模組的資訊啦。

 

        (2)Makefile

         返回到 /drivers/char 目錄下,修改Makefile,實質只需添加一條語句即可,如下:

obj-$(CONFIG_LED_MODULE)   += jarvis_led.o     //紅色字型必須與Kconfig對應

 

          至此,準備工作已做完,我們需要在核心目錄下,即linux-2.6.xx.xx #上執行 make modules。之後再返回 /drivers/char 應該就會看到我們所編譯的驅動模組有一個.ko檔案產生,that`s it!

 

     

 

       最後,如何把模組送到板子上,載入、卸載、測試等工作,mini2440使用者手冊講解得十分清晰,遂不在此贅述。本人知識淺薄,還望大家多多指點!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.