본문 바로가기
프로그래밍/ARM(임베디드)

S5PC100 부트로더, 커널, 파일시스템.(dnw, tftp, nfs,)

by K_Coder 2011. 8. 9.

S5PC100, can-c100
S5PC100, can-c100
S5PC100, can-c100

u-boot.bin
kernel-2.6.29-aesop-RTM10-20110309.tar.gz
can-c100-rootfs-android-20110325.tar.gz



우선. 보드 뒷면 유리판을 보면 하단분에 작은 네모 모양의 구멍이 있습니다.
자세히 들여다 보면 4개의 흰색 핀이 있는데, 이것을 전부 반대로 돌려주셔야 합니다.

dnw 처음 실행한 화면입니다. 제목표시줄을 보면 com,usb 가 x 표시인 것을 볼 수 있습니다.
ADDR은 아마 처음엔 다른 숫자가 적혀 있을 겁니다. 변경할 것이니 무시하세요.


Configuration -> option 선택


115200, com3 선택.
USB Port에 0x27e00000 라고 적어줍니다.


Serial Port -> Connect 선택

성공적으로 연결이 되면 위와 같은 화면이 나타납니다.


아래와 같은 화면이 나온다며. 보시다 싶이 USB 에 x 가 떠있습니다.

USB드라이버가 제대로 잡혀 있는지, 핀을 4개 모두 반대로 돌렸는지 확인 하셔야 합니다.




장치관리자에서 범용 직렬 버스 컨트롤러에서
SEC SOC SMDK Board
USB Serial Converter
포트 에서 USB Serial Port(COM3) 

이 3가지가 모두 있어야 합니다.
SEC SOC SMDK Board 가 없는 경우 USB 에 접속이,
나머지 두개에는 COM3 표시에 영향을 미치게 되어있습니다.

 


정상 접속시 아래 화면을 따라해 주세요.

아무키나 누르신 후 0번을 눌러주세요.



아래 사진은 빼먹고 안찍어서 나중에 찍은 사진이라 제목 표시줄에는 연결되어 있지 않다고 나옵니다. 무시하세요.

USB Port -> Transmit -> Transmit 선택




u-boot.bin 파일 있는 곳을 찾아가서 선택해 줍니다.




이렇게 u-boot.bin 으로 부트가 됩니다.




보시면 아시겠지만, 아래 사진부터는 사진이 다릅니다.
임베디드 코리아의 박길성님의 사진 입니다.
이미 설정된 것이 너무 많아서 차마 날렸다가 다시 하기가.. ㅠㅠㅠ

nand scrub 명령을 이용해서 flash 메모리를 초기화 해줍니다.



dnw 0xc000800 을 입력해 주세요. 해당 SDRAM으로 다운 받는 명령입니다.
주소는 위와 동일하게 적어주세요.
데이타 전송을 위해 기다리는 메시지가 나옵니다.

다시 전송하는 과전을 실행 해줍니다.




다운로드가 끝나고. SDRAM에 다운 받은 데이터를 flash 메모리에 쓰는(복사하는) 과정입니다.
flash 메모리에. 컴퓨터로 따지면 하드디스크에 쓴다고 생각하시면 됩니다.

이유는 잘 모르겠지만, SDRAM에 받았다가 SDRAM에서 flash 메모리에 복사하는 방식으로 사용하네요.


전송이 완료 되었습니다. 보드의 전원을 내고
이제 뒷면의 4개의 핀을 원상태로 복구한 후 사용하시면 (putty, minicom) 위의 모습이 그림처럼
NT-S5PC100# 으로 시작하게 됩니다.


(커널 이미지 만들기).
tar xvzf kernel-2.6.29-aesop-RTM10-20110309.tar.gz
cd kernel-2.6.29-aesop-RTM10

make clean
make ntc100_xwindows_defconfig            (make ntc100_android_defconfig) <- 안드로이드 포팅시.
make zImage

정상적으로 완료되면 현재 폴더 내에서 arch/arm/boot 디렉토리에 zImage 파일이 생성 됨.
또 make 옵션중에 자동으로 /tftpboot 폴더에 zImage-S5PC100 파일로 복사하게 되어 있다.

