TECH 으로 돌아가기
TECH HACKER NEWS 오늘 8분 읽기 27 READS

계산기로 리눅스 돌리기: HP 프라임 G2 포팅이 보여주는 것

계산기로 리눅스 돌리기: HP 프라임 G2 포팅이 보여주는 것
SOURCE IMAGE · HACKER NEWS

임베디드 개발자 레미 판 엘스트(Remy van Elst)가 자신의 블로그에 그래핑 계산기 HP 프라임 G2에서 리눅스를 부팅시킨 과정을 정리해 공개했다. 이미 존재하던 오래된 비공식 포팅을 되살리고 손질해 콘솔 로그인, 터치스크린, X11 그래픽 환경까지 동작하도록 만든 작업이다. 계산기에서 리눅스를 돌린다는 것 자체는 실용성과는 거리가 먼 취미 프로젝트지만, 그 과정에서 드러나는 하드웨어 사양과 잠금 정책, 그리고 디바이스 드라이버를 직접 뜯어고치는 과정은 임베디드 실무자에게 꽤 시사적이다.

계산기라기엔 과한 하드웨어

필자가 이 기기에 주목한 이유는 계산 기능이 아니라 사양이다. 2013년 출시된 HP 프라임은 2018년 G2로 하드웨어 개정을 거쳤는데, G2는 i.MX 6 UltraLite 기반 ARM Cortex-A7 CPU에 256MB DDR3 램, 512MB 내장 저장소를 갖췄다. 필자는 이를 두고 "계산기 키보드가 달린 소형 임베디드 리눅스 머신에 가깝다"고 표현한다. 실제로 그가 본업에서 다루는 커피 머신 하드웨어가 비슷한 i.MX6 모듈 위에서 Yocto 기반 C++/Qt 애플리케이션을 돌린다는 점을 감안하면 과장이 아니다. 다만 정작 프라임 G2의 정식 펌웨어는 리눅스가 아니라 FreeRTOS 위에서 돌아간다. 이전 세대인 G1은 400MHz ARM CPU에 32MB 램을 얹고 Besta OS라는 커스텀 RTOS를 사용했다.

경쟁 기종과 비교하면 격차가 두드러진다. TI 84+ CE는 48MHz eZ80을, 카시오 FX-CG50은 118MHz의 르네사스 SH7305 계열을 쓴다. 뉴메릭스(Numworks)의 최신 모델은 550MHz Cortex-M7까지 올라가지만 램은 마이크로컨트롤러 수준인 수백 KB에 그친다. 리눅스 포팅 사례가 확인되는 기종은 프라임 외에 TI Nspire CX(II) 정도로, 이쪽은 396MHz ARM CPU에 64MB 램, 128MB 플래시를 갖춰 아치 리눅스가 올라간 사례가 있다. 계산기라는 카테고리 안에서 리눅스가 구동 가능한 물건은 여전히 손에 꼽는 셈이다.

잠금 정책과 소유권 문제

필자는 자신이 구입한 기기에는 루트 권한 확보 수단이 있어야 한다는 원칙을 밝힌다. 잠금 부트로더나 취약점을 통해 관리자 권한을 얻지 못하는 기기는 공장을 떠나는 순간 전자 폐기물이나 다름없다는 관점이다. 계산기의 경우 사정이 조금 다른데, 시험 부정행위 방지를 위한 이른바 '시험 모드' 때문에 제조사들이 기능을 잠그는 흐름이 있기 때문이다. 텍사스 인스트루먼츠는 초기에 지원하던 어셈블리 코드 실행을 이후 제한했고, 뉴메릭스도 후속 펌웨어에서 잠금을 강화했다. 반면 HP 프라임은 애초에 어셈블리를 지원하지 않고 PPL이라는 자체 베이직 계열 언어만 제공했기에 빼앗길 기능이 없었다는 지적이다.

