기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

NAND Flash에 MTD + YAFFS2로 시스템을 구성하였습니다.


그런데 부팅 도중 아래와 같은 Kernel panic 메시지가 출력이 되네요.


yaffs: dev is 32505859 name is "mtdblock3"

yaffs: Attempting MTD mount on 31.3, "mtdblock3"

VFS: Mounted root (yaffs2 filesystem).

Freeing init memory: 168K

Kernel panic - not syncing: No init found.  Try passing init= option to kernel.


출고가 되어 정상적으로 동작을 하던 제품이 어느날 부팅을 하지 않아서 회수한 후에 부팅 로그를 한것입니다.


이런 현상이 지금까지는 없었는데 처음으로 발생을 했네요.


증상만 봤을때는 yaffs2 filesystem영역이 손상된 거 같은데 원인이 뭔지 명확하지가 않네요^^;;


의심이 가는 원인이 있으시다 거나 비슷한 경험을 해보셨다면 조언부탁드리겠습니다.


고도리

2016.08.24 02:17:37
*.200.239.210

파일시스템이 망가진 증상과 유사하네요.


대부분 nand fs나 filesystem이 망가지는 경우는 write때문인 경우가 많습니다.

yaffs2의 경우는 좀 독특한 fs인데, 실제 저장장치에 write시 시간이 걸리는 경우가 있습니다.


이런 케이스에서 전원이 꺼지거나 하면 비슷한 증상이 나옵니다.


아니면 nand자체의 write횟수 제한에 의한 진행성 불량일 가능성도 있습니다.


SpecialCase

2016.08.24 02:57:38
*.177.158.129

답변 감사합니다.


저도 전원이 꺼질 때를 유력한 원인으로 보고 있습니다.

그래서 나름 전원이 꺼질 때 filesystem이 손상되지 않게 하기위해서 yaffs2로 개발을 하였는데 아니었나 보네요.

이런 문제를 보완 및 해결을 하려면 어떤 filesystem 또는 솔루션을 사용하는게 좋을까요?

고도리

2016.08.24 05:17:52
*.200.239.210

예전 후배가 2410을 쓸 때 전원 issue로 비슷하게 깨지는 것을 문의한 적이 있었습니다.

이상하게 특정 경우에 yaffs2가 sync하는데 몇초가 걸리는 경우가 있다라고 하더군요.


파일시스템이 좀 독특하게 구성되어 있는 편이라, 구조까지는 파악을 못했었습니다만, write가 많은 시스템의 경우는 발생하는 것으로 보고 있습니다.

고도리

2016.08.24 05:15:43
*.200.239.210

일단, 해당 nand를 블럭단위로 덤프 떠서 x86이나 가상머신에서 마운트 해 보시기 바랍니다.

(image를 loopback mount해서요)

--> 문제를 파악한다면 이런 방법이겠지만, yaffs2를 일일이 추적해야 하니 이도 큰 일로 보여집니다.


nand가 SLC겠죠? SLC면 그나마 ubi/ubifs 조합이 괜찮은 성능을 보여주기는 합니다만,

커널 버전등 여러가지 문제가 있을 수 있습니다.(되도록이면 나중 커널을 써야 하는.....)


1. 커널 버전이 어떻게 되나요?

2. SLC NAND겠죠?

3. 혹시 cpu는요?


그리고, NAND의 mtd map도 중요합니다. ubi가 나온 이유가 mtd의 wear leveling issue를 fix하기 위해서 나온 이유도 있기 때문입니다.


SpecialCase

2016.08.24 06:16:19
*.177.158.129

1. 커널버전은 2.6.18입니다. 칩제조사에서 초기 배포한 PSP에 있던 커널이라 버전이 낮네요.^^;; 최종으로 지원한 것은 3.3 버전까지 있기는 합니다.


2. NAND는 SLC입니다.


3. CPU는 TI에서 나온 OMAP-L137로 ARM9계열입니다.


mtd map은 다음과 같이 사용하고 있습니다.


0x00000000-0x00020000 : "params"

0x00020000-0x000c0000 : "bootloader"

0x000c0000-0x002c0000 : "kernel"

0x002c0000-0x20000000 : "filesystem"


일단 ubi/ubifs를 사용하는 방향으로 해야겠네요.

고도리

2016.08.24 23:24:37
*.200.239.210

커널버전이 높은 것을 쓰는 것이 좋습니다.


근래, 작업할 일이 있어서 3.x 대의 nand코드를 2.6.2x대로 내리는 작업을 했었습니다.

하면서 보니, nand 코드에 여러가지 방어코드들이 좀 늘었더군요.


ubi/ubifs로 작업하실거면 되도록이면 나중 버전이 좋을 듯 합니다.


참고로, ubi/ubifs는 2.6.25(?)서부터 정식으로 커널에 들어있을겁니다.

List of Articles
번호 제목 글쓴이 날짜sort 조회 수

사용자 로그인