系統移植在學習中是比較難的,對于系統移植來說可以從4個方面來了解:環境搭建,u-boot,kernel,rootfs,今天華清遠見的美女學霸總結出來系統移植的相關知識及系統移植的過程,比較詳細
啟動過程:
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相關
BL2跟板子配置相關,BL2初始化內存一、環境搭建
交叉編譯工具鏈網絡配置
tftp服務器配置
nfs服務器配置
binutils工具集,addr2line, strip, ... 二、u-boot
u-boot常用命令:
1. help
2. 環境變量相關,print,set,save
3. emmc相關的,movi,mmcinfo
4. 數據傳輸,tftp,loadb
5. 運行相關,run,go,bootm,boot;環境變量:bootcmd, bootargs
配置 make fs4412_config
指定交叉編譯,指定平臺,可以通過修改Makefile來實現編譯 make -j2
移植:方法參看README中的U-Boot Porting Guide 三、kernel
配置 make menuconfig
指定交叉編譯,指定平臺,可以通過修改Makefile來實現編譯 make uImage -j2
移植:見招拆招
四、rootfs busybox
配置 make menuconfig
指定交叉編譯,指定平臺,可以通過修改Makefile來實現編譯 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(要提前把網絡配置好,tftp服務器配置好,環境變量serverip,ipaddr設置好)
3. 燒寫
FS4412 # movi write u-boot 40008000 (此地址要與第2 步中tftp下載的地址一致)
4. 測試一下:從emmc啟動,看u-boot能否啟動起來
2. 固化kernel和設備樹
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(通過文件復制的方式來實現)
1. 對eMMC進行分區(兩種方法) 方法1. 在u-boot里分區
FS4412 # fdisk -c 0 方法2. 系統起來之后分區
[root@farsight ]# fdisk -u /dev/mmcblk0
...... 通過fdisk實現自己需要的分區
2. 通過NFS掛載根文件系統來啟動系統
設置bootargs從NFS掛載根文件系統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
設置bootcmd從emmc讀取kernel和設備樹,然后啟動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掛載做好的根文件系統[root@farsight ]# mount -t nfs -o nolock
192.168.123.123:/home/farsight/busybox-1.22.1/_install /tmp
6. 燒寫(復制)根文件系統
[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的第一個分區去掛載根文件系統
FS4412 # save