다만 원문에는 이 잠금 여지를 짐작하게 하는 HP 직원의 언급이 인용돼 있다. 시스템을 완전히 암호화하고 잠그는 기능이 새 칩에 포함돼 테스트까지 마쳤으며, 필요하면 켜겠다는 내용이다. 마우스·키보드·프린터 펌웨어에 악성코드가 심겨 네트워크를 공격한 사례가 드러난 뒤 나온 기업 보안 지침의 일환이라는 맥락도 함께 붙어 있다. 현재는 검증 용도로만 쓰이지만 여지는 남아 있다는 뜻으로, 지금 리눅스 포팅이 가능한 것이 언제까지나 보장되는 상태는 아님을 시사한다.

드라이버를 직접 뜯어고친 과정

실제 포팅은 매끄럽지 않았다. 기존 4.14 커널 기반 포팅은 저장소 브랜치가 사라지고 빌드가 깨졌으며 디바이스트리 파일도 손상돼 있어, 필자는 소프트웨어 헤리티지(Software Heritage) 아카이브로 저장소를 복원한 뒤에야 빌드를 살렸다. 원본 계산기 소프트웨어를 지우지 않으려고 NAND에 플래시하지 않고 램에서만 구동했다. 키보드는 처음엔 주황색으로 표시된 문자만 입력돼, 커널의 imx_keypad.c 드라이버를 패치해 ALT(Alpha) 키가 눌렸을 때 다른 키코드를 보내도록 고쳤다. 램 부팅 이미지 용량 한계도 커널 설정과 u-boot 오프셋을 조정해 15MB에서 130MB까지 늘렸고, 로그인 화면이 뜨지 않던 문제는 init 스크립트의 getty 설정으로 해결했다.

가장 까다로운 부분은 터치스크린이었다. 기존 포팅과 러시아어 자료들은 Goodix 드라이버를 썼지만 필자 기기에서는 해당 i2c 주소가 잡히지 않고 엉뚱한 0x26 주소에 정체불명 장치가 있었다. 원시 i2c 메시지를 분석한 끝에 이것이 일리텍(Ilitek) ILI211X 계열임을 알아냈고, 신형 커널 드라이버를 참고해 멀티터치와 압력 감지 같은 비필수 기능을 걷어낸 전용 드라이버를 작성했다. HP가 Goodix 스크린 단종 이후 화면 부품을 교체했다는 프랑스어 포럼 글이 이 현상을 뒷받침했다. USB 시리얼 모듈을 모듈 방식으로 올리면 기기가 멈추던 문제는 커널에 정적으로 포함시켜 회피했다.

결과적으로 콘솔 로그인 후 startx로 twm 창 관리자와 xeyes, xclock, xcalc를 띄울 수 있고, 롱 프레스는 우클릭으로 처리된다. 재미로 타이니 C 컴파일러(tcc)까지 넣어 계산기 위에서 직접 C 코드를 컴파일해 실행할 수 있게 했고, 둠(Doom) 구동 스크립트도 포함됐다. 소스와 사전 빌드 패키지는 깃허브에 공개돼 있으며, uuu 도구로 램에서 부팅한 뒤 비밀번호 없이 root로 로그인하는 방식이다.

이 프로젝트가 실무적으로 주는 교훈은 리눅스 계산기 자체가 아니라 그 접근 방식에 있다. 벤더가 문서화하지 않은 하드웨어를 i2c 덤프만으로 식별하고, 낡은 커널 드라이버를 신형 코드에서 역이식하며, 부트 오프셋을 손봐 제약을 우회하는 흐름은 임베디드 개발에서 흔히 마주치는 문제 해결의 축소판이다. 동시에 한계도 분명하다. 기기를 열어 나사를 풀고 미세한 패드 두 곳을 단락시켜야 하며, 잘못하면 원래 HP 소프트웨어로 부팅하지 못하는 복구 불능 상태에 빠질 수 있다. 필자 스스로 NAND 플래시 스크립트는 테스트하지 않았고 다른 종류의 터치스크린이 달린 기기는 검증하지 못했다고 밝히고 있어, 이 포팅은 실사용 도구라기보다 하드웨어를 온전히 자신의 것으로 만들려는 탐구의 기록에 가깝다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://raymii.org/s/articles/But_can_your_calculator_run_Li...
SHARE
처리 중...