當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 學(xué)習(xí)筆記 > linux系統(tǒng)移植的詳細步驟
系統(tǒng)移植在學(xué)習(xí)中是比較難的,對于系統(tǒng)移植來說可以從4個方面來了解:環(huán)境搭建,u-boot,kernel,rootfs,今天華清遠見的美女學(xué)霸總結(jié)出來系統(tǒng)移植的相關(guān)知識及系統(tǒng)移植的過程,比較詳細
啟動過程:
BL0 --> BL1 --> BL2 --> u-boot --> kernel --> rootfs iROM iRAM iRAM DRAM DRAM DRAM
Sams Sams
上圖中的u-boot指的是 u-boot.bin
BL1,BL2,u-boot.bin共同組成 u-boot-fs4412.bin
BL1跟CPU相關(guān)
BL2跟板子配置相關(guān),BL2初始化內(nèi)存一、環(huán)境搭建
交叉編譯工具鏈網(wǎng)絡(luò)配置
tftp服務(wù)器配置
nfs服務(wù)器配置
binutils工具集,addr2line, strip, ... 二、u-boot
u-boot常用命令:
1. help
2. 環(huán)境變量相關(guān),print,set,save
3. emmc相關(guān)的,movi,mmcinfo
4. 數(shù)據(jù)傳輸,tftp,loadb
5. 運行相關(guān),run,go,bootm,boot;環(huán)境變量:bootcmd, bootargs
配置 make fs4412_config
指定交叉編譯,指定平臺,可以通過修改Makefile來實現(xiàn)編譯 make -j2
移植:方法參看README中的U-Boot Porting Guide 三、kernel
配置 make menuconfig
指定交叉編譯,指定平臺,可以通過修改Makefile來實現(xiàn)編譯 make uImage -j2
移植:見招拆招
四、rootfs busybox
配置 make menuconfig
指定交叉編譯,指定平臺,可以通過修改Makefile來實現(xiàn)編譯 make -j2
安裝 make install,默認安裝到 _install目錄五、固化
farsight@ubuntu:$表示在虛擬機中的操作FS4412 #表示在板子上的u-boot中的操作[root@farsight ]#表示板子上shell中的操作
1. 固化u-boot
1. 做一個SD卡啟動盤
farsight@ubuntu:$ sudo ./sdfuse.sh /dev/sdb u-boot- fs4412.bin
或 者 直 接 用 命 令 :sudo dd iflag=dsync oflag=dsync if=/home/farsight/u-boot-fs4412.bin of=/dev/sdb seek=1
2. 從SD卡啟動,通過tftp下載 u-boot-fs4412.bin
FS4412 # tftp 40008000 u-boot-fs4412.bin(要提前把網(wǎng)絡(luò)配置好,tftp服務(wù)器配置好,環(huán)境變量serverip,ipaddr設(shè)置好)
3. 燒寫
FS4412 # movi write u-boot 40008000 (此地址要與第2 步中tftp下載的地址一致)
4. 測試一下:從emmc啟動,看u-boot能否啟動起來
2. 固化kernel和設(shè)備樹
1. 通過tftp下載 uImage 并燒寫FS4412 # tftp 40008000 uImage
FS4412 # movi write kernel 40008000
2. 通過tftp下載 exynos4412-fs4412.dtb 并燒寫FS4412 # tftp 40008000 exynos4412-fs4412.dtb FS4412 # movi write dtb 40008000
3. 固化rootfs(通過文件復(fù)制的方式來實現(xiàn))
1. 對eMMC進行分區(qū)(兩種方法) 方法1. 在u-boot里分區(qū)
FS4412 # fdisk -c 0 方法2. 系統(tǒng)起來之后分區(qū)
[root@farsight ]# fdisk -u /dev/mmcblk0
...... 通過fdisk實現(xiàn)自己需要的分區(qū)
2. 通過NFS掛載根文件系統(tǒng)來啟動系統(tǒng)
設(shè)置bootargs從NFS掛載根文件系統(tǒng)FS4412 # set bootargs root=/dev/nfs
nfsroot=192.168.123.123:/home/farsight/busybox-1.22.1/_install rw console=ttySAC2,115200 init=/linuxrc ip=192.168.123.111 clk_ignore_unused=true
設(shè)置bootcmd從emmc讀取kernel和設(shè)備樹,然后啟動FS4412 # set bootcmd movi read kernel 41000000\;
movi read dtb 42000000\; bootm 41000000 - 42000000
FS4412 # save
3. 格式化
[root@farsight ]# mkfs.ext2 /dev/mmcblk0p1
4. 掛載格式化好的磁盤
[root@farsight ]# mount -t ext2 /dev/mmcblk0p1 /mnt
5. 通過NFS掛載做好的根文件系統(tǒng)[root@farsight ]# mount -t nfs -o nolock
192.168.123.123:/home/farsight/busybox-1.22.1/_install /tmp
6. 燒寫(復(fù)制)根文件系統(tǒng)
[root@farsight ]# cp -a /tmp/* /mnt 啟動配置:
FS4412 # set bootargs root=/dev/mmcblk0p1 rw console=ttySAC2,115200 init=/linuxrc ip=192.168.123.111 clk_ignore_unused=true
root=/dev/mmcblk0p1是指定從mmc的第一個分區(qū)去掛載根文件系統(tǒng)
FS4412 # save