네비게이션 기기(UB-5)에 임베디드 리눅스 올리기

쓰레기통에 버려진 네비게이션 기기를 하나 주웠다.
현대유비스 UB-5라는 모델인데 동작은 하는듯 보였다.

[현대유비스 UB-5]

  외부 NTSC 카메라 입력 기능이 있어 영상처리쪽 공부나좀 해볼겸 해서 영상처리용 테스트 보드로 만들어 보기로 했다.

  뭐든 시작은 배를 따는것 부터 한다.
배 따고 EMI차폐용 철판 들어내 보니 ARM1176기반의 삼성 S3C6410 ARM 프로세서가 들어가 있었다. 아주 오래전에 잠깐 써본적이 있는 놈이라 좀 수월 할 듯 해보인다.
  보드 여기저기 JTAG이나 콘솔/디버그 UART용으로 할당 되어 있을 법한 커넥터나 PCB 패턴들을 들쑤셔 찾아낸다.

  JTAG용으로 할당된 PCB패던 뭉치를 찾아내 자작해서 쓰고 있던 'JTAG 핀 분석기'를 물리고 핀맵을 찾아 낸다. 콘솔용 UART 패턴도 찾아내어 기본 펌웨어에서 뭐라그러는지 함 봐준다. 기본 펌웨어에서 뿌려주는 메시지중에 일부는 리버스엔지니어링시 중요한 정보나 단서를 제공 할 수 있으니 예의상 함 읽어봐 주고 저장해 놓는다.
  역시 자작해서 쓰고 있는 'USB-JTAG'하드웨어를 물려주고 S3C6410용 OpenOCD 스크립트를 입수해 CPU 제어권을 잡아 본다. 역시 툴이 좋으니 일사천리로 일이 된다. 움하하...
  기본 저장된 펌웨어를 모조리 덤프받아 백업해 놓고 자작한 부트로더를 올린다.
자작한 부트로더가 일단 올라가면 JTAG연동은 필요 없으니 외부에 콘솔용 UART포트만 뽑아 준다.

[콘솔용 UART포트 인출]

  보드에 USB-OTG 커넥터가 부착되어 있으나 케이스에 구멍이 없어 구멍도 같이 뚫어 주었다. 리눅스 커널 보낼려면 필요하다.
  아주 손쉽게(?) S3C6410 기반의 UB-5 보드용 임베디드 리눅스 커널을 빌드하고 파일시스템 꾸며주고 런타임라이브러리 올려주고 등등 작업후 부팅해본다.

[리눅스 커널 포팅 및 부팅 확인]

잘 되는군....
터치스크린 사용을 위해 tslib를 올려 캘리브레이션을 해본다.

[tslib포팅 및 캘리브레이션]

터치 캘리브레이션 했으니 되는지 확인해 본다.

[터치스크린 테스트]

역시 잘 되는군...
CPU 성능이 좋으니 이번엔 SDL대신 QTE를 올려봤다.
QTE 런타임 라이브러리 용량이 줄이고 줄여도 약 30MB정도로 상당하다. 임베디드 환경에서 30MB는 좀 큰 편이다.
내장된 1GB NAND를 파티셔닝해서 tslib와 QTE 런타임라이브러리를 올리고 리눅스 부팅시 마운팅되도록 한다.

[QT 어플리케이션 테스트]

tslib에서 캘리브레이션된 데이터와 연동되어 QT에서 위치도 잘 잡힌다.
역시 잘된다.
모든게 순조롭다. 난 역시 대단해. 움하하...

이제 내장된 NTSC 디코더 칩을 사용해봐야 한다. 리눅스 커널에서 잘 잡히질 않는다.
다시 배 따고 디코더 칩 외부 IO가 정상적인지 스코프로 확인해 본다.
전원도 잘 들어가고 I2C 신호는 뜨는데 I2C 통신에 응답을 하지 않는다.
근처에 있는 음원칩에 대해서도 I2C가 응답을 하지 않는다. 뭐지??
모든 어드레스에 대해 I2C 스캔을 해봤는데 엉뚱한 어드레스에서 응답을 한다.
뭔가 했더니 CPU 옆에 붙어있던 DMB 수신 칩에서 응답을 한 모양이다.
DMB 수신칩 데이터 시트가 없어 관심이 없었는데 요놈이 응답을 하는걸 보니 I2C버스도 잘 동작하는듯 한다. 그런데 비디오/오디오 칩만 응답을 하지 않는다.

카메라 연동이 되어야 영상처리용 테스트 보드가 되는데...

UB-5 네비게이터 메뉴얼을 찬찬히 보니 외부 AV입력단자가 있고 영상과 음성을 4핀용 오디오 잭으로 받고 있도록 구성되어있다.
외부 AV입력 핀에서 유입된 신호로 비디오와 오디오 칩이 파손된 듯 하다.
AV가 안되서 버린 물건인듯 하다.
원본 롬으로 복원해서 진짜로 안되는지 확인해 봐야 하는데, 아...
귀찮다.

그냥 고장난걸로 보고 포팅된 리눅스나 가지고 놀아야 겠다.