編譯驅動源碼,modpost老是出錯,于是進入/usr/src/`uname -r`目錄下
#make scripts
接著再編譯源碼,之前的錯誤消失了。出現(xiàn)了新的錯誤:
**1.c:1052:error:void value not ignored as it ought to be
**1.c源代碼中的1052行是:
ret = unregister_chrdev(MAJOR, DEVICE_NAME);
當注銷此行時可以編譯通過,找到linux/fs.h頭文件,里面定義了unregister_chrdev()函數(shù):
extern void unregister_chrdev(unsigned int,const char *);
此處定義的為void類型函數(shù),而在程序中將其賦值給了ret,這就造成了編譯錯誤。
于是注釋了相應的代碼,用unregister_chrdev(MAJOR, DEVICE_NAME);代替即可。這樣就能通過編譯了。又出現(xiàn)了新的問題:
**2.c:474:’SA_INTERRUPT’undeclared(first use in this function)//{ 原來頭文件里沒有SA_INTERRUPT了,一般使用IRQF_SHARED 了。}
頭文件為/usr/src/linux-2.6.26.8RedHawk5.2.4/include/linux下的interrupte.h
**2.c:474:’SA_SHIRQ’undeclared(first use in this function)//{ SA_SHIRQ 已經不支持了,用 IRQF_SHARED }
于是修改了這行,通過編譯。
新的問題又出現(xiàn)了:
**3.c:57:error:’POLL_IN’undeclared(first use in this function)
考慮肯定是由于頭文件的問題,直接注銷此行,先編譯通過再說,編譯成功!
終于生成了**.ko的模塊!
但是,新的問題又出現(xiàn)了,始終加載不了該模塊
在/lib/modules/2.6.26.8-RedHawk-5.2.4-Moxa/kernel中新建文件夾extra
將生成的**.ko文件復制到該文件下
# depmod
#modprobe **.ko
FATAL:Module **.ko not found.
再用insmod命令試試
#insmod **.ko
Insmod:error inserting ‘**.ko’: -1 Wrong medium type
使用命令#dmesg:
最后兩行顯示:
[PCI-**]:Error in find_device: no card
[PCI-**]:Error in find_device: no card
因為沒有插入板卡所致!
關鍵詞標簽:linux驅動編譯,linux加
相關閱讀
熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP
人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址 dmidecode命令查看內存型號 linux tc實現(xiàn)ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關機、重啟、注銷 命令 查看linux服務器硬盤IO讀寫負載