저는 NAND FLASH를 스토리지로 사용하는 임베디드 Linux 시스템(5.10.24)을 개발 중입니다.
NAND FLASH는 4개 부분으로 나누어져 있으며, 0부분은 u-boot용, 1부분은 커널용, 2부분은 UBIFS용, 3부분은 또 다른 UBIFS 파티션입니다.
따라서 Linux가 부팅되면 /dev/mtd0, /dev/mtd1, /dev/mtd2, /dev/mtd3
.
이제 /dev/mtd0
POSIX-C 파일 작업을 통해 (원시 플래시, 파일 시스템 없음)에서 u-boot의 데이터를 읽을 수 있습니다.
그런 다음 /dev/mtd0
.
모든 파일 읽기 및 쓰기 작업은 정상이며 오류가 보고되지 않습니다.
하지만 시스템을 다시 u-boot로 재부팅하면 spi nand read oob error ,ret= -74 , oob addr e0000, ooboffs 0, ooblen 64
.
NAND OOB에 문제가 있는 것 같습니다. 이 오류는 왜 발생합니까? /dev/mtd
인터페이스를 통해 원시 NAND FLASH에 데이터를 쓰는 방법은 무엇입니까?
답변1
NAND 플래시는 쓰기 전에 블록 단위로 지워야 합니다. ioctl
이를 위해 할 수 있는 일이 몇 가지 있습니다 . mtd-utils
다음과 같은 유틸리티를 사용하여 Linux에서 mtd 볼륨과 상호 작용하기 위한 도구 세트 flashcp
입니다 .http://www.linux-mtd.infradead.org/doc/general.html
즉, U-Boot 내에서 mtd 볼륨과 상호 작용하는 가장 일반적인 방법은 이를 U-Boot 환경의 스토리지로 사용하는 것입니다. mtd 볼륨에 직접 쓰는 대신 NAND(모든 체크섬 포함)에 쓰 setenv
십시오 . Linux에서는 등을 saveenv
사용할 수 있습니다 .fw_printenv