烧写u-boot到开发板emmc或SD卡中的多种方式

开发板的系统启动引导程序u-boot是一切的开始。

1. windows系统下写入u-boot到SD卡

前提:
需要软件 Win32DiskImager.exe
需要SD卡, 以及SD卡读卡器。

打开软件选择要烧写的uboot软件, 点击写入即可
注意: windows下烧写是从块设备的0号设备开始写的, 会将SD卡的分区表覆盖掉。

测试: 让开发板从SD卡启动, 然后观察到可以进入uboot交互界面就代表成功

2. ubuntu系统下写入u-boot到SD卡

前提:
需要软件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 这里的ifinput file的意思, 指定uboot文件。

of=/path/to/dev这里的ofoutput file的意思, 将uboot文件写入到的设备文件, 这里就要指定SD卡的设备文件。

bs=512这里的bs是block size的意思, 指定写入到块设备时, 每一块的大小, 单位是字节。 SD卡块设备默认是512字节

seek=1偏移量, 单位是块。这里偏移1块, 也就是偏移512字节后写入数据。因为文件分区表是512字节。

conv=sync 数据同步的方式

测试: 让开发板从SD卡启动, 然后观察到可以进入uboot交互界面就代表成功

3. 在uboot交互模式下, 将uboot写入到EMMC存储中

这里说的EMMC是指flash存储, 掉电不丢失的存储器, 相当于电脑的硬盘或手机的ram

前提:

  1. 有tftp服务器, 准备好uboot软件待下载
  2. SD卡中已经烧录好了uboot, 可以通过SD卡进入uboot交互界面

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传输字节数即可。

你可能感兴趣的:(嵌入式开发板,u-boot,uboot)