2011년 12월 02일
요즘은 dd 명령으로 mtd 장치들을 쓸 수 있게끔 하는 작업을 하고 있습니다.
분명히 이전에 만든 제품은 dd명령으로 부트로더, 커널 등을 업데이트 했었는데, 새로 만든 제품에서는 이 기능이 동작하지 않고 있습니다.
전원을 내렸다
올립니다.
... 중략 ...
Creating 3 MTD partitions on "NAND 1GiB 3,3V 8-bit":
...중략...
이런 로그가 찍힙니다.
반드시 이 로그는 커널 소스코드 내에 있을 것입니다.
grep 신공을 펼쳐서 커널 코드를 찾을겁니다.
키워드는 Creating, partitions 그리고 Bootloader, Kernel 입니다.
....
....
....
아하!
여기 있었군요..
...중략...
내 타겟보드에는 S3C6410 이 들어가 있는데 경로는 s3c24xx입니다.
6410으로 폴더 만드는 것이 어렵나요?
이건 여기 linux/drivers/mtd/maps/ 디렉토리 안에다가 정의를 하셨어야죠.
찾기 어렵잖아요.
숨바꼭질을 종료하겠습니다.
다음으로 struct mtd_partition 파일이 어디에 선언되어있는지 찾아봅시다.
리눅스 크로스 레퍼런스(http://lxr.linux.no) 에서 찾습니다.
...
...
...
여기 linux/include/linux/mtd/partitions.h 파일에 선언되어 있군요.
이렇게...
struct mtd_partition {
char *name; /* identifier string */
u_int32_t size; /* partition size */
u_int32_t offset; /* offset within the master MTD space */
u_int32_t mask_flags; /* master MTD flags to mask out for this partition */
struct nand_ecclayout *ecclayout; /* out of band layout for this partition (NAND only)*/
struct mtd_info **mtdp; /* pointer to store the MTD object */
};
저 위에 적어놓은 파일을 보니 mask_flags = MTD_CAP_NANDFLASH 라고 되어 있습니다.
MTD_CAP_NANDFLASH가 뭔지 볼까요?
여기 linux/include/mtd/mtd-abi.h 파일에 정의되어 있습니다.
//Some common devices / combinations of capabilities
#define MTD_CAP_ROM 0
#define MTD_CAP_RAM (MTD_WRITEABLE | MTD_BIT_WRITEABLE | MTD_NO_ERASE)
#define MTD_CAP_NORFLASH (MTD_WRITEABLE | MTD_BIT_WRITEABLE)
#define MTD_CAP_NANDFLASH (MTD_WRITEABLE)아하! MTD_WRITEABLE 이 들어가 있군요.
NAND Flash 메모리의 파티션에는 MTD_CAP_NANDFLASH 라고 마스킹 해 주면 쓰기 가능이 되나 봅니다.
이제 테스트만 해 보면 되겠죠.
오늘은 시간이 없으니, 테스트는 다음주에 ㄷㄷㄷㄷㄷㄷ