Category Archives: 하드웨어

후지쯔 D2607 IT 모드 (HBA) 펌웨어 크로스플래시

HP Microserver Gen8은 시스템 칩셋으로 인텔 C204를 사용하고, 기본적으로 하드 베이에서 나온 SFF-8087 케이블이 인텔 C204의 SATA 컨트롤러에 연결되어 있다. 그래서 0, 1번 베이만 SATA 6Gbps를 지원하기 때문에 PCIe 슬롯에다가 SAS HBA를 붙여서 모든 베이에서 6Gbps를 사용하도록 하는 개조를 자주 당하고는 한다. ZFS 같은 소프트웨어 RAID를 사용할 거라면 굳이 하드웨어 RAID 카드를 붙일 필요가 없어서 IT 모드로 플래싱할 수 있는 캐시 안 달린 RAID 카드를 사용하기도 한다.

LSI(Avago를 거쳐서 Broadcom에 인수됨) RAID/HBA 카드는 SAS 계열에서 본좌 중 하나로 취급된다. LSI는 자체적으로 카드를 만들어서 팔 뿐만 아니라 서버 제조사에 OEM으로도 칩셋을 납품한다. LSI 버전 리테일 카드보다 OEM 버전 카드가 더 싸긴 한데, OEM 버전 카드는 LSI 버전보다 최신 펌웨어가 더 늦게 올라오거나 IR/IT 모드 펌웨어 중 하나마 올라오기도 한다. LSI SAS 칩셋과 카드 정보를 보려면 serverthehome에 있는 정보를 참조하면 된다. 덕분에 2cpu에서 인기 있었던 하드웨어가 IBM M1015인데, 이건 그냥 LSI 펌웨어를 강제로 밀어 넣으면 LSI 카드로 변신하고 IR/IT 모드 전환도 자유롭기 때문이다. 아직까지 국내에 후지쯔 D2607 카드로 시도해 보았다는 사람은 안 보이는데, 사실 후지쯔 카드의 SBR 구조가 다른 LSI 칩셋 카드와는 달라서 2016년에서야 성공했다는 블로그 글이 나왔다. 독일 이베이를 눈팅하다가 D2607이 꽤 싸게 풀린 걸 하나 낚아채서 이걸 시도해 보았다.

martan.st에 의하면 후지쯔 카드의 SBR은 0x12번째 바이트가 다른 LSI 카드와는 살짝 달라서, 다른 회사의 SBR을 그대로 밀어 넣으면 2개의 SFF-8087 포트 중 하나만 인식하는 경우가 생긴다. serverthehome에 올라온 글에 의하면, D2607 카드에는 A11과 A21 리비전이 있는데 문제의 0x12번째 바이트가 A11과 A21 리비전끼리도 서로 달라서(A11: 0x04, A21: 0x00) IT 모드로 플래싱할 때에도 하드웨어 리비전을 맞춰서 플래싱해야 한다. 내가 받은 카드도 A21 리비전이라서 D2607-A21용 SBR을 구해야 했다.

준비물은 UEFI 부팅 가능한 보드, D2607 카드와 포맷해도 상관 없는 USB 메모리다. Microserver Gen8은 UEFI를 지원하지 않지만, marcan.st 블로그에서는 sas2flash의 UEFI 버전을 수정해서 Mfg Page 2 validation을 건너뛰도록 만들어 놨기 때문이다. sas2flash의 DOS 버전의 같은 부분을 수정하면 UEFI 부팅 가능한 보드가 없어도 되지만, 아직까지 사람들이 거기까지는 시도해 보지 않은 것 같다. lime-technology 사이트에 A21과 A11 리비전용 SBR, sas2flash, IT 모드 펌웨어를 모아 놓은 압축 파일을 누군가가 올려 두었다. Rufus로 DOS 부팅용 USB를 만든 다음 이 파일을 USB 메모리의 루트에 압축을 풀어 놓으면 된다.

