uboot, kernel, rootfs는 nandflash로 구워져야 한다.
uboot, kernel, rootfs nandflash로 굽는 과정 노트정리
1. SD카드에 uboot 굽기
최초 아무 프로그램이 없는 보드는 SD에 부팅 프로그램을 넣은 후 SD카드 모드로 부팅을 해야 한다.
윈도우에서 IROM_Fusing_Tool 프로그램을 실행해서 u-boot_mmc.bin 파일을 굽는다.
그리고 qtopia.tar.gz 파일을 복사해서 SD 카드로 옮긴다.
이렇게 두 개의 파일을 준비 한 후 SD카드를 보드에 넣은 후.... 컴퓨터와 보드의 시리얼 통신을 위한 케이블을 연결한 후 보드의 전원을 켜고 PC의 리눅스에서 minicom을 실행한다.
그리고 PC에 저장되어 있는 uboot, kernel. rootfs 등을 보드로 넣기 위해서는 보드와 컴퓨터 사이에 USB를 따로 연결해줘야 한다. 시리얼 통신을 위한 케이블과는 별도로 USB를 따로 연결해줘야 하는 것이다.
현재 SD카드를 넣었고, 시리얼 통신을 위한 케이블과 USB 케이블을 연결한 상태이다. 그리고 SD카드로 부팅을 하기 위해서 부팅 모드를 다음과 같이 변경을 한다.
현재 내가 사용하는 보드는 모두 OFF로 하면 SD로 부팅을 하고 6번과 7번을 켜면 NAND로 부팅을 한다. 최초 보드에 아무것도 없는 상태에서는 SD의 도움을 받아야 하기 때문에 사진과 같이 모두 OFF를 했다.
2. minicom 실행
이제 지난 글에서 설치했었던 minicom을 리눅스에서 실행한 후 USB포트 설정을 하고 보드의 전원을 켜보자.
리눅스 컴퓨터에서 minicom을 실행한 모습이다. 현재 보드의 전원이 들어와 있지 않기 때문에 대기 상태를 유지하고 있다. ( <참고> minicom을 종료 할 때는 Ctrl + A를 누른 후 x를 눌러주면 종료 메뉴가 나타나고 yes를 선택해서 종료하면 된다.)
이제 보드에 전원을 넣으면 minicom 모니터에서 3초의 카운트 다운이 시작되는데... 그 3초가 다 지나기 전에 엔터키를 눌러준다. (시간이 너무 짧은 관계로 캡처는 불가능.ㅠ.ㅠ 여튼 전원 넣고 바로 엔터키를 눌러주면 다음과 같이 u-boot 부팅이 시작된다.)
현재 내가 공부하고 있는 보드는 4.3인치의 LCD를 달고 있기 때문에 숫자 1을 눌러서 선택을 한다.
그리고 [f]를 눌러서 Format the nand flash를 진행한 후 [u]를 선택해서 Download u-boot.bin, [k]를 선택해서 Download zImage, [c]를 눌러 Downloadmkfs.cramfs를 진행한 후 마지막으로 [q]를 선택해서 아페서 SD카드에 넣어왔던 qtopia를 굽는다.
(위 과정은 USB를 이용해서 파일을 심을 수 있는 프로그램이 있을 때 진행하는 과정이고... 해당 프로그램이 없을 경우를 대비해서 파일들을 리눅스로 옮겨 놓은 후 tftp 네트워크를 이용해서 진행을 해보려고 한다.)
우선 공부하고 있는 보드와 함께 제공된 CD 에서 u-boot 압축파일을 리눅스로 옮긴다. (u-boot 폴더를 만들고 권한을 부여한 후 파일을 복사해서 옮김)
이제 압축을 해제하고 압축이 풀린 폴더로 이동해보자.(tar xvf s3c-u-boot-1.1.6-Real6410.tar.bz2)
그리고 보드 제작사에서 제공하는 스크립트(make_nand_image / make_mcc_image )로 SD와 NAND에서 부팅 가능한 uboot를 만들어보자. (이때 루트 권한으로 컴파일을 진행해야 한다.)
각각의 스크립트를 실행해서 u-boot.bin과 u-boot_mmc.bin 파일이 만들어졌다. 나는 이 녀석들 중에서 u-boot.bin을 바로 NAND에 올리는 과정으로 진행해보려고 한다.
이제 호스트 컴퓨터에 있는 파일을 보드로 다운로드 하는 과정을 정리해본다. 이렇게 디버깅 중에 호스트에서 보드의 메모리로 파일을 다운로드 할 때는 tftp 서버를 사용하면 될 거 같기는 한데... (처음 해보는 거라서 잘 될지는 모르겠다.ㅎ 일단 해보자.)
우선 tftp 서버를 이용하기 위해서 u-boot.bin 파일을 tftpboot 폴더로 이동을 시켜 놓는다. 그리고 컴퓨터와 보드를 연결해서 minicom을 실행한 후 u-boot 명령줄 상태로 진입하고 e(Exit this menu)를 선택해서 명령줄 상태로 진입한다.
현재 NAND는 포맷을 한 상태이며 명령줄에서 네트워크 명령어를 이용해서 tftpboot 폴더에 있는 u-boot.bin 파일을 가져와서 부팅을 시도해보려고 한다. (그런데 이렇게 하는게 맞는지는 아직 모르겠다.ㅎ)
여하튼 현재 환경 변수를 체크해보기 위해서 printenv 명령을 입력해 보는데...
서버의 아이피 주소가 현재 내 리눅스 IP와 다르기 때문에 다음 명령어를 입력해서 서버 아이피 설정을 다시 하고 ping 테스트를 해본다.
참고 : 만약 여기서 ping failed; host 192.168.x.x is not alive가 출력된다면 serverip, ipaddr, gatewayip 의 앞 세자리 주소가 같은지 확인 해봐야 한다. 즉, 192.168.1... 까지는 무조건 같아야 하는 것이다.
우선 여기까지 공부하면서 노트정리를 했는데.... 다음 글에서는 tftp를 이용해서 보드에 파일을 올리는 과정을 정리하기로 하고 이번 글은 여기서 마무리 한다.