Qt/S60 베타로 프로그램 짜 보기

기존에 Qt로 프로그램을 짜 봤다면 Qt/S60을 쓸 수 있다는 게 얼마나 흥분되는 일인지 알 수 있다. Qt/S60은 트롤텍이 노키아에 인수된 후부터 활발히 개발된 Qt 포트이다. 윈도, 맥 OS X, (임베디드) 리눅스 이외 기종으로 제일 처음 나온 포트는 윈도 모바일이지만, 노키아에 인수당한 이후 윈도 모바일용 Qt보다는 Qt/S60에 더 많은 신경을 쓰고 있음을 알 수 있다. 마에모도 Qt로 전향할 예정인데다가, 든든한 데스크톱 우군 KDE가 버텨 주고 있어서 지금 안드로이드나 아이폰에 부화뇌동하느니 Qt 프로그래밍을 익혀 두는 것도 몸에 나쁘지는 않을 것이다.

Qt의 모토는 Code Less, Create More, Deploy Anywhere다. 노키아 인수 전까지는 앞 두 마디만 사용했으며, 노키아가 Qt 로고를 현재처럼 바꾼 이후 Deploy Anywhere가 같이 추가되었다. 과연 Qt로 짠 소스 코드가 Deploy Anywhere가 될 수 있을지 한 번 실험해 보기로 했다. 일단 Qt/S60을 구해서 설치해 보자. 2009년 11월 현재 Qt 홈페이지 페인 화면에 Qt/S60 4.6.0 베타 링크가 걸려 있으므로, 일단 이거 SDK를 다운받아 두자. Qt/S60은 S60을 기반으로 움직이므로, 그 까다롭다는 S60 SDK도 같이 설치되어 있어야 한다. Carbide.C++(IDE), S60v3 FP2 SDK, Open C/C++ 플러그인 삼대천왕을 설치하면 된다. 전부 한 덩치 하는 몸이라서 시간이 꽤 걸렸고, 이 순서대로 설치하지 않으면 미묘한 오류가 발생한다. 설치를 마음대로 했다가 3시간을 삽질하는 일이 없길 바란다.

그 다음 Qt/S60을 설치한다. 깔려 있는 SDK를 자동으로 인식하고 그에 맞는 Qt를 설치해 준다. 설치가 끝난 다음, Carbide.C++ 쪽 환경 변수를 먼저 등록한 다음 Qt/S60 명령 프롬프트를 실행해야 라이브러리 및 컴파일러 경로를 헤매지 않는다. 이것 때문에 1시간을 또 고생했다. 여기까지 잘 왔으면, Qt 명령 프롬프트를 실행시켜서 demos나 examples 폴더로 이동한 다음, qmake-make를 실행시켜서 예제를 빌드해 보고, make run을 통해서 각각 예제를 실행시켜 본다. make 실행 시 기본 타겟은 debug-winscw로, 에뮬레이터를 통해 실행된다. make distclean을 실행시켜 줘야 에뮬레이터에서 흔적이 사라지므로 테스트 후 실행시켜주는 게 좋다. S60 SDK에 내장된 에뮬레이터는 그럭저럭 쓸만하지만, 한글 글꼴이 기본적으로 없다는 건 알아 두어야 한다.

S60 SDK 에뮬레이터

S60 SDK 에뮬레이터

정상 작동을 테스트해 보았으면 기존 Qt 프로그램을 포팅해 보자. QMake를 사용하는 프로젝트라면 아무 무리 없이 Qt/S60으로 포팅 가능하다. 얼마든지 리눅스에서 Qt로 짰던 프로그램을 S60으로 ‘소스 한 줄 고치지 않고’ 포팅 가능하다. 심비안 플랫폼은 모든 실행 파일에 고유 UID가 붙는다. 이게 겹치면 시밤쾅하기 때문에 프로그램을 배포하려면 UID를 따야 한다. 돈 내는 건 없으므로 전문적으로 뭔가를 만들어 보려면 UID를 신청해 보자. 발급받은 UID가 있으면 .pro 파일에 UID를 적어 주고, 없으면 qmake가 테스트용 UID를 만들어 준다. make release-gcce를 내린 다음 make sis라는 명령을 내리면 sis 파일을 만든다. 테스트 인증서로 서명되었으므로, 실제 배포할 때는 인증서 문제를 해결해야 한다. 이 외에도 약 10MB에 달하는 Qt 라이브러리 설치 문제도 신경써야 한다. 현재는 Qt/S60이 베타 단계라서 배포할 때 신경이 거슬리겠지만, 정식 릴리즈가 나온 다음에는 휴대폰 롬에 통합될 수도 있거나 용량이 더 적어질 수도 있다.

