Embedded U-Boot更新后saveenv失败-写入NAND。。。失败

Embedded U-Boot更新后saveenv失败-写入NAND。。。失败,embedded,arm,environment-variables,block,u-boot,Embedded,Arm,Environment Variables,Block,U Boot,为了能够用Debian Wheezy运行我的eSata Sheevaplug,我必须将U-Boot升级到DENX版本。 作为我使用的逐步指南。我用屏幕和插头上的U盘进行了升级。 升级进行得很好,重置后,我得到了新版本的插件开始 Marvell>> version U-Boot 2013.10 (Oct 21 2013 - 21:06:56) Marvell-Sheevaplug - eSATA - SD/MMC gcc (Debian 4.8.1-9) 4.8.1 GNU ld (G

为了能够用Debian Wheezy运行我的eSata Sheevaplug,我必须将U-Boot升级到DENX版本。 作为我使用的逐步指南。我用屏幕和插头上的U盘进行了升级。 升级进行得很好,重置后,我得到了新版本的插件开始

Marvell>> version
U-Boot 2013.10 (Oct 21 2013 - 21:06:56)
Marvell-Sheevaplug - eSATA - SD/MMC
gcc (Debian 4.8.1-9) 4.8.1
GNU ld (GNU Binutils for Debian) 2.23.52.20130727
Marvell>>
在指南中写的是设置machid环境变量和MAC地址。 但不幸的是,saveenv由于NAND中的坏块而失败。我也尝试了不同版本的U-Boot。所有人的行为都是一样的

Marvell>> setenv machid a76
Marvell>> saveenv
Saving Environment to NAND...
Erasing NAND...
Skipping bad block at  0x00060000                                          

Writing to NAND... FAILED!
有一些块标记为坏的,这可能是正常的-由NewIT

Marvell>> nand info

Device 0: nand0, sector size 128 KiB
  Page size      2048 b
  OOB size         64 b
  Erase size   131072 b
Marvell>> nand bad

Device 0 bad blocks:
  00060000
  00120000
  00360000
  039c0000
  0c300000
  10dc0000
  1ac40000
  1f1c0000
有人知道问题出在哪里吗?我需要做些什么才能在u-boot中保存环境变量

谢谢,
schibbl

由于NAND上的环境变量存储配置、128k的扇区大小以及映射环境变量存储地址的坏块,因此无法将env写入NAND

Marvell>> nand bad

Device 0 bad blocks:
  00060000
  ...
这正好指向坏的街区

/*
 * max 4k env size is enough, but in case of nand
 * it has to be rounded to sector size
 */
#define CONFIG_ENV_SIZE                 0x20000 /* 128k */
#define CONFIG_ENV_ADDR                 0x60000
#define CONFIG_ENV_OFFSET               0x60000 /* env starts here */
由于未使用的扇区0x80000到0x9FFFF,我将env存储移到了那里

/*
 * max 4k env size is enough, but in case of nand
 * it has to be rounded to sector size
 */
#define CONFIG_ENV_SIZE                 0x20000 /* 128k */
#define CONFIG_ENV_ADDR                 0x80000
#define CONFIG_ENV_OFFSET               0x80000 /* env starts here due to bad block */
当心!我们必须确保编译的u-boot.kwb小于384k。否则,我们会将u-boot写入标记为坏块的内存,并将砖块设备

使用自定义环境地址重新编译的最佳方法是使用,其中包括支持mmc和e-sata的修补程序