따라서 tftp 설정을 안해서 해당 폴더가 없는 경우 에러가 발생하지만 상관은 없다.

주의, 실습 중 몇 사람이 컴파일이 제대로 안되면서 커널 이미지 사이즈가 작게 나오는 경우가 있었습니다.
2408448 사이즈가 나와야 정상입니다.


(tftp를 이용해서 커널 부팅하기.)



tftp로 c0008000 위치에 zImage 파일을 받고. 부트 시 c0008000 위치에서 커널 이미지를

읽어서 부팅하라는 2가지 명령을 한번에 작성한 것. ; 전 후로.

saveenv 로 변경한 설정을 저장.





(커널을 flash 메모리에 적재해서 tftp 없이 부팅하기.)


1. tftp로 zImage를 다운. [메모리로 다운로드]

2. nand에 커널 이미지의 위치의 내용 삭제.
[이미 있을지 모르는 커널의 이미지 삭제]

3. 다운 받은 위치에서 커널 이미지의 위치로 쓰기.
[ 메모리에서 nand로 복사 (nand에 저장) ]

4. 부트 시 tftp가 아닌 지정한 위치에서 커널 이미지 불러오기 설정.
[부팅 시 커널 이미지를 지정한 곳에서 읽어 오게 설정]

5. 설정한 내용 저장.
[재부팅 후에도 설정이 남아 있도록 저장.]

기본적으로 위의 위치와 크기들은 정해진 것 입니다.
절대로 함부로 수정하지 마세요. 벽돌 됩니다.



(nfs 이용하기)
cd /nfsroot
tar xvzf RooFS-S5PC100.tar.gz
/nfsroot 폴더에 RootFS-S5PC100.tar 파일 압축을 풀기





minicom에 접속해서 보드를 켜고 5 4 3 숫자가 나오면 엔터를 눌러서 들어 갑니다.



NT-S5PC100# 가 나오면 아래의 명령을 입력해 주세요.

setenv bootargs mem=256M root=/dev/nfs rw nfsroot=192.168.1.15:/nfsroot/RootFS-S5PC100 ip=192.168.1.85:192.168.1.15:192.168.1.1:255.255.255.0::eth0:off console=ttySAC1,115200n81

setenv bootargs mem=256M root=/dev/nfs rw nfsroot=[호스트 시스템 IP 주소]:/nfsroot/RootFS-S5PC100 ip=[타킷 보드 IP 주소]:[호스트 시스템 IP 주소]:[게이트웨이 IP 주소]:[서브넷 릴스크]::eth0:off console=ttySAC1,115200n81

[/nfsroot 는 nfs로 지정해 둔 경로이고, RootFS-S5PC100.tar는 FileSystem 입니다.]

[호스트 시스템 IP 주소]:/nfsroot/RootFS-S5PC100
위에서 [호스트 시스템 IP 주소]: 뒤에는 파일시스템이 있는 경로 입니다.

파일시스템은 당연히 nfs로 지정한 폴더 내에 있어야겠죠?
저는 /nfsroot 폴더를 nfs로 설정해 두었고, RooFS-S5PC100 폴더에 파일 시스템이 들어 있습니다.



(파일 시스템 직점 Flash에 적재해서 부팅하기)
NT-S5PC100# flash_eraseall /dev/mtd2

NT-S5PC100# mount -t yaffs /dev/mtdblock2 /mnt/nand
NT-S5PC100# tar -C /mnt/nand -xf /RootFS-S5PC100

NT-S5PC100# /bin/sync
NT-S5PC100# /bin/umount /mnt/nand
NT-S5PC100# reboot

(재부팅을 한번 해야 완전하게 nand flash에 저장된다.)
다시 카운트가 나올 때 엔터를 눌러서 들어갑니다.

U-Boot 부트 아큐먼트 수정.
NT-S5PC100# setenv bootargs root=/dev/mtdblock2 rootfstype=yaffs2 console=ttySAC1,115200n81
NT-S5PC100# setenv bootcmd nand read C0008000 80000 300000\;bootm C0008000
NT-S5PC100# saveenv
NT-S5PC100# boot