현재 Qt 4.6.0 베타는 S60에서 살짝은 껄끄럽게 돌아간다. S60v5는 터치 인터페이스를 지원하지만 S60v3은 위젯을 돌아다닐 때 키패드를 사용해야 하며, 심비안 네이티브 프로그램에 비해서 살짝 멈칫하는 게 느껴진다. FEP도 잘 붙어서 한글 입력도 무리없이 할 수 있다. 대부분의 UI 구성요소는 S60 테마를 그대로 따르므도 생긴 거의 이질감은 전혀 느껴지지 않는다. Qt의 장점은 여기서 드러난다. 오늘 오후동안 짜 본 노래방 검색 프로그램을 휴대폰에서 한 번 돌려 보았다. Qt의 GUI와 SQL 부분을 사용한다. PyS60으로 짜려고 했으나, SQLite 모듈이 없어서 Qt의 SQLite 모듈을 사용하려고 Qt를 사용했다. 아직까지 휴대폰에서 좀 동작이 끊기는 감이 없잖아 있지만, 아직 Qt/S60은 베타 단계이기 때문에 정식 릴리즈가 되면 더 빨라질 가능성이 열려 있다.

Qt/S60 테스트 프로그램

Qt/S60 테스트 프로그램. 한글 입출력도 원활하다.

메뉴, 위젯 모두 이질감이 적다.

메뉴, 위젯 모두 이질감이 적다.

기존에 Qt로 프로그램을 만들어 봤으면 복잡한 S60 C/C++를 배우지 않고도 S60 휴대폰에 프로그램을 바로 올릴 수 있으므로, 뭔가 만들어보고 싶으면 과감하게 도전해 보자.

ps. 노래방 검색 프로그램은 아직 개발 중이며, 역시 아직 개발 중인 Qt/S60 라이브러리를 사용한다. Qt/S60이 정식 출시되는 대로 공개할 예정이다.

N810을 위한 최고의 선물: ExtGPS

노키아 N810의 GPS는 상당히 악명이 높다. GPS의 성능을 결정짓는 데는 여러 변수가 있다. GPS 모듈 그 자체, 안테나 구조, 기존 정보 저장 여부, A-GPS 사용 여부 외에도 더 있을 수 있다. 처음 N810이 나왔을 때에는 A-GPS도 없어서 맨 하늘을 위성 잡느라 다 헤집고 다녔지만, 그나마 A-GPS나오고 난 다음에는 그 시간이 ‘획기적으로’ 줄긴 했다. 그 획기적으로 준 시간이란 게 한국 내비게이션의 시간과 비교하면 좀 상당히 길긴 하지만. 내가 처음 A-GPS를 설치했을 때는 데이터 연결을 통해서 현재 위치에서 잡을 수 있는 위성 신호를 가져온다는 사실을 몰라서 ‘왜 시간이 줄어들지 않나’ 의아해한 적도 있었다.

이 모든 문제점은 외부 블루투스 GPS를 사용하면 해결된다. N810은 실제로 외장 블루투스도 쓸 수 있도록 배려해 두었다. 돈만 있다면 얼마든지 외장형 블루투스 GPS를 사다 연결해도 되지만, 나는 그럴 돈도 없으며 굳이 살 필요성을 못 느껴서 노키아 6210을 블루투스 GPS로 개조시키기로 했다. 일단 휴대폰에 ExtGPS를 설치한다. jar 파일과 jad 파일로 이루어져 있으므로 받아다가 적절하게 설치한다. 실행하면 맨 처음에 각종 보안 경고를 물어보는데, 블루투스와 GPS에 접근하기 때문에 그렇다. 이제 블루투스를 지원하는 기기와 통신을 시도하면 GPS 서비스를 볼 수 있고, GPS 신호를 잡으면 준비가 완료된다. 내 경우 ExtGPS를 종료해도 GPS가 꺼지지 않아서 수동으로 폰을 다시 껐다 켜야 했다.

ExtGPS 작동 화면

ExtGPS 작동 화면. 초기 상태, 블루투스 연결, GPS 신호 잡힌 상태.

N810에 외장 GPS를 연결시키려면 제어판(Control Panel)에 있는 GPS 위치(GPS Location)를 선택한다. N800은 내장 GPS가 없어서 블루투스 GPS만 있겠지만, N810은 내장 GPS와 블루투스 GPS 중 선택할 수 있다. 내장 GPS만 잡혀 있다면 새 장치 추가를 눌러서 블루투스 GPS로 변신한 휴대폰을 추가해 준다. 장치를 페어링할 때는 휴대폰 아이콘만 보이지만, 실제 충분히 GPS 기능을 할 수 있다.
N810 GPS 설정 대화상자

N810 GPS 설정 대화상자

GPS 신호가 잡혔으면 아래의 위치(Location)를 눌러 본다. 내장 GPS와 다름없이 현재 보이는 위성 수 및 위도, 경도, 속도가 표시된다. 노키아 6210의 내장 GPS 데이터 프로그램에서는 위도와 경도를 볼 수 없지만, 단순히 ‘전송’ 기능이 있다고 이 정보를 숨기는 건 눈 가리고 아웅 이상도 이하도 아니다. 얼마든지 차량용 내비게이션은 위도와 경도를 표시해 주며, 북한 핑계를 대는 사람들에게는, 어차피 간첩들은 이렇게 숨기는 노력을 하지 않아도 알아서 정보 잘 빼 가니까 핑계 대지 말라고 전해주고 싶다. 사실 외부 프로그램을 통해서 얼마든지 위도와 경도는 볼 수 있다. 아래 좌표는 집에서 GPS를 잡아 본 것이다. 창가에 걸쳐 두니까 신호가 잡혔다 안 잡혔다를 반복하였다.

