加載內核出現的錯誤

在加載內核的時候,首先提示了很多信息

①Unknown symbol in module             ------提示不知道的符號;原因可能是因爲在EXPORT_SYMBOL(func1);的時候沒有使用MODULE_LICENSE("GPL")

②insmod: can't insert 'abc.ko': unknown symbol in module, or unknown parameter ------模塊提示特殊符號;

③export duplicate symbol   (system 。。。)   -------大概是這樣的內容,意思是你的函數跟內核中的函數衝突,

④insmod: can't insert 'xyz.ko': invalid module format


在我的內核啓動的時候先後報了這三個錯誤,並且一直都啓動不了,剛開始查了很多,都說第一個是因爲沒有加MODULE_LICENSE("GPL");

最後我偶然看到一個查看.ko文件消息的文章,先確定模塊的信息   

modinfo abc.ko      就會顯示內核模塊信息

 

下面顯示了很多,其中有一個depend:xyz  

這時,我就發現了其實,abc.ko文件是依賴於xyz.ko,設備應該是先加載了xyz.ko之後加載失敗了,提示abc.ko以及那些特殊符號unknown,

於是就看看爲什麼xyz.ko加載失敗了;最終發現了提示信息③把函數改了一個名字就完全能夠加載上去了;


其實,最後還遇到了另一個問題,是由於佔用了其他內存,當時是用了4G內存,內核offset ,後來在大牛的指導下,適當減少了內存,就會有不一樣的提示:是由於一個函數的空間佔用了另一個函數的空間,導致內核offset。


總結一下:遇到加載內核失敗的問題,①先看提示,如果是format 等,看看模塊其他地方是不是失敗了;②如果是unknown symbol  就要先看看模塊信息,③如果不存在依賴,就看是否需要添加MODULE_LICENSE("GPL");


以上僅是個人遇到的問題,並不代表所有,希望能幫到大家
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章