노키아 5800 글로벌 펌웨어에 EUC-KR 인코딩 추가

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 한국어 지원 추가 및 한국어 입력기 추가에 관한 글은 차후 추가할 예정이다.

8 thoughts on “노키아 5800 글로벌 펌웨어에 EUC-KR 인코딩 추가

  1. 찌찌

    대단하세요. 전 능력부족으로 설명해주신 말을 이해 하지 못 하겠네요. 저도 넘지 못할 강을건너서.. 멀티메일및 웹서핑서 한글을 제대로 보고파요.님의 커롬을 이메일로 받고 싶은데 부탁 드려도 될까요? jji1234@naver.com 입니다.

    1. peremen

      커펌질 하다가 몇 달도 안 되어서 N9로 갈아타는 바람에 지금은 저 상태에서 큰 개선이 없습니다. 스크린샷에 있는 롬은 혼자 쓰려고 직접 만든 V60 글로벌 펌웨어 + V20에 있었던 한국어 번역 파일 일부밖에 없어서 그냥 그대로 쓰시기는 *상당히* 불편하실 겁니다. (군데군데 영어로 나오는 부분+뭔가 이상한 부분이 있고, 음력달력은 포기하고, 한글 입력은 Swype로 해결. 순정 글로벌 펌웨어에서 더하거나 뺀 기능은 없습니다) 그래도 좋으신가요?

  2. 이근처사람

    작성하신 글을 읽고 저도 v60펌 한글화를 도전 중이였습니다..
    근데 아무리 순정 V20에서 찾아도 말씀하신 EUCKR.snm, iso2022kr.snm, ksc5601.snm 파일들이 없던데, 이 파일들의 경로를 알 수 없을까요?

    1. peremen

      ROM 영역의 Resource\\Charconv 폴더에 있습니다. 플래싱된 상태에서는 Z:\\Resource\\Charconv 안으로 들어가게 됩니다. 롬 쿠커로 core 파일을 열 때 ROM과 ROFS1은 별개의 영역이므로, ROM 영역을 따로 추출해 낸 다음 쿠커로 열어야 합니다. 한국 펌웨어에만 들어 있는 파일이므로 제가 따로 올려 두겠습니다.

    2. peremen

      아, 혹시 아직도 순정 V20을 쓰고 계신다면 혹시 InstallServer를 패치하셨고 RomPatcher+를 설치하셨는지 여쭤 보아도 될까요? RomPatcher+의 기능 중 Dump ROM/Dump Superpage를 해서 나온 파일이 필요한데, 롬 덤프를 하기 전에 V60을 올려 버려서 결과 파일을 구하지 못하고 있습니다. 본문에도 썼듯이 ROM 영역에 있는 실행 파일은 그대로 커펌에 사용할 수 없어서 부탁드립니다.

    3. 이근처사람

      죄송합니다, 이미 V60(영국 순정펌)으로 올려버려서···. ㅜㅜ
      그리고 파일 올려주셔서 감사합니다. : )

Comments are closed.