N810 GPS 위치 정보

N810 GPS 위치 정보

Maemo Mapper는 노키아 인터넷 태블릿의 업데이트도 잘 안 되는 지도 프로그램의 훌륭한 대안이다. 구글을 포함한 여러 지도 사이트에서 실시간 검색(휴대폰이나 무선 랜 필요) 및 다운로드가 가능하기 때문이다. 아 물론 한국 지도도 잘 지원하므로, 난 이걸 잘 쓰고 있다. 여행 갈 지역의 지도를 미리 저장해 두었다가 표시만 시켜 주면 내비게이션처럼 쓸 수 있다. 경로 표시 및 관리도 지원하므로 나는 철도 여행기를 기록할 때 쓰곤 한다. 이제 Maemo Mapper의 GPS 설정을 잠깐 살펴보자.

Maemo Mapper GPS 설정

Maemo Mapper GPS 설정

블루투스 GPS가 기본값으로 선택되어 있으며, MAC 주소를 적지 않은 경우, N810에서는 기본 내장 GPS를 사용한다. 장치 파일은 GPS 파일을 직접 찌를 수 있으며, gpsd 데몬을 통해서 접근할 수도 있다. 블루투스 GPS를 여기에서 직접 사용하기로 결정했다면, 신호가 잘 잡힐 때에는 괜찮지만 한 번 터널을 들어갔다 나오면 GPS 신호를 잡지 못해서 내장 GPS를 잡으려고 시도한다. 그러다가 외장 GPS 신호가 다시 잡히면 낭패를 왕왕 보곤 한다. 해결책은 장치 파일을 통해서 GPS에 접근하거나, gpsd 데몬을 사용하는 것이다. N810의 gpsd 데몬은 GPS를 사용하는 프로그램이 켜져야 작동하므로, 기왕 gpsd 데몬을 사용하기로 했으면 KML 파일 자동 작성 등의 여러 기능이 있는 minigpsd(Maemo Extras에 있음)를 사용하는 게 좋다. Maemo Mapper에서 gpsd를 사용하기로 했다면 누군가 수동으로 gpsd를 켜 줘야 하는데, N810 기본 프로그램만으로 켜는 방법은 지도를 실행시키거나 제어판에 가는 방법이 전부이다!

여기까지 따라왔다면 Maemo Mapper가 알아서 GPS 위치의 지도를 보여 주며, 지도가 없으면 다운로드하려고 시도한다. 구글 한국 지도를 다운로드하려면, 일단 기본 리포지토리를 다운로드해 둔 다음 mtX.google.com을 mtX.gmaptiles.co.kr로 바꿔 주기만 하면 된다. 대신 이 경우 한국을 제외한 외국 지도가 다운로드되지 않으므로, 사본을 하나 만들어 두면 좋다. 위성 신호가 제대로 잡혔으면 작업 표시줄의 위성 아이콘에 녹색 원호가 그려지며, 블루투스도 당연히 불이 들어온다. 주변 지도가 보였으면 성공한 거니까 밖으로 나가서 원하는 뭐든지 시도해 보자.

N810 Maemo Mapper

N810 Maemo Mapper

노키아 6210에서 KT 흔적 지우기 – 스크린샷

앞서 글의 방법대로 플래싱에 성공했다면 축하한다. 그렇다면, 통신사 설정을 걷어내면 뭐가 달라지는지 보자. 일단 대기 화면부터 뭔가가 다르다.

노키아 6210s 디브랜딩 - 대기 화면

대기 화면. 왼쪽이 오리지널, 오른쪽이 KT 지운 후이다.

KT의 마수 폰꾸미기가 첫 번째 바로 가기에서 사라졌다! 이것 하나만으로도 플래싱을 다시 할 이유는 충분하다. KT에서 파는 벨소리는 MP3 벨이 전부인데다가 대체재는 얼마든지 많고, 본인은 통화연결음을 쓰지 않기 때문에 통화연결음 변경이 없어져도 별로 크게 와닿지는 않는다. 접속하는 모양으로 봐서는 웹 브라우저에서 URL을 띄워도 될 것 같은데, S60 내부 브라우저를 참 영악하게 가지고 놀아서 URL을 볼 수도 없다. 폰꾸미기가 실제로 연결시켜 주는 URL을 아는 사람들의 제보… 라고 써 놓고 strings가 있었지. 나중에 분석해 보자.