다운로드 링크: https://mega.nz/#!bp1lwAwZ!qrQics2qslPxCRFSI7pCaL-JECCauM_xqp00GQPloSg
미러: http://www93.zippyshare.com/v/BqbeVa7Y/file.html

우선 DOS로 부팅한 다음

megacli -adpallinfo -aall | find /i "sas address"

명령을 내려서 RAID 카드의 SAS 주소를 기록해 둔다. 혹시나 카드가 맛이 갈 때를 대비해서

megarec -readsbr 0 orig_sbr.bin

명령을 내려서 원본 SBR을 백업해 둔다. 그 다음 카드를 초기화한 다음 IT 모드용 SBR을 플래시해 주고 다시 한 번 더 초기화한다. 여기까지는 다른 LSI 칩셋 카드와 같다.

megarec -cleanflash 0 (카드에 따라서 여러 번 실행해야 할 수도 있음)
megarec -writesbr 0 SBR-A21.bin (카드가 A21 리비전인 경우)
megarec -writesbr 0 SBR-A11.bin (카드가 A11 리비전인 경우)
megarec -cleanflash 0

그 다음 UEFI 셸로 부팅해서 IT 모드 펌웨어를 밀어넣는다. 저 사이트에 올라온 2118it.p20.bin 파일은 Broadcom 사이트에 올라와 있는 LSI 9211-8i의 20.00.07.00 펌웨어와 동일하다. MD5 체크섬은 동일하나, 찝찝하면 공식 사이트에 있는 파일로 새로 밀어넣어도 상관 없다.

fs0: (UEFI 셸 진입 시 표시되는 USB 메모리 경로로 입력)
sas2hax -o -f 2118it.p20.bin

이 단계에서 카드를 초기화할 수 없다는 오류 메시지가 뜨데, 의도된 결과다. 그래서 시스템을 UEFI 셸로 재부팅한 다음 다시 한 번 더 명령을 수행해 준다.

fs0: (이전 단계에서 실행했던 것과 동일한 경로)
sas2hax -o -f 2118it.p20.bin -b mptsas2.p20.rom
sas2hax -o -sasadd (이전에 기록해 둔 SAS 주소)

마지막으로 DOS로 재부팅한 다음 SBR을 한 번 더 기록해 준다.

megarec -writesbr 0 SBR-A21.bin 또는
megarec -writesbr 0 SBR-A11.bin

IBM M1015 같은 것과는 SBR 및 펌웨어 구조가 달라서 후지쯔용 SBR을 사용하고 sas2flash의 LSI 버전을 사용할 수 없다는 게 차이점이지만, 한 번 플래싱해 두면 HBA 모드로 계속 사용할 수 있다. 후지쯔 카드에 LSI 펌웨어를 올리는 방법 자체가 2016년 5월에서야 최초로 알려졌기 때문에 LSI 펌웨어를 올린 후에 펌웨어 업그레이드는 아직까지는 아무도 시도해 보지 않은 것 같다.

공장 상태의 D2607을 연결하면 MegaRAID Configuration Utility 진입 메뉴가 뜨지만, IT 모드 플래싱이 완료되면 이런 게 뜬다. 이제 이 상태에서는 MegaRAID Storage Manager를 설치해도 HDD 정보만 표시되며, sas2ircu로도 할 수 있는 일은 HBA와 하드디스크 정보 보기밖에 없다. megacli/storcli는 컨트롤러를 인식하지 못한다.

LSI SAS BIOS

벨킨 블루투스 키보드(F5L150/F5L107) 매트릭스

