안녕하세요.
처음으로 질문을 올리네요
날씨가 점점 더워지고 있네요... 건강 조심들 하시구요.
다름이 아니라. 6410에 MLC NAND를 붙이고 있는 작업을 진행중입니다.
개발환경은 아래와 같습니다.
Board : 자체 제작 보드.
kernel : 2.6.29(자료실에 올라와 있는 커널입니다.)
NAND : K8G8G08U0A
Partition : 5 Partition
Bootloader
Kernel
RootFs(Yaffs2)
Ssytem
userdata
이렇게 나눴고,
Kernal CMDLINE : root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console0
이렇게 설정하였습니다.
mkyaffs2image로 Yaffs2 이미지로 만들어 이미지를 WRITE 했을때 아래와 같은 Kernel panic 현상이 나타납니다.
...............
logger: created 64K log 'log_radio'
oprofile: using arm/armv6
TCP cubic registered
VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5
s3c2410-rtc s3c2410-rtc: hctosys: invalid date/time
yaffs: dev is 32505858 name is "mtdblock2"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.2, "mtdblock2"
yaffs: auto selecting yaffs2
yaffs_read_super: isCheckpointed 0
VFS: Mounted root (yaffs2 filesystem) on device 31:2.
err = 0
Freeing init memory: 136K
Warning: unable to open an initial console.
Failed to execute /linuxrc. Attempting defaults...
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
여러 글들을 읽어봤습니다만,
아래와 같이 여러가지의 케이스가 있는것 같습니다.
1) mtdblock2가 제대로 마운트 되지 않음.
2) yaffs2 image가 잘못 만들어짐.
이중에 제가 의심이 되는 부분이 2)번인것 같습니다.
제가 사용하고 있는 NAND는 2K Page에 64 Spare를 갖고 있는 놈인데요. 현재 8bit ECC(H/W)를 사용하고 있습니다.
eccbyte가 13으로 설정이 되어 있고, total 52byte를 사용하게 되더군요.
이렇게 되면, total 64 byte중 52 byte를 사용하게 되고, yaffs2 image의 tag 정보가 28byte라서, oob 영역에 겹쳐져서 써지는게 맞는것 같은데, 기존의 mkyaffs2image라는 놈으로 만들어서는 안될것같고 수정이 되어야 할것 같은데, 당췌 어떻게 해야 할지 감이 오지 않습니다.
두번째 질문입니다.
ECC를 8BIT로 사용하게 되면, error가 발생하지 않습니다만, 4bit로 하게 되면 uncorrectabe error가 발생을 합니다.
제가 사용하고 있는 NAND는 꼭 8BIT ECC를 사용하여야만 하는지 궁금합니다.
그럼 잘 부탁드립니다.
물론 수정하면 되긴 할겁니다....^^
MLC nand는 결국 hw에 sw를 두들겨 맞춰야 하는 구조입니다.