03_uboot 命令整理

1.1 uboot下的命令

print // 显示环境变量
ping 192.168.1.8 //

注:tftp在上位机已经设置好
tftp 0x48000000 rootfs.ext4.img // 将 rootfs.ext4.img从上位机下载到下位机的0x48000000内存处
tftp 0x48000000 led.bin // 将led.bin从上位机下载到下位机的0x48000000内存处
go 0x48000000 // 让CPU跑到内存的0x48000000地址去运行该地址的led.bin

1.2 分区

对EMMC进行分区,现使用fdisk对emmc分4个区

说明:
fdisk:uboot自带的分区命令
第一个参数2:明确:TF卡,SD卡,EMMC硬件特性一模一样,统称MMC
如果传递0:表示对SD0卡槽的TF进行分区
如果传递1:表示对SD1卡槽的TF进行分区
如果传递2:表示对EMMC进行分区
第二个参数4:表示要分四个分区,分别是uImage, rootfs.ext4, rootfs.cramfs, rootfs.qt_ext4 等4个
注意:uboot所在的分区从0x200开始,这是芯片已经确定的, 不需要使用fdisk 设置起始地址,对应mmcblk0boot1
0x400000:0x3c00000:指定 uImage所在的分区起始地址和大小, 对应 mmcblk0p1
0x4000000:0x2000000:指定rootfs.ext4所在的分区起始地址和大小,对应 对应 mmcblk0p2

1.3 下载uboot, 并烧写

tftp 0x48000000 ubootpak.bin
update_mmc 2 2ndboot 0x48000000 0x200 0x78000 //将uboot image 烧写到闪存中
说明:
update_mmc:专门用于将内存中的uboot烧写到emmc闪存上的一个命令
2:注意TF卡,SD卡和EMMC他们统称MMC,硬件操作协议都是一模一样,指示物理尺寸大小不一样而已
如果第一个参数传递0:表示向SD0卡的TF烧写uboot
如果第一个参数传递1:表示向SD1卡的TF烧写uboot
如果第一个参数传递2:表示向EMMC的TF烧写uboot
2ndboot:表示uboot所在的EMMC区域的分区名
0x48000000:uboot所在的内存地址
0x200:注意EMMC闪存内部的存储地址编址从0开始
三星规定,如果采用S5P6818处理器,必须将uboot烧写到EMMC的512(0x200)字节开始的地方
0x78000:指定烧写的uboot文件大小

1.4 烧写uImage 和 rootfs.ext4 等镜像

tftp 0x48000000 uImage //利用tftp服务从上位机的/tftpboot共享目录中下载uImage到下位机内存0x480000000
mmc write 0x48000000 0x2000 0x3000 //将uImage从内存的0x48000000写入到EMMC的0x2000起始地址(4M, 以sector=512字节为单位)
烧写0x3000这么多块(6M),比文件本身大即可

tftp 0x48000000 rootfs.ext4 //利用tftp服务从上位机下载 rootfs.ext4
mmc write 0x48000000 0x20000 0x5000 //将rootfs.ext4从内存的0x48000000写入到EMMC的0x20000起始地址(以sector=512字节为单位)
烧写0x5000这么多块(10M)

1.5 设置uboot的启动参数

setenv bootcmd mmc read 0x48000000 0x2000 0x3000 \; bootm 0x48000000 // 设置内核启动

setenv bootargs root=/dev/mmcblk0p2 init=/linuxrc console=ttySAC0,115200 maxcpus=1
说明:设置环境变量bootargs的值为:root=/dev/mmcblk0p2 ...
root=/dev/mmcblk0p2:告诉linux内核将来要挂接找的根文件系统rootfs在第二分区
init=/linuxrc:linux内核一旦找到根文件系统rootfs,执行的第一个进程就是根目录下的linuxrc程序
注意:linuxrc会帮你启动第一号进程:/sbin/init
console=ttySAC0,115200:指定将来linux内核打印输出的信息通过第一个串口来输出到上位机上,波特率115200
ttySAC0:第一个串口
ttySAC1:第二个串口
maxcpus=1:只启动一个CPU核,CPU0核

setenv bootargs root=/dev/mmcblk0p3 console=ttySAC0,115200 rootfstype=cramfs maxcpus=1 // 注,该烧写分区是 /dev/mmcblk0p3

1.6 设置rootfs是nfs启动

//重新设置bootargs,告诉内核跟文件系统rootfs在上位机,而不是在下位机EMMC的分区了
setenv bootargs root=/dev/nfs nfsroot=192.168.1.8:/opt/rootfs ip=192.168.1.110:192.168.1.8:192.168.1.1:255.255.255.0 init=/linuxrc console=ttySAC0,115200
maxcpus=1 lcd=wy070ml tp=gslx680-linux
saveenv
print //确认设置的bootargs正确无误!

1.8 设置rootfs从内存启动

烧写ramdisk.img 到第4分区
tftp 0x48000000 ramdisk.img
mmc write 0x48000000 0x8000000 0x4000

设置系统启动参数
setenv bootcmd mmc read 0x48000000 0x2000 0x3000 \; mmc read 0x49000000 0x8000000 0x4000 \; bootm 0x48000000
setenv bootargs root=/dev/ram initrd=0x49000000,8M console=ttySAC0,115200 init=/linuxrc maxcpus=1
saveenv

posted @ 2025-05-28 09:13  靖意风  Views(83)  Comments(0)    收藏  举报