meh에서 지난 달에 샀던 갤럭시 탭 2/노트 1세대 10.1용 벨킨 블루투스 키보드를 잘 쓰고 있었으나, 평소 쓰는 키보드가 해피해킹 프로 2와 주옥션이었던 탓에 극악의 키감을 이기지 못하고 개조의 충동을 느꼈다. 주옥션이 고장난 지 좀 되었기 때문에 스위치를 추출해서 이식해 보려는 시도를 하고 있었고, winkeyless 사이트에서 파는 기판에 주옥션에서 적출한 스위치를 이식해서 성공시켜 보았다. 곁다리로 얻은 정보 중에 삼성 DT-35와 같은 멤브레인 키보드에서 컨트롤러만 적출해서 쓰는 사례가 있었고, 마침 2개 중 1개는 내다 버려도 되는 상황이었기 때문에 부술 각오를 하고 작업을 시작했다.

문제의 블루투스 키보드는, 멤브레인 스위치와 보강판이 양면 테이프로 붙어 있고, 그 아래에는 고무판과 플라스틱 케이스가 있는데 모든 게 다 양면 테이프로 붙어 있다. 컨트롤러 및 배터리는 고무판 아래에 숨겨진 나사를 돌려서 적출할 수 있으나, 멤브레인 스위치에 접근하려면 키보드를 거의 부숴야 한다. 아, iFixit 같은 데 파는 열을 가해서 접착제 떼내는 걸 모르는 건 아니지만 원래 키보드 그 자체는 하나 더 있기 때문에 컨트롤러만 적출한다는 생각으로 미련없이 부쉈다. 이 와중에 접착제로 붙어 있는 190mAh 리튬 이온 배터리가 분해 중에 걸리적거려서 이걸 먼저 떼야 했다. 떼는 과정에서 배터리에 생긴 생채기 때문에 다시 쓰기는 좀 꺼려지긴 한다.

멤브레인 스위치와 기판이 연결되는 부분을 보면 L1-L24 인덕터 부품이 있고 그 옆으로 TP12-TP35 테스트 패드가 있다. 주의해야 할 점이 L1-L5까지는 L1, L2, L5, L3, L4 순서대로 되어 있고 TP35와 TP34는 순서가 바뀌어 있다. 이 매트릭스에 나와 있는 것은 회로 기판 내에 배치된 순서를 따른다. 이 키보드는 L12-L19와 그 나머지로 Row/Column이 구분된다.

belkin_f5l107_matrix주옥션에서 적출한 스위치를 직접 연결하여 확인하였다. 이제 기판을 만들어야 하는데 어떻게 하나.

자급제 단말기 SKT/KT 3G HD 보이스(와이드밴드 오디오) 사용법

국내에 단말기 자급제가 정착된 지도 제법 오래 되었지만, 아직까지는 유럽 국가처럼 아무 설정 없이 단말기의 모든 기능을 완벽하게 사용하기는 전산을 완전히 갈아 엎지 않는 한 어렵다. 한때는 외국산 LTE 단말기를 사용하려면 이통사 전산에 등록해야 하는 시절도 있었지만, 이제는 LTE 밴드만 맞으면 등록시켜 주는 정도까지 되었고, 이제 남아있는 것은 3G HD 보이스, VoLTE 등의 기능 정도다.

3G HD 보이스(와이드밴드 오디오)는 3G 서킷 스위치(CS) 망에서 AMR-WB 코덱을 사용하는 음성 통화이다. 소니 에릭슨 시절 정발된 엑스페리아 일부 기종이 AMR-WB를 지원하기는 했지만, 통화 양방이 모두 AMR-WB를 사용해야 하고 그것도 통신사 안에서만 가능하였기 때문에 아이폰 5가 등장하기 전까지는 국내에서 거의 기억하지 않았다.

아이폰 5가 정발된 이후 통신사 전산이 개선되어 KT는 3G HD 보이스를 모든 자급제 단말기에 대해서 개방하였고, SKT는 한동안 자사를 통해 유통되는 단말만 3G HD 보이스를 허용하였다가 최근에서야 자급제 단말에도 개방하였다. 물론 바로는 안 되고 별도로 IMEI를 등록(통신사 지점에서 모델명 변경)해야 한다. KT의 경우 해외 단말기에 최초로 USIM을 장착하면 전산상에서 “OPENMODEL1/2″로 인식하고, SKT의 경우 “OMD DEFAULT 핸드셋”으로 인식한다. (홈페이지 상 기기 모델로 구분 가능) 이 모델을 변경해 주어야 3G HD 보이스를 사용할 수 있다. VoLTE와 비슷하게 현재는 같은 통신사를 사용하고 VoLTE/3G HD 보이스를 사용하는 사람끼리만 HD 보이스 통화가 가능하다.

