uboot常用命令汇总
我们经常使用uboot命令,虽然资料光盘->常见问题目录有U-boot常用命令汇总文档,但从大家的反馈来看,并没有很多人注意到这个文档,所以把它挪到这里。如此全的uboot命令汇总,建议收藏。
注意:不同版本的uboot,它的命令有所不同,这里使用u-boot 1.1.6。
一、nandflash分区信息
OpenJTAG>mtdpart
device nand0 <nandflash0>, # parts = 4
#:name size offset
0: bootloader 0x00040000 0x00000000
1: params 0x00020000 0x00040000
2: kernel 0x00200000 0x00060000
3: root 0x0fba0000 0x00460000
二、设置机器ID
set machid 16a // JZ2440,也可以用setenv machid 16a
set machid 7CF // mini2440
三、设置环境变量
print // 打印环境变量
save // 保存环境变量
setenv bootdelay 5 // 设置bootdelay 为5setenv ipaddr 192.168.1.226 // 设置开发板ip为192.168.1.226setenv serverip 192.168.1.200 // 设置服务器ip为192.168.1.200
setenv gatewayip 192.168.1.1 // 设置网关为 192.168.1.1setenv netmask 255.255.255.0 // 设置子网掩码
// 由于是两条指令,因此需要用单引号引起来
// 读取内核 并启动
setenv bootcmd 'nand read.jffs2 0x30007FC0 kernel ; bootm 0x30007FC0'
// 使用flash中的文件系统启动,默认为yaffs2文件系统,如果是jffs2文件系统,添加 rootfstype=jffs2
// yaffs2
setenv bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200
// jffs2setenv bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200
rootfstype=jffs2// 使用nfs网络文件系统启动,默认为yaffs2文件系统,如果是jffs2文件系统,添加rootfstype=jffs2
举例:
虚拟机ip :192.168.1.2
网关 :192.168.1.1
开发板ip : 192.168.1.3
子网掩码 :255.255.255.0
文件系统目录:/work/nfs_root/xxxx
// yaffs2 ,注意是一行
setenv bootargs noinitrd root=/dev/nfs console=ttySAC0
nfsroot=192.168.1.2:/work/nfs_root/xxxxip=192.168.1.3:192.168.1.2:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc
// jffs2 ,注意是一行
setenv bootargs noinitrd root=/dev/nfs console=ttySAC0
nfsroot=192.168.1.2:/work/nfs_root/xxxxip=192.168.1.3:192.168.1.2:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc rootfstype=jffs2
// 清除某个环境变量
setenv bootargs //以bootargs为例
save
// 清除全部的环境变量
nand erase params
四、tftp烧写
// 通过tftp烧写u-boot.bin到nand Flash步骤:
打开 tftpd32.exe 软件, 将u-boot.bin 拷贝至工作目录
在SecureCRT中依次输入:
tftp 0x30008000 u-boot.bin //将uboot.bin 下载到sdram 0x30008000地址处
nand erase bootloader // 擦除bootloader区域
nand write 0x30008000 bootloader // 烧写到bootloader
// 通过tftp烧写uImage到nand Flash步骤:
打开 tftpd32.exe 软件, 将 uImage 拷贝至工作目录
在SecureCRT中依次输入:
tftp 0x30008000 uImage
nand erase kernel
nand write 0x30008000 kernel
// 烧写YAFFS文件系统至Nand Flash
打开 tftpd32.exe 软件, 将 fs_mini.yaffs2 拷贝至工作目录
在SecureCRT中依次输入:
tftp 0x30008000 fs_mini.yaffs2
nand erase root
nand write.yaffs 0x30008000 root $(filesize) // $(filesieze) 是fs_mini.yaffs2 的大小
// 烧写JFFS文件系统至Nand Flash
//使用 jffs2 文件系统启动时记得修改 bootargs 添加 rootfstype=jffs2
打开 tftpd32.exe 软件,将 fs_mini.jffs2 拷贝至工作目录
在SecureCRT中依次输入:
tftp 0x30008000 fs_mini.jffs2
nand erase root
nand write.jffs2 0x30008000 root $(filesize) // $(filesieze) 是fs_mini.yaffs2 大小
当然,之前的所有下载也可以换成 nfs ,
假设虚拟机 ip 为 192.168.1.123
nfs共享目录(在ubuntu 的 /etc/exports设置)为: /work/nfs_root
那么nfs下载命令如下:
nfs 0x30008000 192.168.1.123:/work/nfs_root/u-boot.bin // nfs下载u-boot.bin
nfs 0x30008000 192.168.1.123:/work/nfs_root/uImage // nfs下载uImage
nfs 0x30008000 192.168.1.123:/work/nfs_root/fs_mini.yaffs2 // nfs下载fs_mini.yaffs2
nfs 0x30008000 192.168.1.123:/work/nfs_root/fs_mini.jffs2 // nfs下载fs_mini.jffs2
- end -
iCEasy商城为您传授BeagleBone® Black eMMC烧写全记录
eMMC存储介质目前越来越广泛的应用在嵌入式系统中,AM335x的用户也越来越多的使用eMMC作为系统的主要存储介质。目前AM335x的几款官方demo板中,只有BeagleBone®Black上加入了对eMMC芯片的支持,很多用户也是参考BeagleBone®Black进行自己AM335x系统的eMMC设计。笔者最近分别通过TI Uniflash和SD卡完成了BeagleBone®Black上eMMC芯片的烧写验证工作,软件基于AM335xLinux SDK06,总结出来供大家参考。
一、使用TI UniFlash工具通过USBRNDIS烧写
1、TI Uniflash简介
Uniflash是TI开发的存储器烧写工具,可以支持AM335x系统的NAND Flash,NORFlash,SPIFlash,eMMC烧写。可以参考wiki上的guide,在Windows宿主机上下载并安装Uniflash,并按照其中3.3节所述在Windows宿主机上安装USBRNDIS驱动。
2、eMMC烧写原理
本文介绍的验证方法是使用Uniflash工具通过USB对BeagleBone® Black上的eMMC进行烧写,原理是通过Romcode,SPL和u-boot三个阶段,将一个专门用于eMMC烧写的Linux操作系统在BeagleBone® Black板上运行起来,并自动运行脚本进行烧写。
第一阶段,通过设置AM335x的sysboot管脚,使AM335x的启动项包含USB0启动。BeagleBone® Black的默认启动设置为:MMC1->MMC0->UART0->USB0,MMC1和MMC0分别连接了eMMC和SD卡,如果eMMC为空,并且不插SD卡,芯片上电后执行的Romcode就会执行USB启动。Romcode会初始化USB RNDIS以太网络通信协议,通过Windows宿主机上Uniflash自带的DHCP服务器进程拿到分配的IP地址,然后再通过Windows宿主机上Uniflash自带的TFTP服务器进程将Uniflash设定的tftp目录下用于eMMC烧写的特殊的SPL下载到AM335x的内部ram中并运行。
第二阶段,用于eMMC烧写的特殊的SPL执行之后,会初始化USB RNDIS以太网络通信协议,并通过Windows宿主机上Uniflash自带的DHCP服务器程序拿到分配的IP地址,然后再通过宿主机上Uniflash自带的TFTP服务器程序将Uniflash设定的tftp目录下用于eMMC烧写的特殊的U-boot.img下载到板子上的DDR3中并运行。
第三阶段,用于eMMC烧写的特殊的U-boot.img执行之后,通过执行u-boot中的DHCP和TFTP命令,将Windows宿主机上Uniflash设定的tftp目录下的用于烧录eMMC的LinuxuImage下载到板子的DDR3中并运行。这个LinuxuImage会通过执行启动脚本,通过tftp的方式,将Windows宿主机上Uniflash设定的tftp目录下名为debrick.sh脚本下载并执行,debrick.sh可实现eMMC的擦除和烧写。
3、eMMC烧写流程
(1)制作u-boot-spl-restore.bin和u-boot-restore.img
用于烧录eMMC的特殊的SPL和u-boot.img可以通过指定特定的编译参数编译SDK06的U-boot源码获得,在编译之前需要加几个patch如下:
延长USB RNDIS连接等待时间的patch,修改/drivers/usb/gadget/ether.c文件:
使能U-boot中cache用于加快传输时间的patch。修改/include/configs/am335x_evm.h 文件:
修改bootcmd启动参数,在/include/configs/am335x_evm.h中182行修改如下:
加入以上 3 个 patch 之后,在 u-boot 源码目录下输入以下编译指令:
在U-boot源码目录下的boards.cfg文件中,可以看到am335x_evm_restore_flash_usbspl这个编译选项设定了宏RESTORE_FLASH,SPL_USBETH_SUPPORT。
生成的u-boot.img和u-boot-spl.bin分别在在flash-restore\和flash-restore\spl目录下,要将其改为u-boot-restore.img和u-boot-spl-restore.bin并放置Windows宿主机上Uniflash设定的tftp目录下。
(2)制作uImage
用于烧录eMMC的LinuxuImage,以Initcramf的方式包含了一个用于烧录的Ramdisk文件系统,下面是具体配置和生成的步骤。
在SDK06的Linux源码目录下,执行:
配置内核所包含的文件系统目录。
将用于烧录的Ramdisk文件系统解压到虚拟机的某个目录下,如/home/zhoujian/Flasher。进入general setup目录,按图1-1配置Initcramfs所在目录。
▲图1-1
进入Device Drivers,按照图1-2、图1-3、图1-4和图1-5配置kernel对USBRNDIS的支持
▲图1-2选择进入DeviceDrivers
▲图1-3选择进入USB support
▲图1-4选择进入USB Gadgetsupport
▲图1-5在USB GadgetDrivers中,只保留Ethernet Gadget(with CDC Ethernet support)和RNDIS support
保存退出后,执行:
将生成的\arch\arm\boot\uImage 放置 Windows 宿主机上 Uniflash 设定的 tftp 目录下。如果对速度有要求,可在menuconfig的界面中,选择[Device Drivers]->[ Network devicesupport]->[ Ethernet driversupport],如图 1-6 所示,将 kernel 中的 CPSW 驱动去掉,从而停掉系统启动后的以太网DHCP脚本的执行,以节省时间。
▲图1-6
(3)进行烧写
将eMMC烧录脚本debrick.sh放置Windows宿主机上Uniflash设定的tftp目录下。将要烧写到eMMC中的MLO,u-boot.img和uImage压缩成debrick.sh脚本指定的boot_partition.tar.gz:
将要烧写到eMMC中的文件系统压缩文件名改为 rootfs_partition.tar.gz,和boot_partition.tar.gz一起放置 Windows 宿主机上 Uniflash 设定的tftp 目录下。在 Windows 上运行 Uniflash,可以按图 1-7 所示指定 tftp 目录为C:\AM335x_Flashtool\images
▲图 1-7
点击 Start Flashing 按钮,通过 USB 线连接BeagleBone® Black和宿主机,eMMC 的烧写可自动完成。
二、使用SD卡烧写
BeagleBone® Black上带有SD卡,也可以通过SD卡进行eMMC的烧写,可将SDK06自带的prebuild image中的MLO,u-boot.img,uImage以及上一章提到的用于烧写eMMC的文件系统烧写到 SD 卡中,然后将 SD 卡中的内容通过 Ubuntu 虚拟机显示出来,并对此文件系统中的内容做如下改动。
将 SD 卡上文件系统中的/etc/init.d/fetcher.sh 改为:
将debrick.sh脚本拷贝到SD卡上文件系统中的/home/root/目录下,并将其中tftp传输的部分去掉:
将要烧写到eMMC中的MLO,u-boot.img和uImage压缩成debrick.sh脚本指定的boot_partition.tar.gz:
将要烧写到eMMC中的文件系统压缩文件名改为 rootfs_partition.tar.gz,和boot_partition.tar.gz一起拷贝到 SD 卡上文件系统中的/home/root/目录下。
在给BeagleBone® Black上电之前,插上制作好内容的 SD 卡,按住板子的 S2 开关,然后通过 USB 线连接BeagleBone® Black和宿主机给板子上电,会自动执行eMMC的烧写。
三、总结和参考文档
Linux 系统从eMMC上启动,需要修改 u-boot 的 mmcdev 参数,将其由默认的 0 改为1,也可以直接修改/include/configs/am335x_evm.h中的 73 行为"mmcdev=1\0"\,然后重新编译。
第一次烧写,可以从板子的 J1 插针引出 UART0 信号到主机超级终端查看烧写流程。
如果用户是自己做的板子,那么也可以在针对自己板子移植好的 U-boot 和 Linux 源代码的基础上,按照上面所讲的加入对eMMC烧写的支持。
对于 Linux SDK 07,操作步骤基本类似,未来会继续验证。
相关问答
flash烧录和ic烧录?,IC烧录设备该怎么选,都来说说?[回答]我咋没听说有这么玩过的,我们都是一个个来,要简单点也行,可以把命令写在文本上,然后复制粘贴过去命令行,因为都一样的产品的话,烧写地址什么的也一...
如何查看linux根分区下全部目录及文件的大小-ZOL问答中关村在线vivoX90Pro+举报恩悠6人讨论9677次围观关注问题写回答讨论回答(6)duoduoannidu命令用于查看磁盘的使用量,格式为:“du[选项][文件]”...