도와주세요!!
사용 ez보드는 S3C2440 입니다.
os는 Linux version 2.6.21-falinux 입니다..
OS까지 다 살아서 부팅완료후, flash 메모리에 커널 이미지(zImage)를 write하려고 하는데, error가 떠서 질문합니다.
OS까지 다 산 상태에서 이미지를 flash 메모리에 write할수 있는 방법좀 알려주시기 바랍니다.
1. flash 파티션은 원래 아래와 같습니다.
0 ~ 2M : falinux boot/config/logo partition
2 ~ 10M : falinux kernel/ramdisk partition
10 ~ 54M: falinux yaffs partition
즉, 2 ~ 10 M영역은 kernel, ramdisk가 같이 있어서 kernel만 write하기 위하여 아래와 같이 분리했습니다.
기존의 mtd0,mtd1,mtd2는 그대로 두고, mtd3,mtd4만 추가했습니다.
kernel/linux/arch/arm/plat-s3c24xx/common-falinux.c
// ------------------------------------------------------------------
// NAND Flash Setup
// ------------------------------------------------------------------
#if 0
#define NUM_PARTITIONS 3
#else
#define NUM_PARTITIONS 5 // 3 개에서 5개로 추가
#endif
//------------------------------------------------------------------------------
// 설명 : 디폴트 파티션 정보
//------------------------------------------------------------------------------
static struct mtd_partition falinux_s24xx_default_nand_part[NUM_PARTITIONS] = {
[0] = {
.name = "falinux boot/config/logo partition",
.offset = 0,
.size = 2*SZ_1M,
.mask_flags = 0,
},
[1] = {
.name = "falinux kernel/ramdisk partition",
.offset = 2*SZ_1M,
.size = 8*SZ_1M,
.mask_flags = 0,
},
[2] = {
.name = "falinux yaffs partition",
.offset = 10*SZ_1M,
.size = 54*SZ_1M,
.mask
},
#if 1 // 2 ~ 10 M 영역을 2 ~ 5M 사이는 kernel영역(mtd3), 5 ~ 10 M 사이는 ramdisk영역(mtd4)로 나눔
[3] = {
.name = "falinux kernel partition",
.offset = 2*SZ_1M,
.size = 3*SZ_1M,
.mask_flags = 0,
},
[4] = {
.name = "falinux ramdisk partition",
.offset = 5*SZ_1M,
.size = 5*SZ_1M,
.mask_flags = 0,
},
#endif
};
2. 부팅완료후 flash영역 나눈것도 정상입니다.
[Wavetc@~]$ cat /proc/mtd
dev: size erasesize name
mtd0: 00200000 00004000 "falinux boot/config/logo partition"
mtd1: 00800000 00004000 "falinux kernel/ramdisk partition"
mtd2: 03600000 00004000 "falinux yaffs partition"
mtd3: 00300000 00004000 "falinux kernel partition"
mtd4: 00500000 00004000 "falinux ramdisk partition"
3. mtd_util이라는 open source를 이용하여 mtd3을 지우고 copy시도중 error발생
--> mtd_util(flash_erase) 삭제 정상
[Wavetc@~]$ ./flash_erase /dev/mtd3
Erase Total 1 Units
Performing Flash Erase of length 16384 at offset 0x0 done
--> copy중 error 발생
[Wavetc@~]$ cp zImage /dev/mtd3
nand_write: Attempt to write not page aligned data
cp: Write Error: Invalid argument
--> mtd_util(flashcp)로 copy시도시 error 발생
[Wavetc@~]$ ./flashcp zImage /dev/mtd3
nand_write: Attempt to write not page aligned data
While writing data to 0x0018d800-0x0018fe10 on /dev/mtd3: Invalid argument
dd if=zImage /dev/mtd3 0 8 대충..이런식으로 해보세요-