了解uboot命令
进入uboot命令行模式后,我们可以执行help或者?列出uboot所支持的命以及他们的作用,如果想知道某个命令的
具 体用法可以使用 “?命令”或者“help 命令”的方法列出某个命令的具体用法。
uboot的常用命令
1.查询命令:bdinfo、printenv、 version
bdinfo:查询系统信息,用法【bdinfo】
printenv:查询当前系统所有环境变量,用法【printenv】
version:查询uboot版本,用法【version】
2.环境变量操作命令:setenv、saveenv
setenv:新建/修改或删除环境变量,删除环境变量【setenv 环境变量名】,新建或修改环境变量【set 环境变量名=值】
saveenv:保存环境变量,用法【saveenv】
3.内存操作命令:md、nm、mm、mw、cp 、cmp
md:显示内存值,用法【md[.b, .w, .l] address [# of objects]】,.b表示以byte读取,.w表示以word读取,of objects表示长度
mm:命令用于修改指定地址的内存值,用法【nm [.b, .w, .l] address】
mw:命令 mw 用于使用一个指定的数据填充一段内存,用法【mw [.b, .w, .l] address value [count]】
cp:cp 是数据拷贝命令,用于将 DRAM或falsh 中的数据或从一段内存拷贝到另一段内存中,用法cp [.b, .w, .l] source target count
cmp:用于比较两段内存的数据是否相等,【cmp [.b, .w, .l] addr1 addr2 count】
4.网络操作命令:dhcp、ping、tftp、nfs
dhcp:自动获取ip,并通过tftp从网络启动内核,用法【dhcp】,(可通过?dhcp查看用法)
ping:网络连接测试,用法【ping 192.168.xxx.xxx】
nfs: 通过nfs从网络启动内核,用法【nfs 内存地址 主机IP:文件名】例如nfs 80800000 192.168.1.250:/home/nfs/zImage
tftp:通过tftp从网络启动内核,用法【tftp 80800000 192.168.1.250:/zImage】
5.emmc和sd卡操作命令:mmc info、mmc read、mmc wirte、 mmc rescan、mmc part、mmc dev、mmc list
(emmc和sd属于同一种类型设备)
mmc info:查看当前设备信息,【mmcinfo】
mmc rescan:扫码系统中存在的emmc设备,【mmcrescan】
mmc list:列出系统中的所有emmc设备,即查看一共有个emmc【mmclist】
mmc dev:切换到某个emmc设备,或切换到某个emmc设备的某个分区,【mmcdev [dev] [part]】,例如切换到emmc1的分区2:ccmdev 1 2
mmc part:列出当前emmc的所有分区,【mmcpart】
6.FAT 文件系统操作命令:fatinfo、fatls、fstype、fatload、fatwrite、
fatinfo:查询指定 MMC 设置指定分区的文件系统信息,【fatinfo <interface> [<dev[:part]>]】,例:fatinfo mmc 1:1
fatls:于查询 FAT 格式设备的目录和文件信息,【fatls <interface> [<dev[:part]>] [directory]】,例:fatls mmc 1:1
fstype:于查看 MMC 设备某个分区的文件系统格式,【fstype <interface> <dev>:<part>】,例:fstype mmc 1:0
fatload:于将指定的文件读取到 DRAM 中,【fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]】,例:fatload mmc 1:1 80800000 zImage
fatwrite:将文件写入硬盘,【fatwrite <interface> <dev[:part]> <addr> <filename> <bytes>】
7. EXT 格式文件系统操作命令:ext2load、ext2ls、ext4load、ext4ls
(操作方法与FAT一致)
8.NAND 操作命令:
nand info:打印 NAND Flash 信息
nand device:切换 NAND Flash,如果你的板子支持多片 NAND 的话就可以使用此命令来设置当前所使用的 NAND
nand erase:擦除 NAND Flash,从指定地址开始(off)开始,擦除指定大小(size)的区域【nand erase[.spread] [clean] off size】,擦除指定的分区【nand erase.part [clean] partition】,【nand erase.chip [clean]】,
例如:nand erase 0x4000000 0xA00000
nand write:写入,【nand write addr off size】,例如:nand write 0x87800000 0x4000000 0xA00000
nand read:读取,【nand read addr off size】,例如:nand read 0x83000000 0x6000000 0x19000
9.boot操作命令:bootz、bootm、boot、
bootz:令用于启动 zImage 镜像文件,用法【bootz addr initrd fdt】addr 是 zImage 的内存地址,initrd 是 zImage 的地址 initrd 文件的内存地址,不使用 initrd 的话用‘-’代替,fdt 就是设备树文件的内存地址。
bootm:令用于启动 uImage 镜像文件,用法【bootz addr initrd fdt】addr 是 zImage 的内存地址,initrd 是 zImage 的地址 initrd 文件的内存地址,不使用 initrd 的话用‘-’代替,fdt 就是设备树文件的内存地址,bootm命令可以直接使用bootm addr 的方式启动uImage而不需要设备树文件。
boot:boot命令也使用来启动linux用来启动linux内核的,但是它不是直接去启动,而是间接的调用bootcmd
来启动内核,具体的启动内核行为是由bootcmd决定的。
uboot启动启动内核的过程以及启动方法
内核的启动过程:要启动内核,必须先把内核镜像文件uImage/zImage、设备树文件加载到内存中,然后使用uboot的boot操着命令(bootz或者bootm)来启动镜像文件,所以启动linux内核分为以下两个步骤:
1.加载Image文件和设备树文件到内存:
tftp方式加载:tftp 0x87800000 zImage
tftp 83000000 imx6ull-alientek-emmc.dtb
nfs方式加载:nfs 0x87800000 zImage
nfs 83000000 imx6ull-alientek-emmc.dtb
2.使用bootm或者bootzq启动镜像:
zImage:bootz 80800000 – 83000000
uImage:bootm 80800000 – 83000000 或 bootm 80800000
以上是两个步骤就是uboot启动linux内核的标准过程,我们可以把这两个过程合并统一写道bootcmd中,
然后执行boot命令(boot命令会自动查找bootcmd并执行),实现相同的效果,具体做法如下:
1)setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000'
2)boot
uboot启动linux内核的通常做法
一般uboot是从硬盘中加载内核到内存中的,这样可以保证uboot在没有网络的情况下也可以启动linux内核,因此我们通常的做法是:先将linux内核和设备树文件先写入硬盘,然后设置bootcmd让uboot从硬盘加载内核和设备树文件到内存中,然后执行boot命令,具体如下:
1. 获取Image和设备树文件并保存到硬盘
tftp 0x87800000 zImage
tftp 83000000 imx6ull-emmc.dtb
fatwrite mmc 1:1 80800000 zImage 0x5c2720 //保存zImage
fatwrite mmc 1:0 80800000 imx6ull-emmc.dtb0x620 //保存设备树文件
2. 设置bootcmd从硬盘加载内核和设备树文件到内存:
setenv bootcmd 'fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-emmc.dtb; bootz 80800000 - 83000000'
3.根据bootcmd启动内核:
boot