KT의 경우 3G 전용 휴대폰은 PTA-TYPE1HD(PTA-TYPE1과는 다름), LTE 지원 휴대폰은 PTA-TYPE3HD(PTA-TYPE3과는 다름)로 모델명을 변경하면 된다. PTA-TYPE2/4는 각각 3G/LTE 태블릿에 해당한다. (출처: 토렌트고고) SKT의 경우 한동안 이렇게 사용하는 것이 불가능하였다가, 최근에서야 ODH2(OMD DEFAULT 핸드셋_3G HD Voice)로 모델명 변경이 허용되었다. (출처: 뽐뿌클리앙) 이 외 통신사를 통해 정발된 3G HD 보이스 지원 단말기는 유통한 통신사마다 정책이 다르다. MVNO(알뜰폰)을 사용하는 경우, 알뜰폰 회사마다 모회사(SKT/KT) 전산 접근 권한이 다르기 때문에 알뜰폰 고객센터에서 변경이 불가능하면 모회사 휴대폰을 사용하는 사람을 USIM 기변 상태로 모델명 변경을 하면 가능하다.

kt_pta_type3

문제는 이러한 작업을 동네 대리점에서는 해 주지 않으려고 하고 114에 전화를 걸면 신분증을 팩스로 보내야 하기 때문에 오프라인으로 하려면 각 통신사 지점을 찾아가야 한다. KT의 경우 대전 시내 서로 다른 2개 지점에서 모델명 변경 요청 시 신분증만 제시하면 가능하였다. (안드로이드나 iOS가 아닌 휴대폰은 IMEI 화면을 표시해 두는 것을 추천) KT 개통 이력이 없는 단말기의 경우 전산상에서 미등록 단말기로 분류되므로, 한 번은 USIM 기변을 한 상태로 대리점을 찾는 것을 추천한다. 여러 대의 단말을 동시에 등록할 경우 USIM 기변 이력만 있으면 된다. 아직까지 SKT는 시도해 보지 않았다.

3G HD 보이스는 표준 요금제에서도 사용 가능하다. 자신의 휴대폰이 3G HD 보이스를 지원하는 지 여부는 제조사에 문의해야 한다. 블랙베리 10 OS를 탑재한 휴대폰은 모두 지원하며, Jolla 역시 지원한다. 소니 휴대폰의 경우 다이얼러에 *#*#7378423#*#*(SERVICE)을 입력한 다음 Service Info -> Configuration과 같은 메뉴에서(기종마다 세부 항목은 다를 수 있음) 부트로더 언락 상태와 함께 Available Speech Codec에 AMR-WB가 있는 지 여부로 판단 가능하다. 블랙베리 10 OS의 전화 통화 화면에서는 HD 보이스 사용 여부가 시간 표시줄 위에 나타나지만, 표시기가 없는 휴대폰의 경우 통화 음질 등으로 판단하는 방법밖에 없다.

IMG_20141030_202035

Enabling Qualcomm diagnostic mode on Jolla

Since Jolla uses Qualcomm MSM8930AA, it is possible to use Qualcomm diagnostic tools in theory. They are not available by default and the way to enable this functionality is not yet discovered. I poked various options of usb-moded but diagnostic mode did not came out. I ended up editing some files and finally managed to get the diagnostic mode on my Jolla.

DISCLAIMER: you may void your warranty, especially poking with various Qualcomm-related tools. You have been warned.

