1)解決version magic 不一致的問題
原文: http://blog.sina.com.cn/s/blog_7d638eda010118rh.html
http://tldp.org/LDP/lkmpg/2.6/html/x380.html
編譯完一個kernel module後,如果安裝這個module的機器啟動並執行不是一致的kernel,會報
insmod: error inserting 'poet_atkm.ko': -1 Invalid module format仔細看一下/var/log/message 檔案可以發現是說, version magic不一致。
Jun 4 22:07:54 localhost kernel: poet_atkm: version magic '2.6.5-1.358custom 686 REGPARM 4KSTACKS gcc-3.3' should be '2.6.5-1.358 686 REGPARM 4KSTACKS gcc-3.3'
其實就是把Makefile裡面的值,改成現有kernel一致的就可以了。
VERSION = 2PATCHLEVEL = 6SUBLEVEL = 5EXTRAVERSION = -1.358custom
(即把上面的custom去掉,重新編譯燒寫核心即可)
2)Unknown symbol __aeabi_unwind_cpp_pr0
原文: http://johnmcu.blog.163.com/blog/static/17244625620109140555239/
“我相當鬱悶了,通過客服,剛開始以為是交叉編譯器的問題,可是測試後交叉編譯器是正常的,快崩潰了,最後才知道,是我的開發板裡燒的是光碟片提供給的鏡像,而我自己移植的驅動是在我自己編寫的核心裡產生.ko檔案,導致了致命的錯誤,模組和核心鏡像不匹配,後來燒入我自己的核心和檔案系統,雖然其中經曆了多番波折,總算守得雲開見月明了,終於可以載入和卸載模組了!”
3)自動產生字元裝置檔案的問題
在做字元裝置驅動的時候,我對照網上的文章寫了自動建立字元裝置檔案的驅動,結果每次載入驅動之後,產生的裝置檔案都是塊裝置檔案,而不是字元設別檔案。
所以我把交叉編譯工具確定在友善之臂的4.3.2版本上,然後重新編譯自己的核心,構建根檔案系統,然後在次掛載驅動,一切OK!!!!
4)request_irq
傳回值 -16
原文: http://blog.sina.com.cn/s/blog_636a55070101j9t8.html
照著韋東山二期視頻寫觸屏驅動的時候,發現request_irq 返回 -16, 這表示該中斷已經佔用。
解決辦法: request_irq 函數的flags 加上 IRQF_SHARED,最後一個參數不要為空白,一邊free_irq使用。
所以,寫程式的時候一定要檢查傳回值,這樣才能儘快找到錯誤。