歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

嵌入式Linux驅動程序之編程常見錯誤

嵌入式Linux驅動程序之編程常見錯誤

1、warning: function declaration isn't a prototype

這種錯誤也是很常見的,主要是對一些函數固定格式的錯誤使用。比如int function()改稱int function(void)

static int xxxx_init(void)記住不要缺少static,而static void xxxx_exit(void)

2、出現 warning: assignment makes pointer from integer without a cast 的原因

第一可能是類型轉換的問題。函數的返回值類型等等

第二、在源文件中沒有發現函數的聲明,可能是忘加頭文件了。(未經聲明的函數原型一律默認為返回int值)

3、makefile:4: *** missing separator. Stop.

最近常用SourceInsight3.5編輯程序,裡面直接編輯保存的是word格式。用WinHex或UltraEdit以二進制方式打開,裡面的

Tab字符對應0x09而不應該是幾個0x20。這是主要用vi打開文件,切入到底行模式,使用":set ff =unix"

4、模塊與內核不匹配問題

安裝模塊時出現:[root@FriendlyARM nfs]# insmod key2.ko

key2: version magic '2.6.32.2 mod_unload modversions ARMv4 ' should be '2.6.32.2-FriendlyARM mod_unload ARMv4 '

這一行的意思就是說,當前插入的模塊xxx.ko的版本信息(version magic)與正運行的kernel的版本信息不一致!應該是'2.6.32.2-      FriendlyARM mod_unload ARMv4 ',而實際上xxx.ko的版本信息卻是:'2.6.32.2 mod_unload modversions ARMv4 '; 顯然

它們之間差別是很小的。實際上,根據上面安裝的kernel源碼來看,它們應該是沒有什麼差別的。

我覺得解決這個問題最主要的手段是務必務必保證內核模塊的Makefile文件中的

KDIR := /home/yuesichiu/Linux/FriendlyARM/linux-2.6.32.2與編譯內核FriendlyARM/linux-2.6.32.2,下載到開發板的 zImage是同  一內核。

5、多文件編程結構體的存放位置

我比較喜歡的是把結構體和函數聲明放置頭文件中,把頭文件加到各個.c文件中,以前把結構體定義放置main.c中,編譯時老是出錯。

Copyright © Linux教程網 All Rights Reserved