보통 Nand에 kernel 등을 업데이트 할 때는 

부트로더의 부트커맨드 모드에서 tftp 나 usb등을 통해 

RAM의 특정 영역에 이미지를 다운로드 받아 부트로더의(u-boot) 

nand 유틸을 통해 nand erase & nand write 를 하게 되는데요.


피치 못할 사정으로, 커널 부팅 후 커널을 업데이트 해야 되는 경우도

있을 것 같아서, 커널 부팅 후 이미지 업데이트를 하는 방법을 올립니다.


준비물은 타겟 보드에 업데이트 할 Kernel Image 파일

mtdinfo, flash_erase, nandwrite 유틸리티 입니다.



일단 부팅 후 커널영역으로 잡힌 mtd 파티션을 확인합니다.

(보통은 커널 영역을 이미 알고 있겠지만 확인해봅니다)

# mtdinfo

Count of MTD devices:           6

Present MTD devices:            mtd0, mtd1, mtd2, mtd3, mtd4, mtd5

Sysfs interface supported:      yes



(예제에서의 커널 영역은 mtd1 로 잡혀있습니다.)


# mtdinfo /dev/mtd1

mtd1

Name:                           kernel

Type:                           nand

Eraseblock size:                131072 bytes, 128.0 KiB

Amount of eraseblocks:          64 (8388608 bytes, 8.0 MiB)

Minimum input/output unit size: 2048 bytes

Sub-page size:                  512 bytes

OOB size:                       64 bytes

Character device major/minor:   90:2

Bad blocks are allowed:         true

Device is writable:             true


mtd1 파티션을 초기화 합니다.


# flash_erase /dev/mtd1 0 1

Erasing 128 Kibyte @ 0 -- 100 % complete 


mtd1 파티션에 kernel 이미지를 write 합니다.


# nandwrite -n -p /dev/mtd1 /mnt/nfs/uImage

Writing data to block 0 at offset 0x0

:

:

Writing data to block 26 at offset 0x340000