Sudeep,
Thank you very much for your response. It is good to know that the issues we were observing were indeed to do a bug that has already been fixed. I am still seeing the problematic behavior I detailed in the second paragraph of my last post, though- after updating YAFFS2 to the latest version, attempting to mount what I know to be a properly written YAFFS2 partition results in that partition's contents being erased (save for the lost+found directory). Would you mind stepping me through your process for replacing the android yaffs2 code with the updated yaffs2 code? I will post the steps I take as well- if anything appears to be incorrect, please let me know.
Get the latest YAFFS2 code:
git clone git://www.aleph1.co.uk/yaffs2
Copy the YAFFS2 code into the android kernel
rm -r android2.1/kernel/fs/yaffs2
cp -r yaffs2 android2.1/kernel/fs/
Change the YAFFS2 makefile to be compatible with Android
/* If anything in this process is wrong, my guess is it's this */
cd android2.1/kernel/fs/yaffs2
vim Makefile.kernel
replace yaffs.o with yaffs2.o
replace all occurrences of yaffs-y with yaffs2-y
cp Makefile.kernel Makefile
Compile the updated kernel
cd android2.1/kernel
export PATH=$PWD/../prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin:/opt/ldp-2.10/bin:$PATH
make ARCH=arm CROSS_COMPILE=arm-eabi- uImage -j8
When I load this image into my device, I am able to mount the OneNAND and copy my file system onto it. If I sync, unmount, and mount the file system again, though, the OneNAND shows that it contains only the LOST+FOUND directory.
Thanks again for the help,
Jordan Wills
-----Original Message-----
From: Sudeep K N [
mailto:sudeepholla.maillist@gmail.com]
Sent: Saturday, August 28, 2010 8:50 AM
To: Wills, Jordan
Cc:
yaffs@lists.aleph1.co.uk; Kieran Cox; Lloyd, Jay; Charles Manning
Subject: Re: [Yaffs] android boot issue with latest git source
Jordon Wills,
We too faced similar issues with data getting zeroed in the first two
pages of a block following a bad block.
Below is our analysis:
The problem was the OOB length YAFFS2 was reading from MTD. On OneNand
there was 20 bytes left free on OOB and YAFFS2 would request a read of
28 bytes of OOB. The OneNand MTD driver would read 20 bytes from the
page requested and the rest 8 bytes from next page. If the next page
happened to be marked bad we would get an ECC error which would cause
the current page to be ignored as well. Hence the YAFFS2 mounted file
would get corrupted (if this happens to be some of the core android
jar files then it would result in android boot being stuck).
The latest YAFFS2 code ignores reading the ecc portion of the struct (12
bytes) from OOB.(YAFFS2 any way does not calculate the ECC and is handled
by the MTD driver). This way we only read 16 bytes from OOB which is
less than oobavail and hence fixes the issue.
Hope this helps you.
Regards,
Sudeep