2013/03/05 추가: 현재 저는 노키아 5800을 더 이상 메인으로 사용하지 않습니다. 본문에 나오는 펌웨어는 V60 EURO1을 받아서 한국 펌웨어에 있는 .r65 파일을 결합하고 인코딩 지원만 추가해 두었습니다. 실제 사용할 수 있는 수준과 거리가 멀기 때문에 제 폰에 플래싱한 펌웨어는 따로 제공하지 않습니다.
아직까지도 노키아 5800/X6을 쓰는 사람이 얼마나 있는지는 잘 모르겠지만, 삽질을 기록해 볼 필요성은 있을 것 같아서 글을 써 본다. 노키아 5800 커펌이 유행했을 때, 해결 불가능한 대표적인 두 가지 문제로 EUC-KR 미지원 및 한글 입력기 문제가 있었다. EUC-KR 미지원 문제는 결국 아무도 풀지 못한 문제가 되었고, 한글 입력기 문제는 외부에서 텍스트를 조합해서 붙여 넣는 방식의 한글 입력기나 Swype에 한글 사전을 추가하여 해결하였다. EUC-KR 인코딩 문제를 쉽게 해결할 수 있을 것 같다고 생각해서 과감하게 글로벌 펌웨어 V60 기반으로 올렸지만, 생각만큼 문제 해결이 쉽지 않았다.
인코딩 문제는 생각보다 복잡하다. 노키아 심비안 휴대폰들의 메모리 영역은 보호가 강한 순서대로 (ROM, CORE, ROFS1), ROFS2, ROFS3으로 나뉘며, 오래 전 디브랜딩에 대해서 썼던 글은 ROFS3 영역을 통신사 소프트웨어가 설치되어 있지 않은 파일로 바꿔서 6210의 경우 폰꾸미기 등을 날려 버리는 방법이다. 커펌들은 ROFS3 이상의 영역까지 손을 대며, 글로벌 펌웨어와 한국 펌웨어는 CORE 영역부터가 달라서 쉽게 왔다갔다할 수 없다.
한국 펌웨어에 추가되어 있는 EUC-KR 인코딩 관련 파일은 ROM 영역에 있는데, 이 영역에 있는 실행 파일은 폰에서는 모두 Z: 드라이브에 있는 것으로 보이지만, ROFS 영역에 있는 실행 파일과 형식이 다르다. ROM 영역에 있는 실행 파일 및 DLL 파일은 XIP 형식으로 되어 있기 때문에 일반적인 S60 실행 파일처럼 실행시킬 수 없다. 또한 XIP 형식 실행 파일에서는 외부 참조를 절대 주소로 불러오기 때문에, ROM의 구조가 바뀌어 버리면 실행할 수 없다. 따라서 제아무리 ROM 영역에 있는 DLL 파일을 추출해서 ROFS2 영역에 붙여넣어도 실행되지 않는다. 게다가 모든 커스텀 펌웨어들이 ROM 영역은 건드리지 못하기 때문에 EUC-KR 인코딩을 쉽게 집어넣을 수는 없다.
ROM 영역에 있는 실행 파일을 ROFS 영역에서 실행되게 하려면 XIP 형식 실행 파일을 일반적인 E32 형식으로 바꿔야 하며, 이걸 위해서는 실행 중인 휴대폰에서 ROMPatcher+를 사용하여 뜬 ROM 덤프가 필요하다. 불행히도 이 글을 쓴 시점에서는 V60 CORE를 올려 버린 상태라서 V20 한국 펌웨어의 ROM 덤프를 뜰 수 없었으며, 설상가상으로 주변에 있는 V20 펌웨어가 깔려 있는 5800을 구할 수도 없었다. 되면 좋고 안되면 말고 하는 마음으로 6210 펌웨어에서 ROM 덤프를 떴다. 어차피 한국어 인코딩에 관한 부분은 크게 바뀌지 않았을 것이라고 생각하였다. 그 다음 aRomAT를 사용하여 ROM 덤프에 있는 실행 파일을 E32 형식 실행 파일로 바꿔야 한다. ROM 덤프에서 추출해야 하는 실행 파일은 CP949.dll, cp949table.dll, EUCKR.dll, iso2022kr.dll, ksc5601.dll이다. aRomAT를 실행하고 파일을 찾은 다음 “Convert to EPOC”을 실행하면 ROFS 영역에서 실행할 수 있는 dll 파일로 변환된다.
이제 커스텀 펌웨어의 ROFS2 영역을 열어서 sys\bin 폴더에 5개의 DLL 파일을 추가하고, V20 ROM에 있는 EUCKR.snm, iso2022kr.snm, ksc5601.snm 파일을 추출하여 resource\charconv 폴더에 복사한다. 실행 파일은 아니므로 복사 그대로 해도 무방하다. 그 다음에는 ROFS1 영역에 있는 private\10009d8f\ecom-0-0.spi 파일을 편집하여 인코딩에 관한 정보를 추가해야 한다.
2013/03/05 추가: ROM 영역을 열 수 있는 펌웨어 쿠커로 열지 않으면 snm 파일이 안 보이므로 한국판 V20 펌웨어에서 추출한 snm을 올려 둔다.
3740057327.zip첨부한 파일은 노키아 6210 펌웨어에서 추출 및 가공한 한국어 인코딩 DLL, ecom-0-0.spi 파일에 추가해야 할 부분이다. 5800 V20 펌웨어에 있었던 snm 파일은 펌웨어에서 추출해야 한다. encodings.spi 파일을 열면 위에 있는 DLL 파일의 등록 정보가 있으며, ROFS1 영역에서 저 파일을 추출한 다음 windows-1258 인코딩 정보 다음에 붙여넣은 다음 ROFS2 영역에 같은 파일 이름으로 저장한다. 같은 방법으로 5800 V20 ROFS1에 있는 resource\TopCharacterSet.rsc 파일을 ROFS2 영역에 붙여넣는다. ROFS1 영역을 편집해도 되지만, 이번 작업의 목표가 ROFS2 이상만 건드린다는 것이므로 생략한다.
2734176526.zip이렇게 하고 플래싱을 실행하면 그 동안 기존 커펌에서 성공시키지 못했던 KT 망에서의 한국어 MMS 디코딩 및 EUC-KR 웹 페이지가 깨지지 않고 보인다. 성공했는지 보려면 웹 브라우저의 옵션->페이지를 열어서 문자 인코딩을 보면 되며, EUC-KR이 추가되었다면 한국어 (EUC-KR) 및 한국어 (ksc5601) 항목이 추가되어 있다.
Swype 한국어 지원 추가 및 한국어 입력기 추가에 관한 글은 차후 추가할 예정이다.