usb-moded files are located under /etc/usb-moded and there are several ini files defining modes. USB mode selection UI gives options for PC Suite, Developer mode, Charging only. Those two modes are defined in /etc/usb-moded/dyn-modes/developer_mode-android.ini and pc_suite-android.ini. The file contains USB gadget settings like vendor and product ID, and most importantly, USB mode.

What is exposed via USB interface is determined by /sys/class/android_usb/android0/functions file. Directly modifying sysfs values seems not to work, only via editing usb-moded configuration files. usb-moded changes these values accordingly to the INI file. This is setting for developer mode.

$ cat /etc/usb-moded/dyn-modes/developer_mode-android.ini 
[mode]
name = developer_mode
module = none
network = 1
network_interface = rndis0

[options]
sysfs_path = /sys/class/android_usb/android0/functions
sysfs_value = rndis
sysfs_reset_value = none
softconnect_path = /sys/class/android_usb/android0/enable
softconnect = 1
softconnec_disconnect = 0
idProduct = 0A02

To enable diagnostic mode, you can append diag into sysfs_value and extra lines like this (you must be root to edit INI files):

$ cat /etc/usb-moded/dyn-modes/developer_mode-android.ini 
[mode]
name = developer_mode
module = none
network = 1
network_interface = rndis0

[options]
sysfs_path = /sys/class/android_usb/android0/functions
sysfs_value = rndis,diag
sysfs_reset_value = none
softconnect_path = /sys/class/android_usb/android0/enable
softconnect = 1
softconnec_disconnect = 0
idProduct = 0A02
android_extra_sysfs_path = /sys/class/android_usb/android0/f_diag/clients
android_extra_sysfs_value = diag

You need to restart phone or “systemctl restart usb-moded.service” to take the effect. When the file is modified, selecting developer mode on USB connection also activates diagnostics interface on USB. On Windows system there is no driver available for newly added diagnostics port. You can use driver from other Qualcomm-based devices, but the device name should include “diagnostics port”. I used driver from LTE USB stick.

If device is normally detected, you can now use Qualcomm tools to poke Jolla’s radio. Be careful not to brick this part! They are independent from OS!

When there are problems in USB usage, restore the values to original. Back up your system before potentially dangerous operations!

Extracting official firmware image of Casio G’zOne LTE (C811)

Most stock rom of Casio G’zOne 4G LTE (C811) is extracted from stock devices after uploading corresponding firmware. Verizon also supports firmware restoration tool from PC. There were some efforts to extract real stock firmware from that image but that never happened. I analyzed the Verizon firmware restoration tool and how to extract (not flash) firmware images uploaded on NEC Casio server.

There are some INI files bundled with Verizon tool (TL-Bootstrap). It specifies base address where all required tools are uploaded. When executed, the program checks all required tools’ version from http://baseaddress/ToolVersion.txt, downloads newer version when available. Real upgrade processes are hidden in the tool downloaded by bootstrap. Latest version of firmware is checked via /files.txt which contains version, size and some other information. Downloading firmware itself is straightforward by using filename from the text file, but only latest version is available from official server. All previous versions were deleted.

The firmware consists of single ZIP file, which then contains single MBN file for flashing. Despite same extension as Qualcomm tools, it uses proprietary format to encode and encrypt the image. Metadata is located at the last 2KB of MBN file. It starts with header, something like version and number of partitions. Each partition record basic information of partition and “flags”. EXT4 partition images are stored in standard sparce format which could be restored using simg2img. Other images stored with trailing zero bytes stripped, with separate original size information. All binary data except header is XOR encrypted, which differs among partition and even among firmware version.

I deduced XOR keys by comparing “extracted” file system images with encrypted images, which share same header bytes. XOR key of EXT4 sparce partition is also easily deducible since they use standard Android magic numbers. Attached source code calculates XOR key and extracts file system image. Probably works on Linux and OS X.

eut_extract.c code is here: https://gist.github.com/peremen/71330cbb4a6556358b938e0e353255a6

Using the attached source code, you can obtain “pure” stock ROM which is not altered by flashing and dumping.