1.uboot 移植的一般流程:
    
    ①、在 uboot 中找到参考的开发平台,一般是原厂的开发板。
    
    ②、参考原厂开发板移植 uboot 到我们所使用的开发板上。
   
    2.在移植之前,我们先编译一下 NXP 官方 I.MX6ULL EVK 开发板对应的 uboot,首先是配置
    
    uboot,configs 目录下有很多跟 I.MX6UL/6ULL 有关的配置,使用mx6ull_14x14_evk_emmc_defconfig 作为默认配置文件。
   
执行命令:
    make  mx6ull_14x14_evk_emmc_defconfig  //配置
    
    make   //编译
   
    3.命令执行过程:
    
    切换到 EMMC
    
    读取 zImage 镜像文件到 0x80800000
    
    读取设备树文件到 0x83000000
    
    启动 Linux
   
4.每次修改 linux 系统文件或者 linux 下的某个驱动以后都要将其烧写到 EMMC 中去测试,太麻烦。
为了方便调试,可以设置 linux 从网络启动,也就是将 linux 镜像文件和根文件系统都放到 Ubuntu 下某个指定的文件夹中。
使用 tftp 从 Ubuntu 中下载 zImage 和设备树文件,前提是要将 zImage 和设备树文件放到 Ubuntu 下的 tftp 目录中。
5.uboot命令:
base   -打印或设置地址偏移
bdinfo -打印板信息结构
bmode  -sd1 | sd2 | qspi1 | normal | usb | sata | ecspi1:0 | ecspi1:1 | ecspi1:2 | ecspi1:3 | esdhc1 | esdhc2 | esdhc3 | esdhc4[noreset]
bmp   -处理bmp图像数据
boot  -boot默认值,即运行“bootcmd”
bootd -启动默认值,即运行“bootcmd”
bootefi -从内存启动EFI负载
bootelf -从内存中的ELF映像启动
bootm   -从内存启动应用程序映像
bootp   -使用bootp/TFTP协议通过网络引导映像
bootvx  -从ELF映像启动vxWorks
bootz   -从内存中引导Linux zImage映像
clocks  -显示时钟
clrlogo -用黑色填充引导标志区域
cmp     -内存比较
coninfo -打印控制台设备和信息
cp      -内存拷贝
crc32   -校验和计算
dcache  -启用或禁用数据缓存
dhcp    -使用dhcp/TFTP协议通过网络引导映像
dm      -驾驶模型低级访问
echo    -控制台的echo参数
editenv -编辑环境变量
env     -环境处理命令
erase   -擦除闪存
exit    -退出脚本
ext2load -从Ext2文件系统加载二进制文件
ext2ls   -列出目录中的文件(默认/)
ext4load -从Ext4文件系统加载二进制文件
ext4ls   -列出目录中的文件(默认/)
ext4size -确定文件的大小
ext4write -在根目录中创建文件
false   -什么都不做,不成功
fatinfo -打印有关文件系统的信息
fatload -从dos文件系统加载二进制文件
fatls   -列出目录中的文件(默认/)
fatsize -确定文件的大小
fdt     -展平设备树实用程序命令
flinfo- 打印闪存信息
fstype -查找文件系统类型
fuse   -保险丝子系统
go     -在地址“addr”启动应用程序
gpio   -查询和控制gpio引脚
help   -print命令说明/用法
i2c    -i2c子系统
icache -启用或禁用指令缓存
iminfo -打印应用程序图像的标题信息
imxtract -提取多图像的一部分
itest  -整数比较时返回true/false
load   -从文件系统加载二进制文件
loadb  -通过串行线加载二进制文件(kermit模式)
loads  -通过串行线加载S-Record文件
loadx  -通过串行线加载二进制文件(xmodem模式)
loady  -通过串行线加载二进制文件(ymodem模式)
loop   -地址范围上的无限循环
ls     -列出目录中的文件(默认/)
md     -内存显示
mdio   -mdio实用程序命令
mii    -mii实用程序命令
mm     —内存修改(地址自动递增)
mmc   -mmc子系统
mmcinfo -显示MMC信息
mtest -简单RAM读/写测试
mw    -内存写入(填充)
nfs   -使用nfs协议通过网络引导映像
nm    -内存修改(恒定地址)
ping  -向网络主机发送ICMP ECHO_REQUEST
printenv -打印环境变量
protect  -启用或禁用FLASH写入保护
reset  -执行CPU的重置
run    -run环境变量中的命令
save   -将文件保存到文件系统
saveenv -将环境变量保存到持久存储
setenv  -设置环境变量
setexpr -将环境变量设置为eval表达式的结果
sf      -SPI闪存子系统
showvar -打印局部hushshell变量
size    -确定文件的大小
sleep   -延迟执行一段时间
source  -从内存运行脚本
test    -最小测试,如/bin/sh
tftpboot -使用TFTP协议通过网络引导映像
true    -不做任何事,成功
usb     -usb子系统
usbboot -从USB设备启动
version -打印监视器、编译器和链接器版本6.如果你想获取某条命令的更详细的帮助,可以使用:
| help <你想要查的指令> 或者 ? <你想要查的指令> , 甚至 h <你想要查的指令缩写>。 | 
7.cmdline是uboot引导内核启动时传递给内核的,作用是指导内核启动。内核启动阶段会去解析cmdline,并根据cmdline去指导内核启动。
    例如:mem=1408M console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait rootfstype=squashfs mtdparts=xxx
    
    (1)mem=       用来告诉内核当前系统的内存有多少;
    
    (2)console=  指定控制台使用的串口已经波特率;
    
    (3)root=        根文件系统的位置,比如上面就是指定根文件系统在mmcblk0p2分区,内核挂载根文件系统时会用到;
    
    根文件系统也可以通过nfs远程挂载:
    
    root=/dev/nfs nfsroot=192.168.1.141:/root/imx6ull/nfs ip=192.168.1.10:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off
    
    (4)rootfstype=  指明文件系统的格式和权限;
    
    (5)mtdparts=  指明存储设备的分区情况;
   
 
