도와주세요!!
글 수 15,339
2008.09.30 23:40:16 (*.79.132.23)
11674
안녕하세요
EZ-2410을 사용하고 있습니다.
User program에서 NAND flash에 data를 쓰는 방법에 대하여 질문 올립니다.
(부팅이 된다음 WEB이나 CLI에서 Kernel image를 update하는 방법에 대한 질문입니다.)
MTD driver를 올린 다음에 nor flash인 경우에는 open("/dev/mtd0")해서 ioctl로 erase후 write()함수를 호출하면 쉽게 write가 되었었는데요
NAND flash는 이렇게 하면 안된다는 것을 알게되었습니다.
아직 NAND flash에 대한 개념이 부족하지만 늘상 그렇듯이 시간에 쫓기다 보니 여기에 글을 남깁니다.
가장 원하는 것은 부팅이 된다음 WEB이나 CLI(application)에서 Kernel image를 update하는 simple code를 구하고 싶네요 ^^;
(Kernel image는 mtd0에 있습니다)
그렇지 않다면 아래에 대한 간단한 답변 부탁드립니다.
강좌를 좀 읽어보니 배드 블럭이 검출된 블럭은 절대로 쓰거나 지우지 말아야 한다. 라고 되어 있길래 우선 이미지를 write할 경우 MTD 파티션의 블럭마다 ioctl(fd, MEMGETBADBLOCK, &offset);를 호출하여 bad block이 있으면 ioctl( fd, MEMERASE, &erase)를 하지 않도록 했습니다.
1. 위와 같이 하는 것이 맞는가요? 아니면 지울필요 없이 바로 write를 하면 되는것인지요?
2. 일단 16K의 값만 write를 한 후(write(buf,16384)) nanddump를 이용하여 출력을 했는데 OOB Data 영역의 값이 boot에서 write 했을 때와 틀립니다.(boot에서 썼을때는 모두 FF)
또한 중간중간의 값이 약간씩 틀리게 되는데요. NAND flash에 write할때 OOB 관련된 부분도 같이 써줘야 하는것인지요? (아직 OOB의 개념을 잘 모르겠습니다. 간단한 설명 또는 레퍼런스할 사이트를 부탁드립니다.)
EZ-2410을 사용하고 있습니다.
User program에서 NAND flash에 data를 쓰는 방법에 대하여 질문 올립니다.
(부팅이 된다음 WEB이나 CLI에서 Kernel image를 update하는 방법에 대한 질문입니다.)
MTD driver를 올린 다음에 nor flash인 경우에는 open("/dev/mtd0")해서 ioctl로 erase후 write()함수를 호출하면 쉽게 write가 되었었는데요
NAND flash는 이렇게 하면 안된다는 것을 알게되었습니다.
아직 NAND flash에 대한 개념이 부족하지만 늘상 그렇듯이 시간에 쫓기다 보니 여기에 글을 남깁니다.
가장 원하는 것은 부팅이 된다음 WEB이나 CLI(application)에서 Kernel image를 update하는 simple code를 구하고 싶네요 ^^;
(Kernel image는 mtd0에 있습니다)
그렇지 않다면 아래에 대한 간단한 답변 부탁드립니다.
강좌를 좀 읽어보니 배드 블럭이 검출된 블럭은 절대로 쓰거나 지우지 말아야 한다. 라고 되어 있길래 우선 이미지를 write할 경우 MTD 파티션의 블럭마다 ioctl(fd, MEMGETBADBLOCK, &offset);를 호출하여 bad block이 있으면 ioctl( fd, MEMERASE, &erase)를 하지 않도록 했습니다.
1. 위와 같이 하는 것이 맞는가요? 아니면 지울필요 없이 바로 write를 하면 되는것인지요?
2. 일단 16K의 값만 write를 한 후(write(buf,16384)) nanddump를 이용하여 출력을 했는데 OOB Data 영역의 값이 boot에서 write 했을 때와 틀립니다.(boot에서 썼을때는 모두 FF)
또한 중간중간의 값이 약간씩 틀리게 되는데요. NAND flash에 write할때 OOB 관련된 부분도 같이 써줘야 하는것인지요? (아직 OOB의 개념을 잘 모르겠습니다. 간단한 설명 또는 레퍼런스할 사이트를 부탁드립니다.)