Hi Kevin, Am 09.05.2016 um 23:16 schrieb Kevin Smith: > Hello, > > I would appreciate some UBI help/advice if you are able to provide it. > I am trying to use UBI to store my u-boot environment, but when I try > to 'saveenv', it is corrupting another volume of my UBI. I can image > the rootfs volume and boot Linux from it without a problem. However, > the first time that I save the u-boot environment, the rootfs becomes > unreadable. When the rootfs is corrupted, I have booted Linux from > another source and tried to attach UBI and dd out the data. It > appears as all 0xFF. Both u-boot and Linux can read the env volume correctly. > > I do not think that there is a board in U-boot that uses UBI env, so I > do not have anything to compare to. I have included some details of > my setup below. Do you have any suggestion about what might be wrong? > I saw the recent patch b1d6590d35, and thought it might fix it, but am > still having the problem even with this. Maybe there is another bug? > I am glad to provide more info as needed. > Thank you, > Kevin > > DTS: > flash@d0000 { > num-cs = <1>; > marvell,nand-keep-config; > marvell,nand-enable-arbiter; > nand-on-flash-bbt; > nand-ecc-strength = <4>; > nand-ecc-step-size = <512>; > status = "okay"; > > partition@0 { > label = "mvboot"; > reg = <0 0x200000>; > }; > partition@200000 { > label = "ubi"; > reg = <0x200000 0x1fe00000>; > }; > }; > Config: > #define MTDIDS_DEFAULT "nand0=pxa3xx_nand-0" > #define MTDPARTS_DEFAULT "mtdparts=pxa3xx_nand-0:2m(mvboot),-(ubi)" > #define CONFIG_CMD_UBI > #define CONFIG_CMD_UBIFS
> #define CONFIG_MTD_UBI_FASTMAP > #define CONFIG_MTD_UBI_FASTMAP_AUTOCONVERT 1 I don’t define these 2, not sure if it matters. > #define CONFIG_ENV_IS_IN_UBI > #define CONFIG_ENV_UBI_PART "ubi" > #define CONFIG_ENV_UBI_VOLUME "u-boot-env" > #define CONFIG_ENV_SIZE (64 * 1024) My config looks like this: #define MTDIDS_DEFAULT "nand0=xilinx_nand" #define MTDPARTS_DEFAULT \ "mtdparts=xilinx_nand:" \ "128k(fsbl)ro," \ "11M(u-boot)ro," \ "70M(boot-config)," \ "-(root)" #define CONFIG_ENV_IS_IN_UBI #define CONFIG_ENV_UBI_PART "boot-config" #define CONFIG_ENV_UBI_VOLUME "u-boot-env1" #define CONFIG_ENV_UBI_VOLUME_REDUND "u-boot-env2" #define CONFIG_ENV_SIZE 0x20000 I create volumes like this: "writepartitions=" \ "if ubi part boot-config && " \ "ubi read $verifyaddr u-boot-env1 1 && " \ "ubi read $verifyaddr u-boot-env2 1; " \ "then " \ "ubi remove bootfs && " \ "ubi remove config; " \ "else " \ "nand erase.part boot-config && " \ "ubi part boot-config && " \ "ubi create u-boot-env1 " __stringify(CONFIG_ENV_SIZE) " dynamic && " \ "ubi create u-boot-env2 " __stringify(CONFIG_ENV_SIZE) " dynamic; " \ "fi && " \ "ubi create bootfs " __stringify(CONFIG_BOOTFS_VOLUME_SIZE) " dynamic && " \ "ubi create config - dynamic && " \ "if ubi part root && " \ "ubi read $verifyaddr rootfs 1; " \ "then " \ "ubi remove rootfs; " \ "else " \ "nand erase.part root && " \ "ubi part root; " \ "fi && " \ "ubi create rootfs - dynamic;\0" \ > => ubi info > UBI: MTD device name: "mtd=1" > UBI: MTD device size: 510 MiB > UBI: physical eraseblock size: 131072 bytes (128 KiB) > UBI: logical eraseblock size: 126976 bytes > UBI: number of good PEBs: 4072 > UBI: number of bad PEBs: 8 > UBI: smallest flash I/O unit: 2048 > UBI: VID header offset: 2048 (aligned 2048) > UBI: data offset: 4096 > UBI: max. allowed volumes: 128 > UBI: wear-leveling threshold: 4096 > UBI: number of internal volumes: 1 > UBI: number of user volumes: 2 > UBI: available PEBs: 0 > UBI: total number of reserved PEBs: 4072 > UBI: number of PEBs reserved for bad PEB handling: 72 > UBI: max/mean erase counter: 18/4 > > => ubi info l > Volume information dump: > vol_id 0 > reserved_pebs 1 > alignment 1 > data_pad 0 > vol_type 3 > name_len 10 > usable_leb_size 126976 > used_ebs 1 > used_bytes 126976 > last_eb_bytes 126976 > corrupted 0 > upd_marker 0 > name u-boot-env > Volume information dump: > vol_id 1 > reserved_pebs 3993 > alignment 1 > data_pad 0 > vol_type 3 > name_len 6 > usable_leb_size 126976 > used_ebs 3993 > used_bytes 507015168 > last_eb_bytes 126976 > corrupted 0 > upd_marker 0 > name rootfs > Volume information dump: > vol_id 2147479551 > reserved_pebs 2 > alignment 1 > data_pad 0 > vol_type 3 > name_len 13 > usable_leb_size 126976 > used_ebs 2 > used_bytes 253952 > last_eb_bytes 2 > corrupted 0 > upd_marker 0 > name layout volume > > => ubifsmount ubi0:rootfs > Error reading superblock on volume 'ubi0:rootfs' errno=-30! > ubifsmount - mount UBIFS volume > > Usage: > ubifsmount <volume-name> > - mount 'volume-name' volume > I also notice that you are not using a redundant env like I am, so maybe there is a bug when not using a redundant env that I don't run into. GL, -Joe _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot