我是靠谱客的博主 无私白昼,最近开发中收集的这篇文章主要介绍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]

bwl的意思同下,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字节的内存数据

最后

以上就是无私白昼为你收集整理的u-boot命令行修改flash的全部内容,希望文章能够帮你解决u-boot命令行修改flash所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部