u-boot命令行修改flash

缘由:通过在u-boot命令行修改flash的factory分区的uuid,然后进入kernel后,就可以通过已经写好的/sys/device/下的节点读取flash中factory分区中uuid的值

大体流程:开机进入uboot命令行,用mw命令向内存中写入要存的uuid,然后通过sf命令,把内存中的数据写入flash

mw
uboot下输入指令mw,会提示md的用法,memory write,即向内存中写入数据

U-Boot-PetaLinux> mw
mw - memory write (fill)
Usage:
mw [.b, .w, .l] address value [count]

b\w\l的意思同下,address是要写入内存的地址,value是要写入的值,count是从address开始要写入多少个数,这些都是16进制数。
示例:
在这里插入图片描述

U-Boot-PetaLinux> mw.w 0x10000000 0x1234 1 
U-Boot-PetaLinux> md.w 0x10000000  1       
10000000: 1234 

md
uboot下输入指令md,会提示md的用法,memory display,即内存显示。
b:8位
w:16位
l:32位(默认值)
示例:在这里插入图片描述
上述0x10000000是要显示内存的那个地址,后面的数字是输出的个数,注意是16进制的。
直接输入md来显示,默认是以32位为单位输出 。

到这里 内存中已经有了我们写入的值了,可以通过mw写 md看

uboot sf 命令用法:
uboot中如果支持spi/qspi flash, 那么可以使用sf的erase, read, write命令操作spi flash

sf read用来读取flash数据到内存

sf write写内存数据到flash

sf erase 擦除指定位置,指定长度的flash内容, 擦除后内容全1

具体用法

sf probe [[bus:]cs] [hz] [mode] - init flash device on given SPI bus and chip select

sf read addr offset len - read len' bytes starting atoffset’ to memory at `addr’

sf write addr offset len - write len' bytes from memor ataddr’ to flash at `offset’

sf erase offset [+]len - erase len' bytes fromoffset’ +len' round uplen’ to block size

sf update addr offset len - erase and write len' bytes from memory ataddr’ to flash at `offset’

使用范例

sf probe

在使用sf read sf write之前,一定要调用sf probe

sf write 0x82000000 0x0 0x20000

把内存0x8200 0000处的数据, 写入flash的偏移0x0, 写入数据长度为0x20000(128KB), 操作偏移和长度最小单位是Byte

sf read 0x82000000 0x10000 0x20000

把flash偏移0x10000(64KB)处, 长度为0x20000(128KB)的数据, 写入到内存0x82000000, 操作偏移和长度最小单位是Byte

sf erase 0x0 0x10000

擦除偏移0x0处, 到0x10000之间的擦除块, 擦除操作是以erase block为单位的, 要求offset和len参数必须是erase block对齐的

这里踩了坑:
我在uboot (include/config/isvp_t30.h)中规定mtd6的分区大小是3000K,开机就是挂载不上mtd6。一直报flash没擦干净,后来才知道,mtd这个数要32的整数倍才行,换成3072就可以了
不确定是因为mtd分区最小单元就是32K,还是说sf erase的最小单元是32k

从sf命令,可以看出几点:

  1. spi flash没有oob数据存在, 也就是不用考虑EDC ECC, 也没有坏块管理概念.

  2. 支持Byte级的读写操作, 支持随机访问.

如何验证读写效果

可以结合uboot md命令, sf read, sf write都涉及到内存操作, 可以用md查看内存数据

md 0x82000000 0x100

打印0x82000000开始, 长度范围256字节的内存数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_kerneler

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值