經過將近乙個月都時間終於按照手冊把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...