开发板的系统启动引导程序u-boot是一切的开始。
前提:
需要软件 Win32DiskImager.exe
需要SD卡, 以及SD卡读卡器。
打开软件选择要烧写的uboot软件, 点击写入即可
注意: windows下烧写是从块设备的0号设备开始写的, 会将SD卡的分区表覆盖掉。
测试: 让开发板从SD卡启动, 然后观察到可以进入uboot交互界面就代表成功
前提:
需要软件dd
执行写入
需要SD卡,以及SD卡读卡器。
SD卡插入前, 执行 ls /dev/sd*
可以看到当前的所有存储设备插入SD卡后,再次执行 ls /dev/sd*
对比前面的列表, 可以知道SD卡的设备文件, 一般是/dev/sdb
然后执行如下指令, 完成uboot的烧写
sudo dd if=ubootpak.bin of=/dev/sdb bs=512 seek=1 conv=sync
参数解释
if=/path/to/uboot.bin 这里的if
是input file
的意思, 指定uboot文件。
of=/path/to/dev这里的of
是output file
的意思, 将uboot文件写入到的设备文件, 这里就要指定SD卡的设备文件。
bs=512这里的bs是block size
的意思, 指定写入到块设备时, 每一块的大小, 单位是字节。 SD卡块设备默认是512字节
seek=1偏移量, 单位是块。这里偏移1块, 也就是偏移512字节后写入数据。因为文件分区表是512字节。
conv=sync 数据同步的方式
测试: 让开发板从SD卡启动, 然后观察到可以进入uboot交互界面就代表成功
这里说的EMMC是指flash存储, 掉电不丢失的存储器, 相当于电脑的硬盘或手机的ram
前提:
1) 通过方法一或方法二, 在ubuntu中或windows中, 将uboot写入到SD卡。
2) 设置开发板从SD卡启动, 进入uboot交互模式
3) 使用tftp工具, 将uboot下载到开发板内存中
# tftp 0x40000000 ubootpak.bin
这里要留意传输过程中返回的信息
Speed: 100, full duplex
Using dwmac.c0060000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.155
Filename 'ubootpak.bin'.
Load address: 0x40000000
Loading: ########################
2.8 MiB/s
done
Bytes transferred = 342748 (53adc hex)
这里提示说传输了0x53adc这么大的字节数。后面写入到emmc时, 要写入比这个大的数
注意: 这里的内存地址, 可以使用uboot命令bdinfo
可以知道
-> start = 0x40000000
-> size = 0x80000000
4) 将内存中的数据写入到EMMC中
# tftp 0x40000000 ubootpak.bin
# update_mmc 2 2ndboot 0x40000000 0x200 0x60000
update_mmc 参数解释:
update_mmc
dev no : EMMC设备编号, 和硬件相关。 通过 mmc list
命令可以知道, 可用的设备编号有哪些。 通过prientenv
命令所打印的fastboot
环境变量可以知道flash的设备编号。
type : 类型,有 2ndboot
, boot
, raw
, part
四种
mem : 写入数据再内存的起始地址
addr : EMMC的起始地址, 从0x200
开始。当这个参数设置为0x0
时,会报错:Fail: start 0 block(0x0) is in MBR zone (0x200)
通过报错信息可知, 这个参数至少设置为0x200
length : 烧写的数据长度, 大于等于tftp传输字节数即可。