참고로 아래 Pseudo 코드는 같은 크기(nofBlocks)의 NAND 파티션 src에서 dst 파티션으로 복사하는 루틴입니다
각종 NAND 플래쉬 관련 I/O를 담당하는 가칭 KldpNand 클래스를 디자인해 놓으면 편리할 듯 합니다.
... 생략 ...
bool KldpNand::copy(uint8 dst, uint8 src, uint32 nofBlocks){
KldpNand::seek(src, 0, SEEK_SET);// src 파티션 처음으로 이동
KldpNand::seek(dst, 0, SEEK_SET);// dst 파티션 처음으로 이동
KldpNand::erase(dst);// dst 파티션을 모두 지움for(uint32 i =0; i < nofBlocks && j < nofBlocks; i++){for(int32 k =0; k < MAX_PAGES_IN_BLOCK; k++){
BAD 블럭을 skip 하면서 소스 데이터를 src 파티션에서 read 해야함.
BAD 블럭을 skip 하면서 소스 데이터를 dst 파티션에 write 해야함.
}
ratio =(int32)(((float)i / nofBlocks)*100);
notifyProgress(ratio);// 복사율이 필요한 쓰래드로 알려주어 사용자에게 표시하도록 함.}return 성공 또는 실패;}
... 생략 ...
cp/mv를 사용하면서 복사율 표시는...
군더더기가 만을 듯 하군요...
그냥 직접 복사하는 방법을 강구하는 것이 좋을 듯합니다.
참고로 아래 Pseudo 코드는 같은 크기(nofBlocks)의 NAND 파티션 src에서 dst 파티션으로 복사하는 루틴입니다
각종 NAND 플래쉬 관련 I/O를 담당하는 가칭 KldpNand 클래스를 디자인해 놓으면 편리할 듯 합니다.
모두들 행복하세요~
오..좋은 댓글 달아주셔서 정말감사드립니다. 이런
오..좋은 댓글 달아주셔서 정말감사드립니다.
이런 생각을 미처못했네요.. 다시 한번 감사드립니다.
dd 를 써보시는 것도 괜찮을 것 같은데요. help
dd 를 써보시는 것도 괜찮을 것 같은데요.
help 보시면 진행률 표시방법을 보실 수 있습니다.
직접 cp,mv를 구현하거나 dd를 쓰는 것은
직접 cp,mv를 구현하거나 dd를 쓰는 것은 prototype을 만들기 위해 해볼만 하지만,
실제 product를 만든다면, recursive copy/move, cyclic reference 등을 방지하기 위해, 기존 cp/mv를 쓰는 것이 바람직합니다.
그나마 나은 방법은 busybox에 있는 cp, mv를 고쳐서 쓰는 것이 좋을 듯 합니다. 개인적으로 실제로 그렇게 만든 적이 있습니다. busybox 소스에서 아래 파일만 손보면 될 듯 하니, 참고하세요:
coreutils/cp.c
coreutils/mv.c
libbb/copyfd.c
libbb/copy_file.c
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기