메인 메뉴 역시 다르다. 폰꾸미기가 1번으로 나와 있던 게 그 자리에 도움말이 들어가 있다. 휴대폰을 사고 내부 SVG-T 기반 도움말을 보다 보면 첫 메뉴에 도움말이 박혀 있는데, 바로 그 오리지널 구성요소 그대로이다. 폰꾸미기가 단순히 숨은 게 아니라, 아예 사라졌기 때문에 재부팅해도 이 메뉴 구조는 그대로 유지된다. 서드파티 테마를 적용시켰을 때 저 폰꾸미기는 테마 아이콘과 어울리지 못하기 때문에 완전한 천덕꾸러기지만, 이제는 서드파티 테마를 적용시켜도 잘 어울린다.

노키아 6210s 디브랜딩 - 메뉴 화면

메뉴 화면. 폰꾸미기가 사라진 걸 볼 수 있다.

애플리케이션 메뉴로 들어가 보자.여기에도 KT가 친 장난이 그대로 보인다. 1번 메뉴였던 도움말이 애플리케이션 메뉴의 아래쪽으로 들어갔고, PTT 프로그램이 빠졌다. PTT 프로그램의 이름으로 보아 Push-To-Talk를 구현하는 것 같고, SIP 프로필을 요구하는 걸로 보아서 인터넷 전화와도 관련이 있는 것 같다. 본인은 SIP 계정도 없는데다가, Wi-fi가 안 되는 상황에서 인터넷 전화를 써 봤자 요금 절감 효과는 없기 때문에 이런 기능이 생긴다는 정도만 짚고 지나가자. KT가 이런 걸 지웠을 줄은 꿈에도 몰랐다. 아니 이런 프로그램이 있다는 거 자체가 충격이다.

노키아 6210s 디브랜딩 - 애플리케이션

애플리케이션 메뉴. 도움말이 메인 화면으로 빠지고 빈 자리에 PTT가 들어 있다.

대개의 통신사들은 USIM 카드나 OTA(Over The Air)를 통해서 APN, MMS 설정, WAP 설정을 한다. 하지만 우리나라 통신사들은 그딴 거 없고 단말기 롬에다가 주소를 박아 넣는다. 노키아 6210s도 예외가 아니라서, 네트워크 대상 메뉴에 KT 주소가 들어가 있고 기본적으로 편집할 수 없다. 네트워크 대상 메뉴를 봐도 뭔가 차이가 난다.

노키아 6210s 디브랜딩 - 네트워크 대상

네트워크 대상 메뉴. WAP 서비스가 보이며, 인터넷과 MMS도 편집할 수 있다.

맨 밑에 있는 범주화 안 됨이 WAP 서비스란 걸 알고 좀 충격받았다. 일반 KT 휴대폰의 WAP 게이트웨이 정보를 이식하면 비-터치폰용 WAP 페이지에 접근할 수 있을 것 같아 보인다. 실제 네트워크 설정으로 들어가 봐도, KTF 특성화가 설치되어 있을 때에는 APN과 MMS 게이트웨이를 보거나 편집할 수 없지만, 특성화가 삭제된 상태에서는 APN과 MMS 게이트웨이 둘 다 편집 가능하다. SKT USIM을 끼우면, 어쩌면 설정을 편집해서 무선 인터넷과 MMS를 살릴 수 있을지도 모른다. 하지만 지금 SKT USIM이 없으므로 패스한다.

노키아 6210s 디브랜딩 - 네트워크 설정

네트워크 설정. 기본적으로 KTF로 잠겨 있으나 편집할 수 있게 된다.

인터넷 메뉴도 뭔가 다르다. 뮤직 스토어를 보고 받은 충격은 상상 이상으로 컸다. 막상 뮤직 스토어를 들어가 봤자 한국에서는 정식으로 서비스를 시작하지 않았기 때문에 돈을 내고 음악을 사기가 좀 귀찮다. 뮤직 스토어 삭제 정도는 뭐 나쁘지는 않다고 본다. iTunes 뮤직 서비스도 아직 정식 출시가 되지 않았으니.

노키아 6210s 디브랜딩 - 인터넷 메뉴

인터넷 메뉴. 숨은 뮤직 스토어가 보인다.

뮤직 스토어는 기본 내장 MP3 플레이어와 연결되어, 뮤직 스토어에서 찾기 메뉴가 생긴다. 아마 노키아 5800이 들어와도 뮤직 스토어가 없기 때문에, 뮤직 스토어로 가는 링크는 삭제되어 들어올 것이다.

노키아 뮤직 스토어

노키아 뮤직 스토어. 한국 서비스가 없어서 아직은 그림의 떡이다.

인터넷 책갈피도 KT가 건드려 두었다. 기본 노키아 웹 페이지를 다 지우고, KT의 홈 페이지와 국내 포털 모바일 페이지를 추가시켜 두었다. 여기까지는 좋은데, 각종 다운로드 사이트 역시 KT로 연결시켜 두고는 전혀 서비스하지 않는 페이지로 연결시켜서 사람들을 엿먹인다. KT 특성화를 지우면 책갈피 역시 노키아 기본값이 다시 올라간다. 다운로드 링크를 타고 들어가면 오비 스토어의 해당하는 섹션이 뜨고, 정상적으로 다운로드할 수 있다.

