안녕하세요?
aESOP-S3C6410 보드의 경우 커널의 부트 아규먼트를 uBoot에서 커널로 넘겨줄 수 있습니다.
이외에 보드 환경 설정을 위한 다양한 환경 설정을 uBoot에서 지원 합니다.
따라서, 커널의 재 컴파일 작업이 없이도, 간단하게 커널의 부트 환경 설정을 변경할 수 있습니다.
1. NFS를 이용한 루트 파일 시스템 마운트 방법
최초로 이솝 보드를 받았을 때 NAND Flash에 루트 파일 시스템을 기록하기 위해서 또는 어플리케이션 등을 개발할 때는
NFS로 루트 파일 시스템을 마운트 하여 개발을 진행 합니다.
이 경우, uBoot의 명령 프롬포트에서 다음의 명령을 수행하면, NFS로 루트 파일 시스템을 마운트 합니다.
(해당 환경 설정을 수행하기 이전에, 호스트PC의 /nfsroot 디렉터리에 이솝 보드용 NFS 루트 파일 시스템이 있어야 합니다.)
setenv bootargs console=ttySAC0,115200 root=/dev/nfs rw nfsroot=[호스트PC의 IP주소]:/nfsroot/RootFS-aESOP6410 ip=[타깃 보드의 IP주소]:[호스트 PC의 IP주소]:[게이트 웨이 주소]:[서브넷 마스크]::eth0:off mem=128M ethaddr=[이더넷 컨트롤러의 MAC 주소]
saveenv => 환경 설정을 NAND Flash 저장
boot => 적용한 환경 설정을 가지고 부팅
예)
setenv bootargs console=ttySAC0,115200 root=/dev/nfs rw nfsroot=192.168.1.15:/nfsroot/RootFS-aESOP6410 ip=192.168.1.85:192.168.1.15:192.168.1.1:255.255.255.0::eth0:off mem=128M ethaddr=00:40:5c:26:0a:5b
saveenv
boot
2. uBoot의 IP주소 설정 방법
uBoot에서 호스트 PC의 TFTP를 이용한 다운로드를 하기위한 IP 주소 설정은 다음과 같이 합니다.
setenv gatewayip [게이트 웨이 주소];setenv ipaddr [타깃 보드 IP주소];setenv serverip [호스트 PC IP주소]
saveenv => 환경 설정을 NAND Flash 저장
예)
setenv gatewayip 192.168.1.1;setenv ipaddr 192.168.1.100;setenv serverip 192.168.1.15
saveenv
3. TFTP를 이용하여 리눅스 커널 이미지를 다운로드 한 후 부팅
리눅스 커널 개발 시, 커널을 수정하면서 테스트가 필요할 경우 다음과 같이 옵션을 넣어주면,
이솝 보드는 TFTP를 통하여 리눅스 커널 이미지를 다운로드 받은 후 다운로드 받은 커널 이미지를 가지고 부팅을 수행 합니다.
setenv bootcmd tftp c0008000 zImage-aESOP6410;bootm c0008000
saveenv => 환경 설정을 NAND Flash 저장
4. TFTP를 이용하여 커널을 다운로드 받고 NAND Flash에 기록
다음은 TFTP를 이용하여 리눅스 커널 이미지를 다운로드 받고, 자동으로 다운로드 받은 커널을 NAND Flash에
기록하는 명령 입니다.
tftp 0xc0008000 zImage-aESOP6410;nand erase 60000 200000;nand write 0xc0008000 60000 200000
5. NAND Flash에 저장된 커널로 자동 부팅
다음의 명령을 입력하면, 이솝 보드는 부팅 시 자동으로 NAND Flash에 기록된 커널을 읽어서 부팅을 수행 합니다.
setenv bootcmd nand read C0008000 60000 200000;bootm C0008000
saveenv => 환경 설정을 NAND Flash 저장
6. TFTP를 이용하여 부트로더를 다운로드 받고 NAND Flash에 기록
부트로더가 수정되었거나, 교체가 필요할 경우 다음의 명령을 입력하면, 부트로더를 다운로드 받고 이것을
자동으로 NAND Flash에 기록 합니다.
tftp 0xc0008000 uBoot-aESOP6410.bin;nand write 0xc0008000 0 30000
7. NAND Flash에 저장된 루트 파일 시스템을 마운트 하여 부팅
루트 파일 시스템이 NAND Flah에 저장되어 있을 경우 부트로더에서 다음의 옵션을 입력하면, NAND Flash에
저장된 루트 파일 시스템을 마운트하여 부팅 합니다.
setenv bootargs root=/dev/mtdblock3 rootfstype=yaffs2 console=ttySAC0,115200
8. NAND Flash에 루트 파일 시스템을 기록하는 방법
제공 되는 이솝 보드용 NFS 루트 파일 시스템으로 부팅을 수행 한 후, 다음의 명령을 이용하여 NAND Flash에
루트 파일 시스템을 기록할 수 있습니다. (NAND Flash 기록된 루트 파일 시스템으로 부팅하려면 7번을 참조하세요.)
# NFS로 부팅한 리눅스 프롬포트에서 수행
flash_eraseall /dev/mtd3
tar -C /mnt/nand -xf ~/RootFS-aESOP6410.tar
sync
umount /mnt/nand
nand flash를 rootfs로 사용하려면 몇가지 수정이 필요합니다.
1. 일단 kernel의 MTD 크기를 조정해야 합니다.
MTD의 kernel영역이 0x60000~0x200000 (크기:0x1A0000)로 되어 있는데,
kernel의 실제 크기가 0x1A0000를 넘기 때문에 그냥 nand에 write하면 kernel이 깨져 버립니다.
(이거 아는데 무지 오래 걸렸네요..T_T)
/opt/linux-2.6.21.5-aesop6410-090320/arch/arm/plat-s3c24xx/common-smdk.c파일을 열어서
160줄의 256을 384로 수정하고,
165줄의 256을 384로 수정하고,
166줄의 앞에 2를 3으로, 뒤의 256을 384로 수정한 후.
make를 새로 해서 커널을 다시 올립니다.
정상적으로 수정이 되었다면 커널 부팅시 중간에 MTD관련 메시지가 아래처럼 바뀝니다.
................ 변경전 ................
0x00000000-0x00040000 : "Bootloader"
0x00040000-0x00200000 : "Kernel"
0x00200000-0x10000000 : "File System"
................ 변경후 ................
0x00000000-0x00060000 : "Bootloader"
0x00060000-0x00300000 : "Kernel"
0x00300000-0x10000000 : "File System"
2. 위에있는 8번의 명령중 한줄이 빠졌습니다.
flash_eraseall /dev/mtd2
mount -t yaffs2 /dev/mtdblock2 /mnt/nand
tar -C /mnt/nand -xf RootFS-aESOP6410.tar.gz
sync
umount /mnt/nand
여기까지 하시면 nand에 write를 성공한 것입니다.
참고로 RootFS-aESOP6410.tar.gz은 새로 만드셔야 합니다.
크기가 너무 커서 nand에 올릴수가 없거든요.
저는 /usr/share랑 /usr/lib를 거의 다 지웠습니다.
그리고 host에서 만들때 tar옵션에서 z를 붙이면 안되더군요.
busybox의 tar는 gzip을 지원하지 않아서 그런가 봅니다.
3. 이제 위의 7번 명령을 약간 수정하시면 됩니다.
setenv bootargs root=/dev/mtdblock2 rootfstype=yaffs2 console=ttySAC0,115200
저만 삽질 한건지도 모르지만 혹시나 다른곳에서 삽질하고 계시는 분에게 도움이 되길 바랍니다.^^