1.u-boot的初次编译
(0)设置环境变量
export PATH=$PATH:/home/qhx/Work/Alpha_Mini/SoftwareTool/arm-Linux-gcc/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
(1)清除工程
make distclean
(2)配置uboot
make mx6ull_14x14_ddr512_emmc_defconfig /* 在uboot根目录下生成.config文件 */
(3)编译uboot
make V=1 -j8 /* V=1表示打印详细的编译过程 */
(4)生成文件
u-boot.bin和u-boot.imx就是我们最终需要的文件
2.u-boot命令使用
2.1 帮助命令
(1)输入"help"或者"?"可以查看uboot支持的所有命令
(2)输入"help xxx"或者"? xxx",查看xxx命令的帮助信息
2.2 信息查询命令
(1) bdinfo:查看板子的信息
(2) printenv:查看环境变量
2.3 环境变量相关命令
(1) printenv:查看环境变量
(2) setenv:编辑(修改,新建,删除)环境变量
eg:setenv bootdelay 5
eg:setenv bootcmd 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw' /* 环境变量的值如果包含空格,需要使用单引号包起来 */
eg:setenv author Tom /* 当前环境变量中无author时,会新建一个author环境变量,并赋值为Tom */
eg:setenv author /* 给author环境变量赋空值,表示删除author环境变量 */
(3) saveenv:保存环境变量
2.4 内存操作相关命令
(1) md命令:显示内存指定地址的值
命令格式: md<.b,.w,.l> <address> <offset>
显示格式.b,.w,.l分别对应byte,word,和long,也就是分别对应1个字节,2个字节和4个字节
address就是要查看的内存的起始地址
offset要查看的数据长度,单位不是字节,而是与选择的显示格式有关
eg:md.b 80000000 14 /* 查看以80000000为起始地址的0x14 * 1 = 20个字节的数据 */
md.w 80000000 14 /* 查看以80000000为起始地址的0x14 * 2 = 40个字节的数据 */
md.l 80000000 14 /* 查看以80000000为起始地址的0x14 * 4 = 80个字节的数据 */
(2) nm命令:修改指定内存的值
命令格式: nm<.b,.w,.l> <address>
输入q表示退出
(3) mm命令:修改指定内存的值,地址会自增
(4) mw命令:使用指定数据填充指定的一段内存
命令格式: mw<.b,.w,.l> <address> <value> <count>
eg: mw.l 80000000 AAAA5555 10
(5) cp命令:拷贝指定地址的一段数据至另一块指定地址
命令格式: cp<.b,.w,.l> <source address> <target address> <count>
eg: cp.l 80000000 80000100 10 /* 以80000000地址空间为起始,拷贝0x10*4=64bytes长度的数据至80000100地址空间 */
(6) cmp命令:比较两段内存空间的数据是否相等
命令格式: cmp<.b,.w,.l> <address1> <address2> <count>
eg: cmp.l 80000000 80000100 10 /* 比较80000000和80000100这两个地址的数据是否相同,比较长度为0x10(16)个字节 */
2.5 网络操作相关命令
(1) ping命令
命令格式:ping <ip address>
eg: ping 192.168.31.14
(2) dhcp命令:从路由器自动获取IP地址
命令格式: dhcp
(3) nfs命令
nfs(Network File System),网络文件系统,通过nfs可以在计算机之间使用网络来分享文件。
一般uboot中的nfs命令是用来从ubuntu系统中下载文件到开发板的DRAM。所以uboot在使用nfs时,ubuntu要开启nfs服务。
命令格式:nfs <loadAddress> <hostIPaddr>:<bootfilename>
eg:nfs 80800000 192.168.31.14:/home/qhx/Work/Alpha_Mini/Nfs/zImage
/* 80800000:zImage要保存的地址
* 192.168.31.14:nfs服务器的ip地址
* /home/qhx/Work/Alpha_Mini/Nfs/zImage:要传输的文件路径和名称 */
(4) tftp命令
tftp命令和nfs命令一样,都是通过网络下载文件至DRAM中,只是tftp命令使用的是tftp协议,ubuntu作为tftp服务器,所以ubuntu需要搭建tftp服务器
命令格式: tftp <loadAddress> <hostIpaddr>:<bootfilename>
eg:tftp 80800000 192.168.31.14:zImage
2.6 EMMC和SD卡操作命令
uboot支持EMMC和SD卡两种设备,所以uboot也提供了这两种设备相关的命令,操作这两种设备的命令是mmc命令。
(1) mmc info命令
命令功能:输出当前选中的MMC设备的设备信息。
当前选中的MMC设备是SD卡,SD卡版本是V3.0,容量是7.4GB,速度是50MHz,4位宽的总线。
(2) mmc rescan
命令功能:扫描当前开发板上所有的MMC设备。
(3) mmc list
命令功能:列出当前开发板一所有的MMC设备。
当前开发板有两个MMC设备,分别是FSL_SDHC:0(SD)和FSL_SDHC:1,其中0表示SD卡,1表示EMMC。
(4) mmc part
命令功能:查看当前已选中设备的分区信息。
当前MMC设备有两个分区,其中扇区20480~282623为分区1,282624~14987264为分区2。
(5) mmc dev
命令功能:切换当前EMMC设备。
命令格式:mmc dev [dev] [part]
dev:要切换的MMC设备号,通过mmc list命令可以查看;
part:MMC设备的分区号,省略不写表示默认分区0,可以通过mmc part查看当前已选中设备的分区。
(6) mmc read
命令功能:读取mmc设备的数据到DRAM的指定地址空间。
命令格式:mmc read [addr] [blk] [cnt]
eg:mmc read 80800000 600 10 /*从当前选中设备的第0x600个扇区开始,读取0x10个扇区到DRAM的0x80800000地址空间 */
(7) mmc write
命令功能:将DRAM的指定地址空间的数据写入到MMC的指定位置。
命令格式:mmc write [addr] [blk] [cnt]
eg: mmc write 80800000 2 100/* 将80800000的数据,写入到MMC设备的第0x2个块设备中,写入长度为0x100个扇区(块)*/
(8) mmc erase
命令功能: 擦除MMC设备指定空间
命令格式: mmc erase [blk] [cnt]
eg: mmc erase 100 10 /* 擦除第0x100~0x100 0x10个块 */
2.7 FAT格式文件系统操作命令
uboot需要对SD卡或者EMMC中所存储的文件进行操作,需要使用到文件系统相关的指令。
(1) fatinfo
命令功能: 获取mmc的文件系统信息
命令格式: fatinfo <interface> <dev><:part> /* interface表示接口,dev表示要查询的设备号,part表示要查询的分区号 */
eg: fatinfo mmc 0:1 /* 查询mmc设备的设备1的分区1的文件系统信息 */
(2) fatls
命令功能: 查询FAT格式存储设备的目录和文件信息
命令格式: fatls <interface> [<dev[:part]>] [directory] /* directory是看查询的目录 */
eg: fatls mmc 1:1
(3) fstype
命令功能: 查看MMC设备的某个分区的文件系统格式
命令格式: fstype <interface> <dev>:<part>
eg: fatype mmc 1:1
(4) fatload
命令功能: 将指定的文件读到DRAM中
命令格式: fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]
从interface的dev设备的part分区中拷贝filename文件至DRAM的addr地址空间。bytes表示要读取的字节数,为0或者省略表示读取整个文件;pos是相对于文件首地址的文件偏移,如果为0或者省略表示从文件首地址读取。
eg: fatload mmc 1:1 80800000 zimage 0:0
/* 将mmc设备1的分区1的整个zimage文件拷贝到DRAM的80800000地址空间 */
(5) fatwrite
命令功能: 将DRAM中的数据写入到MMC设备中
命令格式: fatwrite <interface> <dev[:part]> <addr> <filename> <bytes>
将DRAM中起始地址为addr,长度为bytes的数据,写入到interface的dev设备的分区part,并命名为filename
eg: fatwrite mmc 1:1 80800000 zImage 67A368
将DRAM中80800000~80800000 67A368地址空间的数据拷贝的mmc设备1的分区1,并命名为zImage
2.8 EXT格式文件系统操作命令
(1) ext2load
(2) ext2ls
(3) ext4load
(4) ext4ls
这些命令与fatload和fatls命令的使用方法一样,只不过ext2和ext4都是针对ext文件系统的相关操作。
2.9 BOOT操作命令
u-boot的根本工作是用来引导内核,需要使用bootz命令、bootm命令、boot命令来启动内核。
(1) bootz命令
命令功能: 从DRAM中启动zImage镜像文件
命令格式: bootz [addr [initrd[:size]] [fdt]]
/* addr表示zImage在DRAM中的起始地址,initrd表示initrd文件在DRAM中的起始地址,fdt表示设备树文件在DRAM中的地址;如果不使用initrd文件的话,需要使用'-'来替代 */
eg: bootz 80800000 - 83000000 /* 从DRAM的80800000处启动zImage,从83000000处加载dtb */
(2) bootm命令
命令功能: 从DRAM中启动uImage镜像文件
命令格式: bootm [addr [initrd[:size]] [fdt]]
eg: bootm 80800000 - 83000000
(3) boot命令
命令功能: 执行bootcmd环境变量中的命令,可以设置bootcmd环境变量为获取Linux内核和设备树文件,然后使用bootz命令启动内核
命令格式: boot
eg: setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb; bootz 80800000 - 83000000'
saveenv
boot
2.10 其他常用命令
(1) reset
命令功能: 复位重启
命令格式: reset
(2) run
命令功能: 运行环境变量中定义的命令,run命令最大的作用在于运行我们自定义的环境变量。
命令格式: run var
eg: run bootcmd /* 运行bootcmd环境变量中定义的命令 */
(3) mtest
命令功能: 内存读写测试命令,用来测试板子上的DDR
命令格式: mtest [start [end [pattern [iterations]]]]
eg: mtest 80000000 80001000 /* 测试80000000~80001000这段内存空间 */
(4) go
命令功能: 跳转至指定地址处执行应用程序。
命令格式: go addr [arg ...]
eg: tftp 87800000 printf.bin
go 87800000
,