노키아 6210s 디브랜딩 - 즐겨찾기

즐겨찾기. 한국 페이지가 사라지고 노키아 페이지가 그 자리를 차지하고 있다.

첫 번째 바로가기도 실제 수정할 수 있다! 1 바로 가기가 죽지 않고 그대로 살아 있다. 여기서 바꾼 건 그대로 적용되므로, 놀라지 말고 그냥 바꾸면 된다.

노키아 6210s 디브랜딩 - 바로 가기 편집

바로 가기도 편집할 수 있어서 폰꾸미기를 완전히 쫓아낼 수 있다.

마지막으로, *#0000#을 눌러서 장치 관리자로 들어가 보면 주문 버전의 끝이 c00.01로 끝나며, KT 기본 롬은 c67.01로 끝난다. 이 상태에서 소프트웨어 업데이터를 실행시키면 KT 기본 롬으로 되돌아갈 수 있으므로 주의해야 한다. SMS를 쓸 때도 KT 기본 롬에서는 160/140바이트를 다 채우면 바로 MMS로 넘어가지만, KT 특성화를 지우면 160(1)처럼 뜬다. 바이트를 다 채워도 MMS로 넘어가지 않고, 여러 장의 SMS로 나눠서 보낼 수 있게 해 준다. MMS로 보내려면 MMS를 쓴다고 지정해 줘야 한다. SMS 나누기는 경우에 따라서 장점이자 단점이 될 수 있으니 판단은 본인에게 맡긴다.

노키아 6210s 디브랜딩 - SMS 메뉴

SMS 메뉴. 길게 쓰면 MMS로 넘어가지 않고 자동으로 메시지를 자른다.

디브랜딩 작업이 끝나면 통신사가 숨긴 기능이나 통신사가 건 제한이 사라지기 때문에 외국의 휴대폰을 좀 아는 사람들은 암암리에 디브랜딩을 해서 쓴다.누군가에게는 디브랜딩이 도움이 되길 바라며 글을 끝낸다.

노키아 6210에서 KT 흔적 지우기 – 방법

경고: 이 글에서 언급하는 행동을 수행했을 시 휴대폰이 심한 경우 다시는 켜지지 않을 수도 있습니다. 중요한 자료가 있으면 미리 백업 후 진행하십시오. 진행 중 초기화됩니다. 또한 롬을 강제로 덮어쓰는 작업 자체는 불법이 아니지만, 노키아 서비스 센터에서는 소프트웨어 업데이터 실행 기록을 찾을 수 있으며, 노키아 소프트웨어 업데이터는 업데이트를 실행할 때마다 휴대폰의 IMEI, 제품 코드를 보내기 때문에 사용자의 행동을 추적할 수 있습니다. 실제로 해외에서 수리 거부 사례가 있었으며, 이로 인한 휴대폰 수리 거부에 대해서 저자는 책임지지 않습니다.

간만에 노키아에 관해서 쓰는 글이다. 나 또한 KT가 걸어 둔 제한 때문에 바로가기 1번이 폰꾸미기로 되어 있고, 노키아 즐겨찾기가 사라진 거에 대해서 엄청 불만이 많다. 네이버의 노키아 사용자 카페에서도 각종 제한들을 풀려고 여태까지 많은 시도를 했지만 전부 실패 내지는 허사로 돌아갔다. 무언가 방법이 있지 않을까 생각해 보다가, debranding이라는 키워드를 알게 되었다.

디브랜딩은 간단한 개념이다. 우리나라에서 휴대폰을 사려면 무조건 이동통신사를 거쳐야 하지만, 외국의 경우 바로 사는 거나 이동통신사를 거쳐서 사는 거 둘 다 가능하다. 제조사에서 바로 사면 USIM 잠금도 걸려 있지 않고 제조사에서 바로바로 펌웨어 업그레이드가 나오며, 이동통신사의 프로그램이 없어서 사람에 따라서는 쾌적할 수 있다. 대신 비싸다. 이동통신사에서 휴대폰을 사면 약정 할인 등으로 싸게 살 수 있으나, 이동통신사 프로그램 및 설정이 따라오며 USIM 잠금도 왕왕 걸려있다. 펌웨어 업그레이드 역시 이통사의 검수를 거쳐야 해서 한 발씩 느리다.

노키아는 영악하게도 이동통신사로 판매되는 제품과 직접 판매하는 제품의 코드를 다르게 해 두어서, 하드웨어는 같은데도 불구하고 사용자가 제품을 잘못 업데이트하지 못하도록 해 준다. 그래서 외국에서는 휴대폰의 제품 코드를 통신사로 판매되지 않는 것으로 바꿔서 롬을 새로 업데이트시키는 방법을 사용한다. 하지만 한국의 노키아 6210s는 사정이 다르다. 애시당초 바꿔치기할 수 있는 제품코드 자체가 없어서(노키아는 아직 한국에서 직접 폰을 팔지 않는다) 일반적인 방법으로는 소용이 없다.

