首先要清楚板子上程序存储结构
截取书《嵌入式Linux应用开发完全手册》中的uboot部分介绍图的开发板程序存储结构图
可以看到在BootLoader和kernel之间还有一段空间用来存放BootLoader给内核传参存放的空间Boot parameters 我们在设置uboot启动所设置的参数bootarges是BootLoader传给内核的参数
EMMC读取内核和rootfs存放到内存
Serial = CLKUART
Board: X210
DRAM: 512 MB
Flash: 8 MB
SD/MMC: 3776MB
In: serial
Out: serial
Err: serial
[LEFT UP] boot mode
checking mode for fastboot ...
Hit any key to stop autoboot: 0
x210 # print
mtdpart=80000 400000 3000000
baudrate=115200
ethaddr=00:40:5c:26:0a:5b
gatewayip=192.168.1.1
netmask=255.255.255.0
ipaddr=192.168.1.20
bootcmd=movi read kernel 30008000; bootm 30008000
bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3
bootdelay=3
serverip=192.168.1.105
Environment size: 305/16380 bytes
x210 #
root=/dev/mmcblk0p2 rw 表示根文件系统存放在mmc第二个分区上
init=/linuxrc 表示内核启动后执行的第一个程序
console=ttySAC2,115200 表示控制台输出在串口2上,波特率为115200
rootfstype=ext3 表示根文件系统使用ext3格式
bootdelay=3 表示uboot启动后无按键下延时3秒自动启动系统,可以修改验证
bootcmd=movi read kernel 30008000; bootm 30008000 表示内核从哪里读取到内存30008000位置,然后通过bootm 30008000从30008000地址驱动内核
tftp下载内核nfs挂载根文件系统方式启动:
x210 # print
mtdpart=80000 400000 3000000
baudrate=115200
ethaddr=00:40:5c:26:0a:5b
gatewayip=192.168.1.1
netmask=255.255.255.0
ipaddr=192.168.1.20
bootdelay=3
serverip=192.168.1.105
bootcmd=tftp 30008000 zImage;bootm 30008000
bootargs=root=/dev/nfs nfsroot=192.168.1.105:/home/hawen/zyp_linux/nfs/rootfs ip=192.168.1.20:192.168.1.105:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200
Environment size: 395/16380 bytes
/dev/nfs nfsroot=192.168.1.105:/home/hawen/zyp_linux/nfs/rootfs ip=192.168.1.20:192.168.1.105:192.168.1.1:255.255.255.0::eth0:off 这里的参数表示根文件系统通过nfs的方式进行挂载,这里的/home/hawen/zyp_linux/nfs/rootfs 是我们主机下通过busybox挂载根文件系统的挂载点。
一些其他细节:
清除BootLoader