c110의 OneNAND를 u-boot 상에서는 onenand 커맨드를 이용해
onenand read, onenand write, onenand erase 등을 활용해 제어는 가능합니다.
문제는 안드로이드 어플에서 OneNAND의 특정 파티션의 데이터를 얻어갈 필요가 있어서
안드로이드 어플 JAVA layer -> JNI -> C layer -> user space -> char dev -> kernel space 까지 내려와
커널 소스상에서 OneNAND를 제어하려고 합니다.
일주일을 삽질하면서 커널 소스상에서 read/write 는 어떻게 짜맞추긴 했는데
현재 문제가 OneNAND에 write 하기 전에 꼭 erase 를 해줘야하는데...
(erase 안하고 write 할 경우 해당 블럭이 배드블럭 처리가 되어버리네요. T_T)
이 rease 를 커널 소스상에서 처리하지 못해 write를 못하고 있습니다.
mtd-utils을 빌드해 flash_erase 란 툴을 이용하면 커널 MTD driver의 ioctl을 거쳐 OneNAND가 잘 지워지는데
제가 구현해야 하는 환경이 커널에서 OneNAND를 erase 해야하기 때문에
OneNAND를 지우기 위해 필요한 struct erase_info 구조체 내용을 채우지 못해서
onenand_base.c 의 onenand_erase 함수를 호출하면 인자중 NULL point가 있다고
커널 패닉으로 OneNAND의 특정 addr의 한블럭을 지우지 못하고 있습니다.
혹시 커널에서 OneNAND의 특정 블럭을 지우려면 어떤 절차로 구현할수 있는지
커널의 user 영역의 /dev/mtd/mtd0 같은 char nod를 통하지 않고
커널에서만 지울수 있는 방법이 있는지 문의 드립니다.