编译linux-2.6.29内核,报错解决方法
在編譯linux-2.6.29內核版本過程,依次出現如下問題,記錄解決方法。
報錯提示1:
解決:
執行:vi /home/wangz/rootfs/linux-2.6.29/kernel/timeconst.pl文件,執行:373跳轉至373行,將!defined(@val)改為!(@val) 即可,如下?
報錯提示:2:
解決:
由于舊編譯器可能是用OABI的,而配置內核時又選擇了使用EABI的,修改內核配置(make menuconfig)選項:
Kernel Features ---->Use the ARM EABIto compile the kernel 為 no,重新生成.config文件(其中.config默認為隱藏文件,用ls -a可以查看到)
報錯提示3:
解決:
如果使用的是Ubuntu 9.10及以上版本,可以使用下面的命令安裝mkimage,執行:#apt-get install uboot-mkimage。我在Ubuntu16.04上測試行不通,
然后執行:apt-get install u-boot-tools,安裝成功后重新編譯內核,執行:
make uImage ARCH=arm CROSS_COMPILE=arm-linux-
最后編譯得到內核uImage鏡像如下:
?
編譯內核模塊時出現問題:
執行:make modules ARCH=arm CROSS_COMPILE=arm-linux-
報錯提示1:
解決:
implicit declaration of function `dma_cache_sync'表示隱式聲明錯誤,可能有幾個原因:
1?? 沒有把函數所在的c文件生成.o目標文件
2?? 在函數所在的c文件中定義了,但是沒有在與之相關聯的.h文件中聲明
在/home/wangz/rootfs/linux-2.6.29//arch\arm\include\asm\dma-mapping.h下沒有這個函數聲明,但有如下注釋:
/*
* Dummy noncoherent implementation.??We don't provide a dma_cache_sync
* function so drivers using this API are highlighted with build warnings.
*/
dma_cache_sync( )沒有申明卻被調用, 這里直接把它注釋掉好了,執行
vi /home/wangz/rootfs/linux-2.6.29/drivers/scsi/advansys.c,查找dma_cache_sync( )函數調用部分改為如下:、
報錯提示2:
執行:
make menuconfig
然后在配置中設置device drivers -->network device support-->enthernet (10 or 100Mbit)-->Sun GEM support選項為 no 即可解決上述問題。
?
總結
以上是生活随笔為你收集整理的编译linux-2.6.29内核,报错解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: export命令添加和删除环境变量
- 下一篇: linux根文件系统创建过程