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个字节的数据 */

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(1)

(2) nm命令:修改指定内存的值

命令格式: nm<.b,.w,.l> <address>

输入q表示退出

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(2)

(3) mm命令:修改指定内存的值,地址会自增

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(3)

(4) mw命令:使用指定数据填充指定的一段内存

命令格式: mw<.b,.w,.l> <address> <value> <count>

eg: mw.l 80000000 AAAA5555 10

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(4)

(5) cp命令:拷贝指定地址的一段数据至另一块指定地址

命令格式: cp<.b,.w,.l> <source address> <target address> <count>

eg: cp.l 80000000 80000100 10 /* 以80000000地址空间为起始,拷贝0x10*4=64bytes长度的数据至80000100地址空间 */

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(5)

(6) cmp命令:比较两段内存空间的数据是否相等

命令格式: cmp<.b,.w,.l> <address1> <address2> <count>

eg: cmp.l 80000000 80000100 10 /* 比较80000000和80000100这两个地址的数据是否相同,比较长度为0x10(16)个字节 */

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(6)

2.5 网络操作相关命令

(1) ping命令

命令格式:ping <ip address>

eg: ping 192.168.31.14

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(7)

(2) dhcp命令:从路由器自动获取IP地址

命令格式: dhcp

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(8)

(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:要传输的文件路径和名称 */

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(9)

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(10)

(4) tftp命令

tftp命令和nfs命令一样,都是通过网络下载文件至DRAM中,只是tftp命令使用的是tftp协议,ubuntu作为tftp服务器,所以ubuntu需要搭建tftp服务器

命令格式: tftp <loadAddress> <hostIpaddr>:<bootfilename>

eg:tftp 80800000 192.168.31.14:zImage

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(11)

2.6 EMMC和SD卡操作命令

uboot支持EMMC和SD卡两种设备,所以uboot也提供了这两种设备相关的命令,操作这两种设备的命令是mmc命令。

(1) mmc info命令

命令功能:输出当前选中的MMC设备的设备信息。

当前选中的MMC设备是SD卡,SD卡版本是V3.0,容量是7.4GB,速度是50MHz,4位宽的总线。

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(12)

(2) mmc rescan

命令功能:扫描当前开发板上所有的MMC设备。

(3) mmc list

命令功能:列出当前开发板一所有的MMC设备。

当前开发板有两个MMC设备,分别是FSL_SDHC:0(SD)和FSL_SDHC:1,其中0表示SD卡,1表示EMMC。

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(13)

(4) mmc part

命令功能:查看当前已选中设备的分区信息。

当前MMC设备有两个分区,其中扇区20480~282623为分区1,282624~14987264为分区2。

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(14)

(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的文件系统信息 */

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(15)

(2) fatls

命令功能: 查询FAT格式存储设备的目录和文件信息

命令格式: fatls <interface> [<dev[:part]>] [directory] /* directory是看查询的目录 */

eg: fatls mmc 1:1

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(16)

(3) fstype

命令功能: 查看MMC设备的某个分区的文件系统格式

命令格式: fstype <interface> <dev>:<part>

eg: fatype mmc 1:1

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(17)

(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地址空间 */

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(18)

(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

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(19)

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

uboot中没有自己的开发板怎么移植(系统移植之U-boot)(20)

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

,