UBOOT拓展
UBOOT更新UBOOT
参考链接
原理
1. UBOOT启动后通过tftp命令下载新的uboot到设备的ram内存中
2. 通过mmc命令将下载的uboot烧写到mmc存储介质中完成uboot的更新相关命令介绍
#查看MMC信息
mmc info
关键信息:[Erase Group Size]#这是存储介质每个扇区的大小 比如这里就是512B
#查看当前mmc设备
mmc list
#查看当前mmc设备的分区列表
mmc part
[ !注意!]UBOOT分区一般无法识别到,所以只会显示两个分区
#切换操作的mmc
mmc dev [dev] [part]
例子: mmc dev 0 0 #切换到mmc0的第一个分区,通常这里存放的是uboot
mmc dev 0 1 #内核存放在这
mmc dev 0 2 #根文件系统存在在这
分区1为分配的BOOT分区,存放内核
分区2为分配的ROOTFS分区,存放根文件系统
还有一个UBOOT分区位显示出来
#烧写MMC
mmc write addr blk# cnt
#解释:
* addr 是要写入 MMC 中的数据在 DRAM 中的起始地址
* blk 是要写入 MMC 的块起始地址(十六进制)
* cnt 是要写入的块大小(十六进制),一个块为 512 字节。操作步骤
[虚拟机操作]
#拷贝更新后的UBOOT到TFTP目录下
cp u-boot-sunxi-with-spl.bin /home/xuyongxian/linux/tftp
[UBOOT操作]
#下载更新后的UBOOT
tftp 80800000 u-boot-sunxi-with-spl.bin
#切换到MMC0设备的分区0
mmc dev 0 0
#烧写UBOOT到MMC
mmc write 80800000 10 32F #一个扇区的大小为512B,偏移16[16进制10]个扇区就是从8KB处开始烧写,烧写大小为32E(根据UBOOT的实际大小来结算)

SPI FLASH驱动
参考链接
132916992(!!!!力推)
t_8184.html
# 目前支持SPI Flash的只有UBOOT2022分支才行,注意
#烧写出现问题的时候可以通过SD启动内核,在内核下面通过MTD命令擦除掉烧写的UBOOT即可
#擦除UBOOT分区
/mtd_utils/mtd_debug erase /dev/mtd0 0 1024000
#重新烧写
sudo xfel spinand write 0x0 split.binping
#目前UBOOT 2022分支支持的SPI Flash可以在arch/arm/mach-sunxi/spl_spinand_sunxi.c文件下查到
struct sunxi_nand_config sunxi_known_nands[] #该结构体描述了驱动支持的SPI Flash
#可以在该结构体下添加自己的SPI Flash驱动,比如该结构体下原来只支持**Winbond W25N01GVxxIG ID**(128MB)值为EFAA21
#但是我使用的SPI Flash的ID值为EFAA22,类型是**Winbond W25N02KVxxIG**(256MB)
#复制Winbond W25N01GVxxIG ID的驱动改一下名字和ID值即可
{
.name = "Winbond W25N02KVxxIG",
.jedec_id = 0x00EFAA22,
.page_mask = 0x0000FFFF,
.page_shift = 11,
.addr_mask = 0x7FF,
.addr_shift = 0,
.block_size = 128 * 1024,
.page_size = 4096,
},