From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Thu, 12 May 2016 06:41:47 +0200 Subject: [U-Boot] U-boot UBI environment In-Reply-To: <573355CF.4010907@elecsyscorp.com> References: <5730FE25.909@elecsyscorp.com> <57316B70.5060505@denx.de> <5732C84F.50408@denx.de> <573355CF.4010907@elecsyscorp.com> Message-ID: <5734098B.8070409@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Kevin, Am 11.05.2016 um 17:54 schrieb Kevin Smith: > Hi Joe and Heiko, > > I tried disabling the fastmap options, and it appears to be related to > these. With fastmap off, I am able two write without corrupting the > other volume. It looks like it may specifically be the autoupdate > feature, but I am still testing to be sure this is the case. I will let > you know. Thanks for debugging into it! > Thank you for your help, You are welcome! bye, Heiko > Kevin > > On 05/11/2016 12:51 AM, Heiko Schocher wrote: >> Hello Joe, >> >> Am 11.05.2016 um 01:15 schrieb Joseph Hershberger: >>> 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 at 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 at 0 { >>>> label = "mvboot"; >>>> reg = <0 0x200000>; >>>> }; >>>> partition at 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. >> >> This should be no problem ... but you (Kevin) may disable >> FASTMAP for a test? >> >>>> #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)" >> >> You have 70MB for Env? >> >>> #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 >> >> @Kevin: you have exactly one PEB for this volume ... may this is the >> problem? >> Can you try it with a Volume, which have more space? >> >>>> 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 >>>> - 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. >> >> I don;t know. >> >> bye, >> Heiko -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany