《TQ2440載入Hello world驅動模組》

2021-06-20 22:11:04 字數 2066 閱讀 1117

經過將近乙個月都時間終於按照手冊把linux核心移植完了,接下來要開始驅動模組的移植了,在網上查了一些資料,總結如下:

目標平台:tq2440  arm9

核心版本:linux-2.6.25

前提:宿主機上已安裝交叉編譯工具,因為這個在linux核心移植的時候就使用過了,這裡就不說了。

進入正題

1、首先進入乙個目錄,在其中建立乙個資料夾

#cd /home/wanyao/module

#vim hello.c

1. #include

2. #include

3. module_license("dual bsd/gpl");  

4.   

5. static int hello_init(void)  

6.  

10.    

11. static void hello_exit(void)  

12.  

16.   

17. module_init(hello_init);  

18. module_exit(hello_exit);

2、建立makefile檔案

#vim makefile

1. kerneldir=/opt/embedsky/linux-2.6.25     

2. pwd:=$(shell pwd)     

3. installdir=$(pwd)      

4. cc=arm-linux-gcc    

5. obj-m := hello.o     

6. modules:     

7.     $(make) -c $(kerneldir) m=$(pwd) modules     

8. clean:     

9.     rm -rf *.o *.ko *.mod.c *.markers *.order *.symvers     

10. .phony:modules clean

注意:驅動模組不一定要放在核心樹里,只要你的makefile指定了核心樹的路徑就沒問題,所以我這裡在/home/wanyao/裡建立了乙個module目錄專門用來開發驅動模組

3、然後進行make

#make

結果生成好多檔案,其中hello.ko就是我們需要的用來載入的模組檔案。

4、利用tftp將hello.ko這個模組檔案上傳到開發板上(這個步驟在我另一篇部落格中有詳細介紹)

5、載入模組,進行測試(一下操作是在開發板中的系統終端執行的)

# insmod hello.ko

hello, world

# rmmod hello

goodbye, cruel world

大功告成!

insmod時可能出現的錯誤:

1、hello: version magic '2.6.30.4 mod_unload armv4 ' should be'2.6.30.4-embedsky mod_unload armv4 '

insmod: cannot insert 'hello.ko': invalid module format

出錯原因:模組版本與核心版本不匹配!

解決辦法:匯入預設配置資訊,進入menuconfig 繼續配置general config ->( )local version -> 括號中加入如下內容:「-embedsky」退出儲存為 .config ,重新編譯核心、驅動模組,再來載入模組

2、hello: unknown symbol__aeabi_unwind_cpp_pr0

insmod: cannot insert 'hello.ko': unknown symbol in module, or unknown

parameter

出錯原因:模組和核心映象不匹配

解決方法:盡量用和你同時用來編譯驅動而生成的核心映象zimage,zimage燒到板子上。ldd3上有句話:儘管並不是必需的,但最好執行和模組對應的核心。

剛開始學驅動,終於成功載入了hello world 模組!

這是學習驅動的一小步,但是對我來說卻是一大步!

感謝提供的幫助

TQ2440背光控制

控制lcd背光就是控制s3c2440的lcd控制的lcd pwren腳lcdcon5暫存器pwren位控制lcd是否輸出。對linux 2.6.30.4核心進行移植。新建乙個backlight.c檔案放到 drivers video 目錄下。內容如下 include include include ...

TQ2440移植strace工具

一 以下是網上的乙個方法,但是不適合tq2440 主要是主機靜態連線的庫我沒有,呵呵 strace工具是乙個非常強大的工具,是除錯程式的好工具。要移植到arm平台,就需要使用交叉編譯工具編譯生成靜態鏈結的可執行檔案。具體步驟如下 2.解壓。3.配置。configure host arm none l...

tq2440 的dma裸機驅動

dma是一種提高cpu效率的工具。如果讓cpu去負責搬運資料,效率是十分低下的,因為在這個過程中,cpu就只能做這麼一件事。因此dma就應運而生。只要告訴dma,要搬運的資料源位址,以及要搬運到 去的位址,何種方式,使能它,dma就會獲取匯流排控制權,自動地搬運資料,從而解放cpu,提高效率。tq2...