Uboot 阶段开发板启动方式选择

Uboot version:
U-Boot 2017.03 (Jun 03 2020 - 13:12:42 +0800)

uboot 常用的指令:
=> mmc list
FSL_SDHC: 0
FSL_SDHC: 1 (eMMC)

=> ext2ls
ext2ls - list files in a directory (default /)

Usage:
ext2ls <dev[:part]> [directory]
- list files from ‘dev’ on ‘interface’ in a ‘directory’
=> ext2ls mmc 0:2 /
SD 卡中分区是2的地方的根目录, 实际上就是百问网通过buildroot制作的文件系统所在的分区。

4096 . 4096 .. 320564753 rootfs.tar.bz2 4096 bin 4096 boot 4096 dev 4096 etc 4096 lib 3 lib32 5408 linuxrc 4096 media 4096 mnt 4096 opt 4096 proc 4096 root 4096 run 4096 sbin 4096 selinux 4096 sys 4096 tmp 4096 usr 4096 var 4096 .config 16 .esd_auth =>

=> ext2ls mmc 1:2 /
eMMC中分区是2的地方的根目录, 实际上就是百问网通过buildroot制作的文件系统所在的分区。

4096 . 4096 .. 16384 lost+found 4096 bin 4096 boot 4096 dev 4096 etc 4096 home 4096 lib 3 lib32 11 linuxrc 4096 media 4096 mnt 4096 opt 4096 proc 4096 root 4096 run 4096 sbin 4096 sys 4096 tmp 4096 usr 4096 var 4096 .cache 0 hello.txt 0 hello_1.txt =>

在uboot默认的环境参数中, 一直都是优先从emmc中启动的。所以,如果想要从sd卡中启动文件系统, 就需要修改uboot的环境参数:
默认的环境参数如下所示:
mmcdev=1
mmcpart=2
mmcroot=/dev/mmcblk1p2 rootwait rw

如果修改了环境参数想要保存就需要使用saveenv 参数。

从eMMC中启动的时候,无需任何修改, 只需要将正确的镜像文件烧录到开发板的emmc中就行。

从SD 卡中启动的时候, 就需要修改环境参数。

setenv mmcdev 0
setenv mmcroot /dev/mmcblk0p2 rootwait rw
这个时候默认就会从blk0 也就是SD 卡的分区启动文件系统。

如果需要从NFS启动网络文件系统的话就需要使用另外的指令
setenv serverip 192.168.5.11 //设置服务器的IP
setenv ipaddr 192.168.5.9 //设置开发板的IP
setenv netargs setenv bootargs console=tty1 console=ttymxc0,115200 root=/dev/nfs ip=192.168.5.9:192.168.5.1::255.255.255.1 nfsroot=192.168.5.11:/home/book/nfs_rootfs,v3,tcp
run netboot //启动网络根文件系统

这个过程中会遇到一些其他的问题, 可以参考我之前的回复和创建的话题: