【移植Linux 3.4.2内核第一步】之简单修改
前一陣子已經將U-boot移植好了,從今天開始,我們開始移植linux內核。移植的內核為3.4.2,移植的開發板為:jz2440開發板。
想看之前移植U-boot的記錄,可以查看我的博客專欄,點擊鏈接:點擊查看U-boot移植教程
首先我們從官網下載3.4.2內核,先解壓內核拿到Lniux服務器:
tar xjf linux-3.4.2.tar.bz2
cd linux-3.4.2/
然后修改Makefile,選擇默認配置:
vi Makefile
找到下面這句話:
改為:
ARCH ?= arm CROSS_COMPILE ?= arm-linux-這里需要注意一點,交叉編譯工具,我這里用的是4.3.2(有的交叉編譯工具編譯不通過)。
然后選擇默認配置:
make s3c2410_defconfig
然后:
make uImage
顯示編譯成功:
然后將生成的映像文件拷貝到服務器的文件系統目錄(這一步不是必須的,可以根據自己的實際情況,將映像文件燒寫到開發板):
cp arch/arm/boot/uImage /work/nfs_root/uImage_new
然后將其燒寫到開發板,這里就是在uboot啟動界面輸入命令了(燒寫方法不唯一,我這里是用的nfs協議直接從服務器上下載內核映像文件):
nfs 32000000 192.168.1.101:/work/nfs_root/uImage_new
顯示如下:
(注: 我在一開始用nfs掛載內核的的時候,出現如下錯誤:T T * ERROR: Cannot umount。
解決辦法:要在主機的/etc/hosts文件中加入:
開發板ip nfs目錄(我的是:/work/nfs_root)
例如:192.168.1.103 /work/nfs_root/
)
bootm 32000000
串口顯示亂碼。很顯然,雖然我們的內核已經啟動,但是串口的設置,肯定沒有設置好。
通過分析uboot源碼知,獲取及其ID的方法為從環境變量中獲取,或者使用默認的ID
uboot的默認MACH ID:
gd->bd->bi_arch_number = MACH_TYPE_SMDK2410; // 193
如果s = getenv(“machid”);成功,則使用它
否則使用默認的
我們先自己在環境變量中設置:
在UBOOT里:
set machid 16a // smdk2440 mach-smdk2440.c
或
set machid 7CF // mini2440 mach-mini2440.c
(這個設置我測試了一下,不設置也可以啟動內核)
還需要更改一下環境變量:
set bootargs console=ttySAC0,115200 root=dev/mtdblock3
還有一個地方需要修改,如果我們使用的是 smdk2440的話,需要將arch\arm\mach-s3c24xx\mach-smdk2440.c中的
改為:
s3c24xx_init_clocks(12000000);然后重新編譯內核,掛載內核:
nfs 32000000 192.168.1.101:/work/nfs_root/uImage_new
bootm 32000000
終于,我們的打印的是正常的字符了,但是內核還沒有真正啟動,還是有一些錯誤,今天就不寫了,放到下一篇文章中繼續解決。
想一起探討以及獲得各種學習資源加我(有我博客中寫的代碼的原稿):
qq:1126137994
微信:liu1126137994
可以共同交流關于嵌入式,操作系統,C++語言,C語言,數據結構等技術問題。
總結
以上是生活随笔為你收集整理的【移植Linux 3.4.2内核第一步】之简单修改的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AD20学习笔记4---网表导入及模块化
- 下一篇: 大厂Sketch组件库源文件