系统移植在学习中是比较难的,对于系统移植来说可以从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