사용 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