uboot分类
1.官方的 由 uboot 官方维护开发的 uboot 版本,版本更新快,基本包含所有常用的芯片。
2.半导体厂商的 半导体厂商维护的一个 uboot,专门针对自家的芯片,在对自家芯片支持上要比 uboot 官方的好。
3.开发板厂商的 开发板厂商在半导体厂商提供的 uboot 基础上加入了对自家开发板的支持。
uboot编译脚本mx6ull_alientek_emmc.sh
#!/bin/bash #相当于make clean 清除。CROSS_COMPILE指定编译器前缀 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean #用那个配置文件*_deconfig,在目录configs中含有NXP 很多NXP芯片方案的配置文件 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig # 编译V表示编译过程信息显示级别 make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
U-Boot烧写到SD卡
chmod 777 imxdownload //给予 imxdownload 可执行权限,一次即可 ./imxdownload u-boot.bin /dev/sdd //烧写到 SD 卡,不能烧写到/dev/sda 或 sda1 设备里面!
然后让板子从SD卡启动,就可以进入uboot的命令行界面,注意虽然没有*.dtb设备树文件,但是可以在uboot的启动界面查看到LCD,串口已经好用了
U-Boot命令:
信息查询有关的命令有 3 个:bdinfo、printenv 和 version。
bdinfo 命令,此命令用于查看板子信息,直接输入“bdinfo”即可,可以查看 DRAM 的起始地址和大小、启动参数保存起始地址、波特率、sp(堆栈指针)起始地址等信息。printenv用于输出环境变量信息,uboot 也支持 TAB 键自动补全功能,输入“print”然后按下 TAB 键就会自动补全命令,直接输入“print”也可。比较关键的baudrate、board_name、board_rec、boot_fdt、bootcmd等等。uboot 中的环境变量都是字符串
#设置修改环境变量 setenv bootdelay 5 saveenv #有时候我们修改的环境变量值可能会有空格 setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw' saveenv #删除环境变量 setenv author saveenv
- 内存操作命令
内存操作命令就是用于直接对 DRAM 进行读写操作的,常用的内存操作命令有 md、nm、mm、mw、cp 和 cmp。我们依次来看一下这些命令都是做什么的。
1.md 命令用于显示内存值
md[.b, .w, .l] address [# of objects]
命令中的[.b .w .l]对应 byte、word 和 long,也就是分别以 1 个字节、2 个字节、4 个字节来显示内存值。address 就是要查看的内存起始地址,[# of objects]表示要查看的数据长度
2.nm 命令用于修改指定地址的内存值
nm [.b, .w, .l] address
nm 命令同样可以以.b、.w 和.l 来指定操作格式,比如现在以.l 格式修改 0x80000000 地址的数据为 0x12345678。输入命令:nm.l 80000000 回显 80000000 6743241B ?然后输入设置值后 按“Enter”,q退出
3.mm 命令也是修改指定地址内存值的,使用 mm 修改内存值的时候地址会自增,而使用命令 nm 的话地址不会自增。比如以.l 格式修改从地址 0x80000000 开始的连续 3 个内存块(3*4=12个字节)的数据为 0X05050505
4.mw 用于使用一个指定的数据填充一段内存
mw [.b, .w, .l] address value [count]
mw 命令同样可以以.b、.w 和.l 来指定操作格式,address 表示要填充的内存起始地址,value为要填充的数据,count 是填充的长度。比如使用.l 格式将以 0X80000000 为起始地址的 0x10 个内存块(0x10 * 4=64 字节)填充为 0X0A0A0A0A,命令如下:mw.l 80000000 0A0A0A0A 10
5.cp 是数据拷贝命令,用于将 DRAM 中的数据从一段内存拷贝到另一段内存中,或者把 NorFlash 中的数据拷贝到 DRAM 中
cp [.b, .w, .l] source target count
cp 命令同样可以以.b、.w 和.l 来指定操作格式,source 为源地址,target 为目的地址,count为拷贝的长度。我们使用.l 格式将 0x80000000 处的地址拷贝到 0X80000100 处,长度为 0x10 个内存块(0x10 * 4=64 个字节),命令如下所示:cp.l 80000000 80000100 10
6.cmp 是比较命令,用于比较两段内存的数据是否相等
cmp [.b, .w, .l] addr1 addr2 count
addr1 为第一段内存首地址,addr2 为第二段内存首地址,count 为要比较的长度。我们使用.l 格式来比较 0x80000000 和 0X80000100 这两个地址数据是否相等,比较长度为 0x10 个内存块(16 * 4=64 个字节),命令如下所示:cmp.l 80000000 80000100 10
- 网络操作命令
网络信息配置命令
#设置静态ip信息: setenv ipaddr 192.168.1.50 setenv ethaddr b8:ae:1d:01:00:00 //开发板的 MAC 地址,一定要设置。 setenv gatewayip 192.168.1.1 setenv netmask 255.255.255.0 setenv serverip 192.168.1.253 //服务器 IP 地址,也就是 Ubuntu 主机 IP 地址,用于调试代码。 saveenv #ping ping #dhcp dhcp
文件传输命令
#设置静态ip信息: setenv ipaddr 192.168.1.50 setenv ethaddr b8:ae:1d:01:00:00 //开发板的 MAC 地址,一定要设置。 setenv gatewayip 192.168.1.1 setenv netmask 255.255.255.0 setenv serverip 192.168.1.253 //服务器 IP 地址,也就是 Ubuntu 主机 IP 地址,用于调试代码。 saveenv #ping ping #dhcp dhcp