노키아 휴대폰 펌웨어는 총 4부분으로 나뉘어 있다. 코어, 언어 지원, 이동통신사 특화, 기타. 코어와 언어 지원, 기타는 어떤 모델이든 동일하게 들어가며 지역에 따라서 차이가 난다. 우리가 신경쓸 부분은 이동통신사 특화 부분이다. 노키아 휴대폰 펌웨어 서버에 저장된 모든 데이터를 볼 수 있는 프로그램은 Navifirm을 사용해서 서버의 내용을 들여다 보면 알 수 있다. 한국에 발매된 노키아 6210s는 같은 하드웨어를 탑재한 기종이 이스라엘, 브라질 빼고는 출시되지 않았다는 사실도 알 수 있다.

그러면 Navifirm을 사용해서 한국에 출시된 노키아 6210s의 펌웨어를 다운로드해 보자. Navifirm을 실행한 다음 잠시 기다려야 모델 목록이 뜬다. Nokia 6210s를 선택하고, 릴리즈에서 4.13.08을 선택한다. 그 다음 Variant에서 자신의 휴대폰 색깔을 선택한 다음(색깔에 따라서 제품 코드가 차이난다) 펌웨어 파일을 확인한다. 모두 선택한 다음 일단 적절한 장소에 저장해 둔다.

한국용 노키아 6210s 롬 파일

한국용 노키아 6210s 롬 파일

type_label이라는 이름이 들어가 있는 파일은 노키아 6210s의 MIC 인증서를 출력하기 위한 라벨 정보가 들어 있다. pcx 파일을 그림 뷰어로 열어 보면 익숙한 뭔가가 보인다. XML 파일을 통해서 IMEI 키는 숨기고 한국용 제품 코드를 출력하라는 지시가 들어 있음도 알 수 있다. 좀 용량이 큰 fpsx 파일이 바로 핵심이다. core로 끝나는 파일은 코어, korean으로 끝나는 파일은 한국어 지원이다. ORION_UDA가 들어가는 파일의 용도는 아직까지 모르겠고, KTF로 끝나는 파일은 이동통신사에 특화시키기 위한 장난이 다 들어있는 파일이다.

strings란 프로그램으로 저 파일의 문자열을 분석해 보면, 많은 사람들의 원성을 자아낸 폰꾸미기가 보인다. SHOW 테마 역시 이 파일 안에 박혀 있다. 웹 즐겨찾기 정보 역시 노키아의 기본값을 지우고 국내 사이트로 바뀌어 둔 흔적이 보이며, 인터넷에 접속하기 위한 APN 정보 역시 여기에 기록되어 있다. fpsx 파일의 내용을 뜯어 보는 방법은 해외 포럼을 찾아봐도 안 보이므로 어떻게 파일 내용을 원하는 것만 추출하는지에 대해서는 나도 모른다.

그러면 사업자 특화 내용이 전혀 안 들어가 있는 깨끗한 파일은 어디서 구할 수 있을까? 잠시 모험을 해 보자. 모델 번호 RM-367 내비게이터를 선택하고, 펌웨어 4.13을 선택한다. 그나마 한국 펌웨어와 숫자가 제일 비슷하다. 그 다음 해외 사업자를 잘 선택해야 하는데, 앞서도 말했듯이 일부 사업자는 한국보다 더한 뜯어고치기 때문에 설치하지 않는 게 더 좋을 수도 있다. 지역 이름만 포함하고 있는 건 노키아가 직접 파는 모델이란 뜻으로, 파일도 작아서 좋다. APAC1 지역의 싱가포르에서 팔리는 노키아 6210 내비게이터의 롬 파일 중 rm367_04.13_prd_vc00_01_Navigator.fpsx 파일을 다운로드해 두자. 크기는 불과 5킬로바이트이므로 사업자 특화 설정이 없다는 걸 알 수 있다.

해외 노키아 6210 롬 파일

해외 노키아 6210 롬 파일

롬 파일이 준비되었으면 프로그램을 준비하자. 기본 노키아 소프트웨어 업데이터만 있으면 노키아 서버에서 받아오는 파일만 가지고 업데이트하므로, 방금 받은 파일을 휴대폰에 강제로 설치하려면 꼼수를 더 써야 한다. 이 때 쓸 프로그램으로 JAF라는 게 있다. JAF라는 플래시 하드웨어를 가지고 USIM 언락을 수행하는 등 작업에 쓰이지만, JAF 상자 없이도 작업은 얼마든지 수행할 수 있다. JAF 1.92.621.92.64 패치 파일, 키 에뮬레이터(하드웨어 키를 둘러가게 해 준다)를 미리 받아 둔다.

