uboot里怎么对spi flash特定地址进的数据行读取

uboot里怎么对spi flash特定地址进的数据行读取,第1张

uboot有个protect 命令,用于设置flash存储器的特定区域为只读模式,或取消只读属性。flash设置为只读模式后,不能被拷贝(cp命令)或者擦除(erase命令)。你的环境变量显然是在保存时就被设置为只读模式,而无法用erase命令擦除。所以你必须顺着如uboot里怎么对spi flash特定地址进的数据行读取

平台同稍差异般流程都差

首先修改trunk/tools/firmware-utils/src/mktplinkfw.c

修改fw_max_len0xfc000016M flash;修改fw_max_len0x7c00008M flash

.id = "4M",

.fw_max_len = 0xfc0000,

.kernel_la = 0x80060000,

.kernel_ep = 0x80060000,

.rootfs_ofs = 0x140000,新版用改fw区表自认用像版自定义每区

另外需面修改:

Imagebuilder 目录./target/linux/ar71xx/image/Makefile, 703n4Mlzma改8Mlzma或16Mlzma

$(eval $(call SingleProfile,TPLINK-LZMA,$(fs_64kraw),TLWR703,tl-wr703n-v1,TL-WR703N,ttyATH0,115200,0x07030101,1,8Mlzma))

否则现错误:

[mktplinkfw] kernel length aligned to 914864

[mktplinkfw] *** error: images are too big

make[3]: [install] Error 255 (ignored)

openwrt能更新uboot需要做修改:

target/linux/ar71xx/files/drivers/mtd/tplinkpart.c

parts[0].mask_flags = MTD_WRITEABLE//除本行

打开14.0中的command shell把工作目录转换到ghrd中,使用make -j8 sof开始编译硬件。(-j8 选项可以不带,只是为了多打开几个线程编译比较快,但是需要四核的CPU支持)。

使用bsp-editor.exe打开bsp-editor工具,选择file->New BSP。把Preloader setting directory指定为ghrd中的hps_isw_handoff/soc_system_hps_0。点击OK关闭。再点击Geneate生成BSP后exit BSP Editor。此时应该可以在GHRD中看到software目录了。接下来需要注意的是要把GHRD中的makefile用\embedded\examples\hardware\cv_soc_devkit_ghrd的Makefile换掉(13.0下编译不用替换)。然后使用 make uboot 命令会把preloader 和uboot文件都编译出来。如果只需要编译preloader,就使用make prelaoder好了。过程比较漫长,这里会重新编译一遍硬件工程。

编译完成后在software\preloader\uboot-socfpga 目录下会找到u-boot.img文件,在software\preloader\uboot-socfpga\spl下会找到u-boot-spi.bin。为了方便,在GHRD下建立目录preloader,把这两个文件复制到该目录!

u-boot-spi.bin为binary格式的文件,按照Altera的要求要按照特定格式添加文件头!需要使用到的工具为mkpimage工具。切换工具目录为刚刚建立的preloader目录,使用命令mkpimage -o preloader_de1_soc.img u-boot-spl.bin 。此时文件夹下会产生一个preloader_de1_soc.img。 可以用于更新SD image中的preloader。

———————————————————————————————————————————————————

在更新之前,还是先说SoCEDS14.0中的一个工具alt-boot-disk-util.exe。在Command Shell 中输入这个名称就可以看见使用方法。

#Wirte BOOTLoader and PREloader to disk driver 'E'

alt-boot-disk-util -p preloaer -b bootloader -a write -d E

我的SD Card 被识别为I盘,所以我使用的命令为:

alt-boot-disk-util -p preloaer_de1_soc.img -b u-boot.img -a write -d I

不给我目前使用都会遇到device open error的错误。不知道是环境问题还是其他原因。所以还是在Linux 系统下去更新preloader。

————————————————————————————————————————————————————

(个人使用的ubuntu linux 机器,其他版本应该类似)

把两份文件复制到linux 机器上,并挂载启动SD card。使用fisk -l 查看SD card 对应的节点编号。比如我的SD card 为8G,会看到这样的一条信息:Disk /dev/sdb: 7948 MB, 7948206080 bytes 。说明这个节点为 /dev/sdb。

linux 工作目录切换到preloader放置的地方后。分别使用下面两条命令更新preloader和 uboot。

sudo dd if=preloader_de1_soc.img of=/dev/sdb3 bs=64k seek=0

sudo dd if=u-boot.img of=/dev/sdb3 bs=64k seek=4

再使用下sudo sync 命令就可以d出SD card 了。

使用这张SD boot,你会发现打印出Clock 相关的信息。这个是14.0中添加的打印。另外注意到时间戳应该与编译时间对应


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11673001.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存