Q&A 게시판에 질문을 남기신 글에 대한 답변/덧글/쪽글에 대한 Push 메일 서비스를 받고자 하시는 분들은 ☞ Push 메일 서비스 공지를 필독하시기 바랍니다.
[문의] Target에 yaffs2를 적용하는 방법
ㆍ작성자
ㆍ작성일
2008-11-14 (금) 11:11
ㆍ추천: 0 ㆍ조회: 14451
ㆍIP: 61.xxx.221
ARM926EJ-S Board에 YAFFS2를 적용하고자 합니다. 제가 생각하는 방법이 맞는지요? 1. Full Source를 받아서 build한다. yaffs2가 적용된 filesystem image(system.img, userdata.img)가 생성된다.(mkyaffs2image 실행파일로 생성됨) 2. bootloader(u-boot)에서 NAND Flash의 1'st partition에 system.img를 write하고, 2'nd partition에 userdata.img를 write한다. 3. kernel에 nand driver와 yaffs2 file-system을 적용해서 build한다. 4. kernel을 booting한다. zImage가 실행되면서, ramdisk가 root fs로 적용되어 ramdisk.img를 mount한다. ramdisk에 있는 init이 init.rc를 실행되면서 system 폴드가 mtd 1'st partition에 mount하고, data 폴드가 mtd 2'nd partition에 mount된다.
Target에 yaffs2를 적용하신 분의 고견을 듣고자 합니다. 수고하세요!
바로 Test를 해보았는데, 문제가 있는것 같습니다.
우선은 init.rc에서 mount가 정상적으로 수행되지 않습니다.
======================================================================================
....
init: mtd partition 0, system init: mtd partition 1, userdata init: mtd partition 2, cache init: mtd partition 3, free_disk yaffs: dev is 32505856 name is "mtdblock0" yaffs: passed flags "" yaffs: Attempting MTD mount on 31.0, "mtdblock0" init: command 'mount' r=-1 init: command 'mount' r=-1 yaffs: dev is 32505857 name is "mtdblock1" yaffs: passed flags "" yaffs: Attempting MTD mount on 31.1, "mtdblock1" init: command 'mount' r=-1 init: command 'chown' r=-30 init: command 'chmod' r=-30 yaffs: dev is 32505858 name is "mtdblock2" yaffs: passed flags "" yaffs: Attempting MTD mount on 31.2, "mtdblock2" yaffs_read_super: isCheckpointed 0 init: command 'mount' r=0
....
============================================================================================
이제부터 몸으로 때워야 할 시간인가 봅니다.
혹시 제가 빠뜨린 부분이 있으면, 많은 조언 부탁드립니다.
인베인
2008-11-14 18:23
해당 타겟보드의 MTD Block 구간을 yaffs2으로 파티셔닝후에 그 방에 android rootFS을 복사하신후 간단히 리부팅하여 사용하시면 됩니다. 파일시스템 개발은 다소 어려우나, 만들어진것을 사용하는 것이 조금만 더 몸으로 떼우시면 꼭 성공하시리라 봅니다. ^^
khjung
2008-11-14 19:45
인베인님!
답변 감사합니다.
root file-system은 ramdisk를 사용하고, system과 data 폴드만 yaffs2를 적용할 생각입니다.
MTD Block구간을 yaffs2로 partition한 후라고 하시면, ramdisk로 먼저 booting한 후에
mkyaffs2(yaffs utility) 같은 명령으로 /dev/mtdblock0를 포맷해야 한다는 말씀이신가요?
그리고, 포맷후에 system폴드나, data 폴드가 없는데, 어떻게 파일을 복사할 수 있는가요?
약간 이해가 안되는군요!
참고로, Android Full source를 build하면 생성되는 system.img와 userdata.img파일은 어떤
format으로 생성된 image인지 아시나요?
(제 생각에는 yaffs2 format이 적용된 거라고 생각했는데, 제가 잘못 알고 있는건가요?)
답변 주셨는데, 질문이 더 많아져서 죄송합니다.
관심가져주셔서 감사합니다.
수고하세요! (2차 세미나 잘 들었습니다.)
coolguy
2008-11-15 00:21
네. system.img userdata.img는 yaffs2 이미지입니다. mkyaffs툴로 device단 build시 생성됩니다.
mkdir로 디렉토리 만들고, ramdisk에 mount tool(system폴더에 있는 것 사용하면됨)
을넣어 생성 ..그리고 just mount -t yaffs2 ...
khjung
2008-11-15 10:10
조금 이해가 않되는 부분이 있어서 다시 질문드립니다.
JFF2의 경우 mkfs.jffs2라는 host(PC) utility로 특정 폴드 전체를 image로 생성합니다.
그리고, 그 image를 NAND Flash에 Write하고, target을 booting해서 mount하면 바로 특정 폴드의
내용이 그대로 보이며, 사용할수 있습니다.
YAFFS2의 경우도 mkyaffs라는 host(PC) 툴로 특정 폴드(예, system) 전체를 image(system.img)로
생성한 걸로 알고 있습니다. 그럼 이 image(system.img)를 NAND Flash에 wirte한 후에 target이
booting된 상태에서 mount하면, system 폴드의 내용을 모두 사용할 수 있는 것 아닌가요?
Target에서 JFFS2로 mount해서 잘 사용하고 있는데, YAFFS2를 동일한 방법으로 mount하면 Error가 발생합니다.
방법적으로 제가 잘못 이해하고 있는 부분이 있는지요?