uboot启动log简析
- 1、以后带有调试uboot性质的开发,uboot都是烧写到sd卡,用别的方法会将 uboot,linux系统镜像zImage,文件系统,设备树一起烧进去。但目前我们只想更新 uboot,将所有东西都烧进去显然会浪费时间。
uboot命令使用
- 1、help
help 或者 ?:查看所有命令的帮助信息。
? 命令名 :查看某一命令的帮助信息 - 2、信息查询
bdinfo:print Board Info structure。 page 691
printenv:查看当前板子的环境变量 - 3、setenv 命令
设置 环境变量
setenv bootdelay 5:设置 bootdela y为5,此时这个还保存在code中,使用saveenv 将其保存到 emmc 中。重启开发板可以看到倒计时生效。如果要改成的变量的值字符串中有空格,那么值要用单引号包起来。
也可以新建环境变量。
也可以删除环境变量。 - 4、saveenv 命令
保存环境变量,将 uboot 中的默认环境变量写到 emmc 中。(重启板子,可以看到“bad crc,using default environment" 这条log消失。) - 5、新建环境变量(自定义)
setenv 变量名 变量值
setenv 变量名 ( 删除一个环境变量 ) - 6、内存操作命令 page 693
md:用于显示内存值,ddr。
nm:用于修改指定地址的内存值
mm:修改指定地址内存值
mw:使用一个指定的数据填充一段内存
cp:数据拷贝命令,用于将 DRAM 中的数据从一段内存拷贝到另一段内存中
cmp:用于比较两段内存的数据是否相等 - 7、网络操作命令 page 696
ping命令
判断uboot的网络驱动是否工作,可以利用ftp,nfs 从 ubuntu 里面下载系统镜像
dhcp命令
让路由器给板子分配一个 ip 地址
nfs命令
通过 network file system 可以使计算机之间通过网络来分享资源。
目的是为了方便的调试程序,在 uboot 中使用 nfs 命令将 Ubuntu 中的 linux 镜像和设备树下载到 开发板的DRAM 中。
通过网络将编译好的 linux 镜像和设备树文件下载到 DRAM 中,然后就可以直接运行。
实例:
nfs 80800000 192.168.168.1.77:/home/jl/linux/nfs/zImage
192.168.1.77 是ubuntu主机ip,即server ip;zImage 就是 编译出来的 系统镜像。
tftp 命令
和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中,只是 tftp命令 使用的是 TFTP 协议。
ubuntu主机 作为 tftp服务器。
示例:(把 u-boot.imx 放到 tftpboot 目录下,然后调用下面的 uboot 指令,把 uboot 文件 下载到 dram 的 8080 0000 地址处)
tftp 80800000 u-boot.imx
- emmc和sd卡操作指令
mmc代指 emmc 或者 sd卡。
mmc info:输出当前选中的 mmc info 设备的信息
mmc rescan:扫描当前开发板上所有的mmc设备
mmc list:查看当前开发板一共有几个mmc设备
mmc dev:用于切换当前 MMC 设备 / 设置当前设备
mmc dev 0 //切换到sd卡 第0个分区
mmc dev 1 //切换到emmc 第0个分区
mmc dev 0:1 //切换到sd卡 第1个分区,不写默认是第0个分区
mmc part:有时候 SD 卡或者 EMMC 会有多个分区,可以使用命令“mmc part”来查看其分区。若 emmc 里面烧写了 linux 系统的话,有3个分区,第0个分区存放uboot,第1个分区存放 linux 镜像文件和设备树,第2个分区存放根文件系统。第0个分区没有格式化,所以mmc part 识别不出来。
mmc read:用于读取 mmc 设备的数据到 dram 中
mmc dev 1 0 //切换到 MMC 分区 0
mmc read 80800000 600 10
//读取分区0 第 0x600 块开始 0x10 个数据到dram 80800000
//其实就是uboot环境变量存储的起始地址。
mmc write:将dram中的数据写到 mmc 设备里面
mmc dev 0 0 //切换到sd卡第0个分区
mmc write 80800000 2 32E
//将dram 8080 0000 开始的0x32E的数据向sd卡第0个分区
//第2个块开始写
//其实就是uboot再写入sd卡,重启看看编译时间确定是否
//写成功
mmc erase:要擦除 MMC 设备的指定块。少用。
- fat格式文件系统操作命令
只支持 FAT 格式的文件系统
fatinfo:查询指定 MMC 设置指定分区的文件系统信息
fatinfo mmc 1:1
//查询EMMC 分区 1 的文件系统信息
fatinfo mmc 0:0-----存放uboot,识别不出来
fatinfo mmc 0:1-----fat格式,存放zImage,设备树,dtb
fatinfo mmc 0:2-----如果有根文件系统,就是ext4
fatinfo mmc 1:0-----识别不出来
fatinfo mmc 1:1-----fat格式,存放zImage,设备树,dtb
fatinfo mmc 1:2-----如果有根文件系统,就是ext4
fatls:用于查询 FAT 格式设备的目录和文件信息
fatls mmc 1:1
//查询 EMMC 分区 1 中的所有的目录和文件
fstype:查看 MMC 设备某个分区的文件系统格式
fstype mmc 1:0
fstype mmc 1:1
fstype mmc 1:2
//查看emmc 3 个分区的文件系统格式
fatload:用于将mmc中指定的文件读取到 DRAM 中,uboot启动linux kernel就是用这个指令(重点)
fatload mmc 1:1 80800000 zImage
//将 EMMC 分区 1 中的 zImage 文件读取到 DRAM 中的0X80800000 地址
fatwrite:将 DRAM 中的数据写入到 MMC 设备中
- EXT 格式文件系统操作命令
常用的就四个命令,分别为:
ext2load、 ext2ls、 ext4load、 ext4ls 和 ext4write。这些命令的含义和使用与 fatload、 fatls 和 fatwrit一样,只是 ext2 和 ext4 都是针对 ext 文件系统的。比如 ext4ls 命令, EMMC 的分区 2 就是 ext4格式的
ext4ls mmc 1:2
//使用 ext4ls 就可以查询 EMMC 的分区 2 中的文件和目录
- boot操作命令
常用的跟 boot 有关的命令有: bootz、 bootm 和 boot。 - bootz
用于启动linux 系统
利用 tftp 先将 zImage 和 dtb copy to dram 指定位置
tftp 80800000 zImage
tftp 83000000 imx6ull-alientek-emmc.dtb
bootz 80800000 – 83000000
或者
从emmc启动,也要先将 zImage 和 dtb copy to dram 指定位置
fatload mmc 1:1 80800000 zImage
fatload mmc 1:1 83000000 imx6ull-alientek-emmc.dtb
bootz 80800000 - 83000000
bootm:用于启动 uImage镜像文件
boot:也是用来启动 Linux 系统的,只是 boot 会读取环境变量 bootcmd 来启动 Linux 系统。
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000'
saveenv
boot
uboot 倒计时结束以后就会启动 Linux 系统,其实就是执行的 bootcmd 中的启动命令
- 其它指令
reset:重启
go:调到 dram 指定的地址处执行应用
tftp 87800000 printf.bin
go 87800000
注意一定要是bin文件,若是elf格式调用该指令板子直接重启。
run:用于运行环境变量中定义的命令,最大的作用在于运行我们自定义的环境变量。
setenv mybootemmc 'fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ullalientek-emmc.dtb;bootz 80800000 - 83000000'
setenv mybootnet 'tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000'
saveenv
run mybootemmc (or mybootnet)
mtest:一个简单的内存读写测试命令,可以用来测试自己开发板上的 DDR
mtest 80000000 80001000
//测试范围为 0X80000000~0X80001000,要结束测试就按下键盘上的“Ctrl+C”键。