UBOOT拓展

UBOOT更新UBOOT

参考链接

UBOOT烧写UBOOT
UBOOT下各种命令介绍

原理

1. UBOOT启动后通过tftp命令下载新的uboot到设备的ram内存中
2. 通过mmc命令将下载的uboot烧写到mmc存储介质中完成uboot的更新

相关命令介绍

#查看MMC信息
mmc info 
关键信息:[Erase Group Size]#这是存储介质每个扇区的大小 比如这里就是512B

2026-02-01T12:36:51.png

#查看当前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 #根文件系统存在在这

2026-02-01T12:37:04.png

分区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的实际大小来结算)

2026-02-01T12:37:18.png

2026-02-01T12:37:25.png

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.bin

ping

#目前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,
},

2026-02-01T12:38:55.png