JAF 1.92.62를 미리 설치한 다음, 1.92.64 패치 파일에서 jaf_nokia4models.ini만 따로 꺼내 둔다. 파일을 메모장으로 연 다음 RM-408로 검색해 보면 노키아 6210s에 대한 정보가 있다. 밑에 있는 언어 정보에 중국어가 같이 들어있다는 잘못된 정보가 있으므로, 중국어에 대한 언급을 삭제한 다음 JAF가 설치된 폴더로 복사한다. 여기까지 다 설치했으면 C:\Program Files\Nokia\Phoenix\products\RM-408 폴더를 만들고, 앞서 받은 파일을 모두 다 복사해 둔다. 파일을 복사하면서, 앞서 받았던 5KB짜리 rm367로 시작하는 파일을 rm408_04.13.08_prd_vc67_01_KTF.fpsx로 이름을 바꾸고 원본 파일은 지우거나 백업해 둔다. 그리고 키 에뮬레이터를 통해서 JAF를 실행시킨다.

JAF가 실행되었으면 아래 그림대로 설정한다. Manual Flash, Dead USB, Factory Set, Normal Mode에 체크해 두고, CRT 308과 Change also product code의 체크를 푼다. Use INI의 체크를 선택하면 무언가를 읽다가 모델을 선택하라는 창이 뜨는데, 여기에서 RM-408(노키아 6210s)를 선택한다. 여기까지 진행한 다음, 휴대폰을 끈 채로 USB 케이블로 연결한다. 준비가 다 되었으면 FLASH 버튼을 누르고, 휴대폰을 켜라는 메시지가 아래에 뜨면 휴대폰을 켠다. 롬을 플래싱하는 모드로 들어간 다음 JAF가 롬을 새로 쓸 때까지 기다린다. 바로 이 단계에서 초기화도 같이 이루어진다.

JAF 설정 방법

롬을 다 썼으면 휴대폰은 하드리셋된 듯 초기 설정 화면이 뜬다. 초기 설정을 무사히 완료했으면 성공한 것이다. 비록 필자 본인은 한 번만에 성공했지만, 휴대폰이나 컴퓨터 환경에 따라서 실패할 수도 있다. 본인은 아직 실패해 보지 않아서 이 경우 어떻게 해야 하는지 모른다. 프로그램의 생김새로 봐서는 휴대폰이 완전히 죽은 상태에서도 플래싱은 성공할 수 있게 생겼다. 글 앞에서 도 밝혔듯이, 이 방법을 사용하다가 휴대폰 수리가 거부당하거나 통화를 할 수 없게 되어도 필자는 절대 책임지지 않는다.

추가: 이 방법대로 휴대폰을 플래싱하고 나면 KT 기본 설정이 지워져서 잠깐 동안은 무선 인터넷이나 MMS를 사용할 수 없다. 설정-폰 설정-연결-대상 메뉴로 가서, 인터넷과 멀티 메시지의 액세스 포인트를 확인한다. 액세스 포인트가 없으면 메뉴에서 새 액세스 포인트를 누른 다음 자동으로 검색하도록 한다. 노키아 6210s의 KTF 특수화에서 추출해 낸 APN은 KTF-HSDPA의 경우 r3-normal.ktfwing.com, KTF-HSDPA MMS의 APN은 leo.ktfwing.com이며, 홈 페이지 주소에 http://mmsc.ktfwing.com:9082가 들어있으면 된다. hsdpa-internet.ktfwing.com으로도 인터넷 접속 및 MMS 수/발신은 가능했으나, 기본값이 이렇다는 것만 밝혀 둔다.

데비안, GRUB 2, intelfb

리눅스 커널 소스 트리를 뒤지다 보면 두 종류의 비디오 드라이버를 찾을 수 있다. 하나는 우리가 흔히 말하는 그래픽 드라이버인 DRI 드라이버이고, 또 다른 하나는 프레임버퍼 드라이버이다. 전자는 X.org 하에서의 2D/3D 가속 등을 담당하며, 후자는 X.org가 뜨기 전까지, 흔히 콘솔이라고 말하는 영역에서 그래픽 처리를 담당한다. 프레임버퍼를 전혀 사용하지 않으면 과거 도스 시절에나 볼 수 있었던 콘솔이 뜨지만, 프레임버퍼를 사용하면 해상도도 높아지고, mplayer를 사용하여 동영상도 볼 수 있다. 부팅 스플래시도 이렇게 처리한다.

GRUB 1에서 리눅스 프레임버퍼를 사용하려면 커널 옵션으로 vga=xxx 또는 video=xxx를 추가해 줘야 했다. vga=xxx 옵션을 추가하면 하드웨어 가속을 전혀 사용하지 않는 vesafb를 불러온다. vesafb는 이름처럼 표준적인 기능만 제공해서 VESA 표준이 아닌 해상도(와이드 포함)를 사용하려면 하드웨어 정보를 들여다봐서 모드 값을 알아내야 했다. 이외의 다른 프레임버퍼 드라이버를 사용하려면 video=(프레임버퍼 드라이버) 식으로 지정해 주면 된다.

