u-boot-2012.04.01 이식(11) 야프스 파일 시스템 쓰기 지원 제공

3169 단어 uboot
u-boot jffs2 파일 시스템 쓰기 테스트
쓰기 명령은 다음과 같습니다.
tftp 30000000 fs_mini_mdev.jffs2
nand erase.part rootfs
nand write.jffs2 30000000 0x00260000 $filesize

30000000: 파일 시스템 다운로드의 대상 주소
0x00260000: 파일 시스템이 있어야 하는 플래시 주소
$filesize: 파일 시스템 크기
PS: 파일 시스템을 쓸 때 적절한 파일 크기를 지정해야 하며 파티션 이름으로 쓸 수 없습니다. 그렇지 않으면 파일 시스템의 형식이 손상되어 파일 시스템이 사용할 수 없습니다.
 
파일 시스템을 마운트하기 전에 호스트를 태우고 시작 파라미터를 설정해야 합니다. 파일 시스템 형식은 jffs2입니다.
매개변수 설정은 다음과 같습니다.
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2

 
테스트 결과, u-boot는 jffs2 파일 시스템의 쓰기를 지원하고, 시스템은 jffs2 파일 시스템을 마운트하는 데 성공했습니다.
 
u-boot가 yaffs2 파일 시스템의 쓰기를 테스트하는지 여부
쓰기 명령은 다음과 같습니다.
tftp 30000000 fs_mini_mdev.yaffs2
nand erase.part rootfs
nand write.yaffs 30000000 0x00260000 $filesize

 
쓰기 실패, nand의 읽기와 쓰기 명령은common/cmdnand.c
common/cmdnand.c, yaffs를 검색하면 605 줄로 이동할 수 있습니다. 여기서 yaffs를 지원하려면 매크로 CONFIG 를 정의해야 한다는 것을 알 수 있습니다.CMD_NAND_YAFFS
include/configs/smdk2440.h에서 정의하는 항목:
#define CONFIG_CMD_NAND_YAFFS

 
yaffs2 파일 시스템을 다시 불러옵니다. 쓸 때 오류가 발생하지 않지만 파일 시스템을 마운트할 때 실패합니다.
u-boot-1.1.6을 사용하여 같은 내부 핵과 yaffs2 파일 시스템을 마운트하는데 성공한 것은 yaffs2 파일 시스템의 내용에 문제가 없다는 것을 의미한다. 문제는 u-boot-2012.04.01이 파일 시스템을 flash에 정확하게 쓰지 않았다는 데 있다.
바이너리 텍스트 소프트웨어로 쓰기 내용과 원본 파일 시스템을 비교해 보면 oob 부분의 내용이 일치하지 않습니다 (Notepad++에 플러그인 HexEditor를 추가하면 바이너리로 텍스트를 볼 수 있습니다)
common/cmd 로 돌아가기nand.c:605에서 아래로 분석하면 소문자 호출은 다음과 같다.
			ret = nand_write_skip_bad(nand, off, &rwsize,
						(u_char *)addr, WITH_YAFFS_OOB);

nandwrite_skip_bad 중,
1. 쓰기 모드 설정 오류
//			ops.mode = MTD_OOB_AUTO;
			ops.mode = MTD_OOB_RAW;

2、write_oob 반환값 판단 문장 오류
				rval = nand->write_oob(nand, offset, &ops);
//				if (!rval)
                                if (rval)
					break;

3. 위의 두 가지 오류를 수정한 후에 다시 시험해도 파일 시스템을 마운트할 수 없습니다. 디버깅을 통해 발견된 오류는 다음과 같습니다.
//if (!need_skip && !(flags & WITH_DROP_FFS))   
if (need_skip && !(flags & WITH_DROP_FFS)) 

이렇게 수정한 후에 yaffs2 파일 시스템을 지원했지만 테스트를 통해 jffs2 파일 시스템은 지원되지 않습니다. 두 가지 파일 시스템을 동시에 지원하기 위해 다음과 같이 수정해야 합니다.
/*
	if (!need_skip && !(flags & WITH_DROP_FFS)) {
		
		rval = nand_write (nand, offset, length, buffer);
		printf("there is no bad block\r
", __FILE__, __LINE__); if (rval == 0) return 0; *length = 0; printf ("NAND write to offset %llx failed %d
", offset, rval); return rval; } while (left_to_write > 0) { */ if(!(flags & WITH_YAFFS_OOB)){ if(!need_skip && !(flags & WITH_DROP_FFS)) { rval = nand_write (nand, offset, length, buffer); printf("there is no bad block\r
", __FILE__, __LINE__); if (rval == 0) return 0; *length = 0; printf ("NAND write to offset %llx failed %d
", offset, rval); return rval; } } else while (left_to_write > 0) {

 
 
이로써 u-boot은 jffs2와 yaffs2 파일 시스템의 쓰기를 지원합니다
 

좋은 웹페이지 즐겨찾기