Converting a $20 4G wireless hotspot into a texting device
20달러짜리 4G 무선 핫스팟을 문자 메시지 전용 기기로 개조하기
저자는 AliExpress에서 20달러에 구매한 MF800 4G 핫스팟에 OpenStick 기반 Linux를 올리고, Clicks 키보드와 Sharp Memory LCD, 자체 설계한 PCB를 결합해 문자 전용 '덤폰'을 만들었습니다. 기판을 물리적으로 절단하고, Android 디바이스 트리를 추출해 SPI 디스플레이를 구동하며, DRM 드라이버에 디더링까지 추가한 과정이 상세히 기록되어 있습니다.
- 주제
본문
책상 위에 굴러다니던 세 가지 부품 — 20달러짜리 4G 핫스팟 MF800, iPhone용 Clicks 키보드, Sharp Memory LCD — 가 우연히 결합되어 탄생한 프로젝트입니다. 저자는 메시지 전용 '멍청한 기기(dumb device)'를 목표로, Android가 돌던 핫스팟에 Linux를 올리고 하드웨어를 통째로 재설계했습니다.
OpenStick으로 Linux 올리기
MF800은 WiFi, Bluetooth, 디스플레이, 배터리를 갖추고 완전히 언락된 상태로 20달러 이하에 배송되는 Qualcomm MSM8916 계열 기기입니다. 기본 펌웨어는 Android지만 adb가 기본으로 열려 있어 adb → EDL 모드로 진입해 리플래시할 수 있고, PCB의 핀을 쇼트시켜 EDL로 바로 들어갈 수도 있습니다. 저자는 반드시 중요 파티션을 백업하고, 동작 중인 Android에서 디바이스 트리를 추출하라고 조언합니다 — 이것이 이후 작업의 '정보의 금광'이었다고 합니다. OpenStick 프로젝트 덕분에 Linux 설치 자체는 쉽지만, 진짜 고통은 드라이버와 디바이스 트리 단계에서 시작됩니다.
Clicks 키보드와 커스텀 PCB
Clicks 키보드는 MFi 인증 경험에서 예상한 대로, Apple 전용 인증 엔드포인트가 붙은 평범한 USB 키보드였습니다. iPhone이 아닌 기기에서는 그냥 일반 USB 키보드로 동작합니다. 내부는 CH32V203 MCU 기반이라 커스텀 펌웨어도 가능하지만 당장은 필요 없다고 판단했습니다. 한편 MF800에는 5V 부스터가 없다고 보고, 저자는 USB 호스트 전원, 호스트/디바이스 모드 전환, 디스플레이 전원 및 신호 레벨 변환을 담당하는 커스텀 PCB를 설계해 조립 포함으로 발주했습니다. 양면 조립 비용을 아끼기 위해 부품은 한 면에 몰았습니다.
기판 절단과 USB 배선
Clicks 케이스에 맞추기 위해 MF800 기판을 가로 방향으로 잘라냈는데, 한쪽 컷이 배터리 연결 라인을 끊어 나중에 패치가 필요했습니다. 절단 후에도 기기는 즉시 부팅되었고, 중요한 배선이 그 영역을 지나지 않았던 것으로 확인되었습니다. USB 배선은 처음에 실패했으나 dmesg에서 'high-speed' 열거 시도를 발견하고, 데이터 선을 더 꼬아주자(twisted pair) 동작했습니다. 반대 방향은 AliExpress 어댑터가 CC 라인을 제대로 배선하지 않은 것이 원인이었습니다.
SPI, 디바이스 트리, DRM 드라이버
추출한 Android 디바이스 트리에서 디스플레이 SPI 핀을 파악해 gpioset으로 검증했습니다. Qualcomm SPI 드라이버는 'linux,spidev' 호환 문자열로는 spidev를 노출하지 않아 'rohm,dh2228fv'로 속였고, CS 핀 처리도 제대로 안 되어 libgpiod로 수동 토글했더니 디스플레이가 동작했습니다. 이후 ardangelo의 sharp-drm-driver를 커널 모듈로 빌드해(6.12.1-msm8916 커널) 적용했고, 최종 디바이스 트리에서는 CS 로직을 디스플레이 드라이버가 처리하도록 했습니다. 흑백 임계값 방식의 한계를 보완하기 위해 sysfs로 켜고 끌 수 있는 디더링 옵션과 알고리즘 선택 기능을 드라이버에 추가했고, 원본 드라이버의 메모리 누수를 발견해 패치도 보냈습니다.
인클로저와 남은 과제
Apple이 USB-C 커넥터 삽입 깊이를 공개하지 않아 정품 케이블을 측정해 보간하는 방식으로 치수를 잡았고, 최종적으로는 3D 프린터 접근이 어려워 핫글루로 케이스를 조립했습니다. 키보드 케이스는 공구 없이 잘라내 모서리가 거칠고, 전원 버튼용 컷아웃을 깜빡해 핀으로 누르는 방식으로 해결했습니다. 배터리 드라이버는 전압(uV)과 충전 플래그만 제공해 배터리 퍼센트 로직은 앱에서 처리할 예정이며, 가장 큰 미해결 과제는 슬립/전력 관리입니다. 향후 터치스크린이나 스크롤 휠, 소형 스피커·진동 추가를 계획하고 있습니다. 모든 설계 파일은 GitHub에 공개되어 있으며, 소프트웨어 부분은 실사용을 통해 다듬은 뒤 공개할 예정이라고 밝혔습니다.
원문: bkovac.github.io (via Lobsters) / 번역·요약: Trawling