GRUB 2로 진화하면서 GRUB 구조가 완전히 바뀌면서 프레임버퍼 설정 방법도 바뀌었다. 더 이상 menu.lst 파일의 주석에 정보를 숨기지 않고, 모듈화된 설정 파일로 바뀌었다. 프레임버퍼 설정 역시  GRUB 1에서 썼던 것처럼 vga=xxx라는 커널 옵션을 줘도 커널은 이 옵션을 적절히 무시한다. 그리고 해상도를 지정하기 위해서 암호같은 모드 값을 외울 필요도 없어졌다. 데비안 기준, /etc/default/grub 파일을 수정해 주면 게임이 끝난다. 처음 파일을 열어 보면 다음과 비슷할 것이다.

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
GRUB_GFXMODE=1280x800
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entrys
#GRUB_DISABLE_LINUX_RECOVERY="true"

보이는 것처럼 menu.lst 파일의 주석 대신 환경 변수를 사용한다. 그래픽 모드를 사용하려면 GRUB_GFXMODE의 주석을 풀고 원하는 해상도 및 색 농도로 설정해 주면 된다. 1024×768의 32비트를 사용하려면 1024x768x32로 입력해 주면 된다. 설정을 업데이트했으면 update-grub 명령을 내려서 실제 grub.cfg 파일에 반영시키면 된다. 다음 부팅 때부터 GRUB은 그래픽 모드에서 실행되며, GRUB에서 설정된 해상도가 리눅스 프레임버퍼까지 간다. 이 과정에서 vesafb 모듈이 자동으로 올라가며, video=xxxxx 옵션을 주면 선택한 드라이버를 사용한다.

내 서브노트북 Q10을 업어오면서, 원래 계획은 intelfb 드라이버를 올려서 X11 없는 GUI 사용이었다. 인텔 830M 그래픽은 분명히 intelfb 드라이버의 지원 목록에 있었다. 하지만 intelfb 드라이버는 유명한 에러 메시지를 내놓으면서, 정작 뚜렷한 해결책도 없었기 때문에 X11을 그냥 올렸고 KDE를 설치했다. intelfb 드라이버의 문제는 다음 문단에 설명한다.

대개의 프레임버퍼 드라이버는 video 옵션만 지정해 주면 되는데, intelfb 드라이버, 특히 노트북에서 사용하려면 상당히 머리가 아프다. GRUB에서 그래픽 환경 설정을 하지 않고 보통의 프레임버퍼 드라이버처럼 video=intel:mode=1024×768 식으로 해상도를 지정해 주면 노트북 사용자들을 좌절하게 만드는 “intelfb: Video mode must be programmed at boot time” 오류가 뜬다. vga=xxx 옵션을 같이 줘 놓으면 비디오 모드는 제대로 찾는데, 이제는 vesafb와 순위 쟁탈전을 벌이면서 “intelfb: cannot acquire agp”나 “intelfb: Cannot reserve FB region” 같은 오류가 뜨면서 기대하던 인텔 프레임버퍼가 뜨지 않는다.

원인을 계속 찾다 보니, 데비안 커널에 내장된 vesafb가 원인이었다. 커널 컴파일을 새로 하면서 vesafb를 빼 버리고, initramfs를 만들면서 intel_agp, agpgart, intelfb 모듈을 추가시켜 줬다. 어차피 프레임버퍼에 관심을 가질 정도로 리눅스를 잘 아는 사람이라면 커널 컴파일이 무엇인지는 알 테니, 여기에서 방법은 생략하겠다. 어떻게 컴파일을 하든, vesafb를 빼고 intelfb를 포함해서 컴파일해야 한다. 내 경우, 서브의 사양이 심각하게 안 좋아서 대부분의 안 쓰는 모듈을 과감하게 빼고 컴파일했다.

커널 컴파일과 initramfs 생성이 끝난 다음, GRUB 설정을 수정해서 video=intelfb 옵션을 추가해 주었다. 반신반의했지만 성공했다. 비디오 모드를 바꿀 수 없다는 경고 메시지가 지나갔지만, 프레임버퍼 정보를 보니 인텔 프레임버퍼를 정확하게 잡아 주었다. 여기까지 왔다면 프레임버퍼를 사용하는 리눅스 프로그램은 무엇이든지 쓸 수 있다. mplayer를 사용해서 영화를 볼 수도 있고, fim으로 그림을 보거나 w3m-img를 설치해서 그림까지 보면서 웹을 즐길 수 있다. fbgrab을 설치하면 프레임버퍼의 스크린샷을 찍을 수 있고, gpm을 설치하면 마우스를 사용할 수 있다.

아래는 부팅 동영상과 실제 인텔 프레임버퍼를 사용한다는 걸 보여 주는 명령들이다.


데비안 intelfb

데비안 intelfb

요약하면, 데비안을 사용하는 노트북에서 intelfb를 제대로 쓰려면 커널을 다시 컴파일해야 한다. 이 때 기본 내장된 vesafb 옵션을 끄지 않으면 서로간의 충돌 때문에 intelfb가 올라오지 않는다. 커널을 새로 설치한 다음, GRUB 설정 파일을 편집해서 원하는 해상도를 설정하고, 리눅스 커널 인자에 video=intelfb를 추가해서 인텔 프레임버퍼를 사용하게 하면 된다.