NAND 메모리가 256 MB 인 새로운 Saturn6 보드를 받으면서, 보드를 살리기 위해 삽질했던 것들을 토대로 작성되어졌다.
참고로 나는 새 보드를 받기전에 47LH40-UA 의 Saturn5 기반의 보드를 사용하고 있었다. 새로운 보드에는 아무런 프로그램도 올라가 있지 않은 상태다.
여기서 보드의 부팅 시퀀스에 대해서 알아보자.
부트로더는 boot_1st(small bootloader)와 boot_2nd(u-boot)로 나뉘어져 있다.
nand flash 에 부트로더가 없거나 깨졌을 경우 SPI flash 에 있는 2nd boot 가 동작하게 된다. 물론 nand flash 에 2nd boot 가 있으면 nand flash 에 있는 부트로더가 동작하게 된다.
2nd boot 이미지 내부에 2nd boot size 가 포함되어 있으며, 1st boot 는 그 size 를 가져와서 2nd boot 를 loading 하게 되어 있다.
SPI 굽기
현재 보드는 아무런 프로그램도 없기 때문에, 가장 먼저 해야할 것은 SPI flash 에 부트로더를 write 하는 것이다.
이를 위해서 필요한 것들은 다음과 같다.
- u-boot-spi.bin
- USB-to-RGB Dongle
- http://likewind.org/pds/lge/XP_driver.rar XP_driver.rar (USB-to-RGB Dongle 드라이버 파일)
- http://likewind.org/pds/lge/ISP_Tool.rar ISP_Tool.tar (write 프로그램)
먼저 부트로더를 컴파일하여 필요한 파일(u-boot-spi.bin)을 생성해야 한다. 여기서는 GP2 를 기준으로 설명할 것이다.
$cd work/gp2/os/saturn6_linux/boot/boot_2nd $./mk.sh // 기존의 바이너리 파일을 삭제하고 re-bulid 한다
컴파일 후 생성되는 u-boot-spi.bin 파일은 자동으로 중계서버로 복사된다.
준비한 USB-to-RGB Dongle 을 연결한다. '이때 주의할 점이 있다. 나의 경우, USB 허브에 꽂았을 때, 제대로 동작하지 않고 메인 USB 포트에 꽂았을 때만 제대로 동작하였다. 아마도 전원문제인 것 같다. 따라서 USB-to-RGB Dongle 사용시에는 USB 허브를 빼고 메인 USB 에 USB-to-RGB Dongle 을 꼽는다.'
XP_driver.rar 과 ISP_Tool.tar 을 설치한다.
Front 보드의 RGB 포트에 USB-to-RGB 를 연결하고, ISP_Tool.exe 를 실행한다.
Connect 탭을 누른다.
아래와 같은 창이 뜬다면, 제대로 연결이 된 것이다. 만일 디바이스를 찾을 수 없다는 창이 나오면, 보드 전원을 리셋하거나, PC USB 포트를 뺐다가 다시 꽂아보자!
ISP 프로그램도 재실행 해보자!
write 할 u-boot-spi.bin 파일을 읽어들이기 위해 Read 탭을 누른다. 경로를 지정해주면, 사이즈가 표시된다.
write 하기위해 Auto 탭을 누른다. 아래 화면과 같이 옵션을 설정하고, 'Run' 버튼을 누른다.
write 가 끝나면, 아래와 화면과 같이 'Pass' 가 출력된다.
보드를 재부팅하고 시리얼 케이블을 연결하여, 부트로더가 출력되는 지 확인한다.
에러 대처 방법
재부팅 후에 다음과 같은 문제가 발생할 수 있다. 여러가지 문제가 발생할 수 있지만, 여기서는 내가 직접 겪은 문제에 대해서만 설명하겠다.
ECC Error
SPI 를 다시 write 한다. 또는 최신 부트로더 코드를 빌드하여 다시 write 한다.
Job End Time out
전원을 on 하자마자, 키보드의 'S' 를 누르고 있으면, 부트로더가 출력될 것이다. 이 문제는 nand 에 있는 2dn 부트로더가 깨졌을 때 발생한다.
Nand 굽기
Nand Flash 에 부트로더를 write 해야 한다. 여기서부터는 USB-to-RGB Dongle 이 필요없다. tftp 로 전송하기 때문이다.
앞서, 부트로더 컴파일 시에 생성된 u-boot-nand.bin 파일을 사용한다. 호스트와 타겟을 크로스 케이블로 연결한 상태에서 다음과 같이 명령한다.
mstar # load boot TFTP from server 192.168.0.1; our IP address is 192.168.0.10 Filename 'u-boot-nand.bin'. Load address: 0x82000000 Loading: checksum bad T ###############################checksum bad ################### done Bytes transferred = 255896 (3e798 hex)
Kernel, Rootfs, App 굽기
.epk 파일을 write 하면, kernel, rootfs, app 를 모두 write 할 수 있다. epk 빌드 시, 처음에 한번만, 'y' 선택하여 커널을 재컴파일 한다.
===================================================== Kernel compilation for dvb_saturn6 ===================================================== Would you like to remove linux kernel directory and extract newly? [y/N] y // y 를 입력
위와 같이 처음에 한번 해주는 이유는 '부팅시, nand bed block…. 메세지가 출력되면서, 부팅이 안되는 문제' 를 사전에 방지하기 위함이다.