일반 덮어쓰면서 카피를 하려고 하는데 덮어쓰기가 안됩니다.
2007.07.13 07:45
MCU : s3c44b0x
Flash : AMD29LV320DB(4Mbyte)
RAM : K4S281632
#cat /proc/mtd
dev: size erasesize name
mtd0: 00100000 00010000 “kernel”
mtd1: 00300000 00010000 “rootfs”
#df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/rom1 3072 1152 1920 40% /
/dev/ram0 1979 7 1972 0% /var
현재 상황
1. 사용하는 영역은 Flash 영역입니다. 파일이 업데이트 될때마다 기존에 파일을 지우고 다시 업데이트된 파일을 써야 합니다.
2. file_a 파일의 크기는 100 ~ 300kbyte 입니다.
3. /var/tmp 는 ram 영역이고 /usr 영역은 flash 영역 입니다.
4. 업데이트 될 파일은 /var/tmp 에 copy 했다가 /usr/ 로 다시 copy 됩니다.
5. copy 는 저희가 동작시키는 Application 파일에서 system 함수를 사용하여
system(“/bin/cp /var/tmp/file_a /usr/file_a”) 이런 식으로 동작 합니다.
6. copy 가 끝난후에는 보드를 reboot 하도록 되어 있습니다.
테스트 방식(현재 디렉토리는 /var/tmp 입니다.)
1. cp ./file_a /usr/file_a 파일의 copy 가 완료되면 명령어 재실행(10번정도하면 보드먹통되고 메시지도 안뜨고 전원리셋후 부팅가능)
2. cp –dpR ./file_a /usr/file_a(실패)
3. rm /usr/file_a; cp ./file_a /usr/file_a(실패)
4. cp ./file_a /usr/file_a; cp ./file_a /usr/file_a; cp ./file_a /usr/file_a….10번반복(문제점 3의 메시지가 가장 많이뜸)
5. 생각이 몇가지 않나는데 이 외에도 여러가지 방법을 다 해보았습니다.
* 모든 테스트 방식은 파일사이즈가 커지거나 커지지 않으면 보드가 먹통이 되어 죽어 버립니다.
문제점
1. 랜덤하게 /var/tmp 에서 /usr/ 로 copy 를 할 때 /usr/ 로 옮긴 파일의 사이즈가 무한정 커집니다. 아래의 상황을 참조해 주시기 바랍니다.
#df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/rom1 3072 1152 1920 100% /
/dev/ram0 1979 7 1972 0% /var
2. 사이즈를 확인해보면 일반적으로 랜덤 하지만 최대 400Mbyte 까지 커져있는 것을 확인 하였습니다.
#ls –l /usr/file_a
-r-xr-xr-x 1 0 0 413126313 file_a
3. 아래와 같은 메시지가 뜨면서 보드가 죽을때도 있습니다.
jffs2_reserve_space_gc of 196 bytes for garbage_collect_dnode failed: 203653120
Flash : AMD29LV320DB(4Mbyte)
RAM : K4S281632
#cat /proc/mtd
dev: size erasesize name
mtd0: 00100000 00010000 “kernel”
mtd1: 00300000 00010000 “rootfs”
#df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/rom1 3072 1152 1920 40% /
/dev/ram0 1979 7 1972 0% /var
현재 상황
1. 사용하는 영역은 Flash 영역입니다. 파일이 업데이트 될때마다 기존에 파일을 지우고 다시 업데이트된 파일을 써야 합니다.
2. file_a 파일의 크기는 100 ~ 300kbyte 입니다.
3. /var/tmp 는 ram 영역이고 /usr 영역은 flash 영역 입니다.
4. 업데이트 될 파일은 /var/tmp 에 copy 했다가 /usr/ 로 다시 copy 됩니다.
5. copy 는 저희가 동작시키는 Application 파일에서 system 함수를 사용하여
system(“/bin/cp /var/tmp/file_a /usr/file_a”) 이런 식으로 동작 합니다.
6. copy 가 끝난후에는 보드를 reboot 하도록 되어 있습니다.
테스트 방식(현재 디렉토리는 /var/tmp 입니다.)
1. cp ./file_a /usr/file_a 파일의 copy 가 완료되면 명령어 재실행(10번정도하면 보드먹통되고 메시지도 안뜨고 전원리셋후 부팅가능)
2. cp –dpR ./file_a /usr/file_a(실패)
3. rm /usr/file_a; cp ./file_a /usr/file_a(실패)
4. cp ./file_a /usr/file_a; cp ./file_a /usr/file_a; cp ./file_a /usr/file_a….10번반복(문제점 3의 메시지가 가장 많이뜸)
5. 생각이 몇가지 않나는데 이 외에도 여러가지 방법을 다 해보았습니다.
* 모든 테스트 방식은 파일사이즈가 커지거나 커지지 않으면 보드가 먹통이 되어 죽어 버립니다.
문제점
1. 랜덤하게 /var/tmp 에서 /usr/ 로 copy 를 할 때 /usr/ 로 옮긴 파일의 사이즈가 무한정 커집니다. 아래의 상황을 참조해 주시기 바랍니다.
#df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/rom1 3072 1152 1920 100% /
/dev/ram0 1979 7 1972 0% /var
2. 사이즈를 확인해보면 일반적으로 랜덤 하지만 최대 400Mbyte 까지 커져있는 것을 확인 하였습니다.
#ls –l /usr/file_a
-r-xr-xr-x 1 0 0 413126313 file_a
3. 아래와 같은 메시지가 뜨면서 보드가 죽을때도 있습니다.
jffs2_reserve_space_gc of 196 bytes for garbage_collect_dnode failed: 203653120
댓글 4
-
장길석
2007.07.13 19:37
/var/tmp 에 있는 file_a 의 크기는 어떻게 되나요? -
teddykim
2007.07.13 20:48
안녕하세요 장길석님 읽어주셔서 감사합니다. 현재상황 2번에 적혀 있습니다. -
장길석
2007.07.14 00:13
아이쿠 죄송합니다. 2번의 file_a 를 file로 읽었네요. 죄송합니다.
다시 알아 볼겠요....^^ -
장길석
2007.07.14 01:28
이걸 어쪄죠. 제가 알고 있는 유일한 희망인 아무개씨가 글을 쭈욱 보시더니
"어려운데요. --" 딱 한마디 하시네요.
참고로 그 아무개씨도 jffs2를 사용했다가 무척 고생하셨다고 합니다.
그래서인지 몰라도 FALINUX에서는 yaffs를 사용하더군요.
지금은 바로 답을 못 올립니다만 계속 알아 보도록 하겠습니다.
답변이 조금 늦더라도 양해를 부탁드립니다.



