요약
와이파이 7 공유기에 직접 만든 펌웨어를 올려 320Msps 광대역 SDR 수신기로 바꿨습니다.
GitHub 사용자 h0m3us3r가 젬텍의 W1700K 공유기를 소프트웨어 정의 라디오(SDR, 전파를 디지털로 받아 소프트웨어로 처리하는 수신기)로 바꾸는 프로젝트를 공개했습니다. 미디어텍 펌웨어의 동작을 추적해 칩 초기화와 보정 과정을 레지스터 단위로 해독했습니다.
왜 중요한가
- 흔한 와이파이 칩이 최대 320MHz 폭의 전파를 한꺼번에 들여다보는 수신기로도 쓰일 수 있음을 보여 줍니다.
- 같은 칩셋을 쓰는 Banana Pi R4 보드에서도 돌아갈 것이라는 관측이 나와, 응용 범위가 넓어질 수 있습니다.
핵심 내용
- 미디어텍 MT7996 칩이 14비트 IQ(진폭과 위상을 함께 담은 원시 신호) 데이터를 최대 320Msps(초당 3억 2천만 샘플)로 받습니다.
- 에어로하 AN7581 칩이 이 데이터를 10기가비트 이더넷으로 리눅스 PC에 보냅니다.
- PC에서는 브라우저로 스펙트럼과 워터폴(시간에 따른 주파수 분포 그림)을 실시간으로 보며 이득과 주파수를 조절합니다.
- 시험한 기기 기준으로 약 2.08~2.75GHz와 4.65~7.58GHz 구간에 맞출 수 있고, 주파수를 바꾸는 데 1ms 안팎이 걸립니다.
- 수신 전용이라 송신 경로는 꺼 두었고, 설치하면 기존 운영체제가 지워지므로 백업을 꼭 보관하라고 당부합니다.
HN 반응
- 문서가 AI가 쓴 듯 난해하다는 비판과, 역공학 시제품으로서 이미 바로 쓸 수 있는 SDR이라는 반론이 맞섰습니다.
- SDR을 어디에 쓰느냐는 질문에는 이웃의 날씨 센서, 항공기 신호, 차량 타이어 공기압 신호를 엿본다는 경험담이 이어졌습니다.
이 개발자는 ESP32 Wi-Fi 마이크로컨트롤러로도 SDR을 만든 적이 있습니다 [1]. 정말 대단하네요!
이런 시도가 계속돼서 흔한 Wi-Fi 카드에도 이런 기능이 더 많이 생겼으면 좋겠습니다. 그러면 아무 노트북이나 SDR로 써서, 적은 예산으로 재미있고 쓸모 있는 온갖 활용을 할 수 있을 테니까요.
https://github.com/h0m3us3r/eSpDR
"젠장, 차고 비밀번호를 까먹었네"
"아, 괜찮아"
5GHz 무선도 있는 ESP32-C5에서 되면 멋질 것 같아요. S3는 2.4GHz만 지원하거든요.
저도 엄청 기대했는데, 평범한 Home Assistant 사용자 입장에서는 어디에 쓸지 도무지 모르겠더라고요, ㅋㅋ
참고로 같은 칩셋이니 NVMe용 PCIe가 내장된 Banana Pi R4에서도 작동할 거라고 거의 확신합니다.
오래된 서비스 모니터를 수없이 수리해 봤고 SDR도 만져 본 사람으로서, 이건 정말 놀랍습니다. 서비스 모니터를 만들려면 기계 가공과 하드웨어 작업이 엄청나게 많이 들어가지만, 데스크톱 CNC와 저렴한 PCB, 수십 GHz까지 올라가는 흔한 범용 부품이 있으니 이제 가능성은 끝이 없습니다.
저라면 방열판을 단 100와트 DC~5GHz 20dB 고정 감쇠기, 0~110dB 스위치식 감쇠기, 5GHz 저역 통과 필터, 7~12GHz 국부 발진기/믹서 업/다운 컨버터를 붙일 겁니다. 그러면 5GHz까지 쓸 수 있는 작고 성능 좋은 서비스 모니터가 나옵니다. 8)
서비스 모니터요?
통신 서비스 모니터는 무전기를 점검하고 수리할 때 쓰는 장비입니다. 최근까지 대형 기관 대부분은 전용 채널에서 VHF/UHF FM 무전기로 통신했습니다. 서비스 모니터는 보통 이런 무전기의 출력 전체를 받아내면서 전력, 주파수, 왜곡 등을 측정할 수 있는 장비입니다. 수신기를 조정할 때 쓰는 다양한 신호도 만들어 낼 수 있습니다.
저렴한 구형 모델은 대부분 거의 DC부터 1GHz까지를 다룹니다. 제가 가진 IFR 2947a는 1.05GHz까지 올라갑니다.
이베이에 나온 예시입니다.
https://www.ebay.com/itm/168770412399
제가 가진 모델의 사양서(pdf)는 이쪽입니다.
https://www.testmart.com/webdata/mfr_pdfs/aerofl/2947a.pdf
하하, 저희 아버지가 20~30년 전에 경찰·소방용 차량 탑재형이나 휴대용 송수신기를 수리하실 때 쓰시던 Cushman보다 훨씬 번쩍번쩍하네요 :P
왜 4GHz죠?
글은 수정했습니다. 보통은 거울상 신호(미러 이미지)가 새어 들어와서 가짜 응답을 만드는 문제를 피하고 싶어서요. 실제 RF 필터는 차단 특성이 무한히 가파르지 않아서, 처음에는 4GHz 저역 통과 필터면 5GHz에서 충분히 감쇠되어 문제가 없을 거라고 생각했습니다. 그러다 5GHz 저역 필터와 7~12GHz 국부 발진기로 바꿔서 필터가 할 일을 더 쉽게 만들었습니다. 또 VCO는 변동 폭이 퍼센트로 작을수록 다루기 쉽습니다.
그러니 수신 모드의 신호 경로는 이렇게 됩니다.
N 커넥터 / 20dB 100와트 패드 / 스위치식 감쇠기 / 저역 통과 필터 / 프런트엔드 다이오드 / 믹서 / DSP용 라우터 보드
이와 별개로, 감쇠기를 건너뛰는 두 번째 경로도 보통 있는데, 이 경로는 허용 최대 전력이 더 낮습니다.
역방향 경로를 쓰면 DC(에 가까운 주파수)부터 5GHz까지 신호를 만들어 낼 수도 있습니다.
와, 진짜 멋지네요! DC부터 빛까지는 아니지만, 5GHz에서 320Msps 수신기를 이보다 싸게 만드는 방법은 저는 모르겠습니다.
삼성이 서드파티가 자기네 휴대폰의 FM 라디오를 쓰려면 계약서에 서명하라고 요구하는 것도 이런 이유일까요? 요즘 휴대폰 라디오는 대부분 소프트웨어 정의 방식이라서요?
FM 라디오가 아직도 있는 휴대폰이 있나요?
전 세계에서 팔리는 삼성 저가형 폰 중에 아직 FM 라디오가 있는 게 많아요.
일반인은 SDR을 어디에 쓰나요? 진짜 궁금합니다. 아니면 그냥 해 보면 멋있어서 하는 건가요?
소비자용 온도·습도·강우·풍속 센서는 대부분 433MHz 대역의 단순한 무선 프로토콜로 측정값을 실내 표시 장치에 보냅니다.
컴퓨터에 RTL-SDR 동글을 꽂고 rtl_433 프로그램을 쓰면 그 통신을 모니터링할 수 있습니다. 이 프로그램에는 아주 많은 센서의 프로토콜용 디코더가 기본으로 들어 있습니다.
저도 그렇게 구성해 놓았는데, 제 센서(AcuRite 실외 온도계와 AcuRite 냉장고/냉동고 온도계에 딸린 센서 두 개)뿐 아니라 이웃집의 온도 센서, 습도 센서, 토양 수분 센서, 풍속·풍향 센서, 우량계, 심지어 타이어 공기압 센서까지 보입니다.
MQTT를 설정해서 rtl_433이 그 방식으로 데이터를 보내게 하고, Home Assistant가 그걸 받아서 표시하게 할 수도 있습니다. Home Assistant는 여러 센서 종류를 처리할 줄 압니다.
저는 아직 거기까지는 안 했습니다. 지금은 rtl_433이 모든 것을 JSON 레코드로 파일에 이어 붙여 기록하게 해 둔 상태입니다. 스크립트가 그 파일을 읽어서 제가 관심 있는 센서를 찾아 데이터를 sqlite 데이터베이스에 저장합니다.
지금은 RTL-SDR 동글 5개가 서로 다른 대역(137, 433, 912, 978, 1090MHz)을 박스 하나로 스트리밍하고 있습니다. 동네 기상 관측소부터 우리 콘도의 수도 계량기, 근처 항공기의 ADS-B/UAT 송신까지 온갖 것이 잡힙니다. 지나가는 차의 타이어 공기압 센서 신호도 보여요(여러분 중 몇 분은 바람 좀 넣으셔야겠습니다!).
대부분은 그냥 재미로 합니다. 주변에 떠다니는 전파를 몰래 들여다보는 걸 좋아하거든요.
예전에는 SDR 분야에 더 깊이 빠져 있어서 무선 호출기 신호를 리버스 엔지니어링한 적도 있습니다. 몇 년 전까지만 해도 병원에서는 무선 호출기를 널리 쓰고 있었습니다(그것도 전부 평문으로요).
저는 SDR로 무선과 변조를 배우고 있습니다(Claude 교수님과 함께요. 학습에 정말 좋습니다! 특히 뭘 배우고 싶은지 정확히 알고, 관련 분야에 충분한 배경지식이 있으면 더 그렇습니다. 저는 오디오와 이미지 DSP가 그렇고, 그래서 Claude가 내주는 연습 문제가 짧고, 와닿고, 그러면서도 깨우침을 줍니다). 저가형 433 리모컨 다음 두 번째 수업 주제가 FLEX와 무선 호출기였는데, 도시에 이런 신호가 아주 많고 그중 절반쯤은 몇 블록 떨어진 병원에서 나온 메시지였습니다. 미국에서는 여전히 아주 널리 쓰입니다(저는 뉴욕에 삽니다). 그런 신호로 암호화 하나 없이 100% 평문으로 뭐가 방송되는지 보고 큰 충격을 받았습니다. 환자 이름, 나이, 병명, 의사 이름, 병실, 진료과, 약 처방과 도움 요청까지... 극도로 민감한 개인식별정보(PII)가 엄청나게 많이 흘러나옵니다.
주제에서 벗어난 얘기지만, "Claude 교수님과 함께요. 학습에 정말 좋습니다! 특히 뭘 배우고 싶은지 정확히 알면"이라는 말을 보니
"으악, 부정행위 좀 봐!" 하는 반AI 주장이 늘 떠오릅니다.
부정행위 문제가 커진 건, 교사·교수·감독관이 이 도구를 이해하는 데 격차가 있었고 지금도 있기 때문입니다. 예전에는 아이들이 위키백과를 베꼈고, 어휘력이 꽤 좋은 아이는 한동안 아무도 눈치채지 못했습니다. 그러다 모두가 따라 할 수 있다고 생각하게 되자 채점자들이 의심하기 시작했고, "이거 위키백과 아니야?"를 가려내는 소프트웨어 수요가 생겨서 업체들이 그걸 만들었고 채점자들이 도입했습니다. 필기시험으로 되돌아간 사례도 있었고, SAT 같은 '중요한' 시험에서는 필기시험을 계속 써 왔습니다.
그리고 교사들이 학생의 부정행위를 막으려는 유일한 이유는, 학생들이 결국 부정행위가 통하지 않는 시험으로 향한다는 걸 알기 때문입니다. 새로운 부정행위가 생기면 새로운 적발 방법도 필요해질 겁니다.
의욕 있는 학습자는 지금, 10년 전의 의욕 있는 학습자와 비교도 안 되는 능력을 갖고 있습니다.
물론 그 학습자가 누구나 인정하는 학습·연구 방법을 지킨다는 전제가 붙습니다. 예컨대 단일 출처는 절대 무조건 믿지 않고, 특히 검증되지 않은 출처를 세 다리 건너 요약한 것은 더 그렇다는 것이죠.
저도 LLM만큼이나 확신에 차서 틀린 정보를 알려 주는 교수님들을 만나 봤지만, 제가 둘 중 누구의 말이든 그냥 고개만 끄덕였다면 그건 그분들 잘못이 아닙니다.
재미로 하는 것도 맞지만, 전문적인 용도도 있습니다. 특히 간섭이나 잡음을 찾는 데 씁니다. "내 2.4GHz 스펙트럼이 얼마나 붐비나?" 같은 걸 물어볼 수 있죠.
RTL SDR은 SDR 입문용 관문 약물 같은 존재입니다. 대역폭이 제한적이라 HDTV 스트림을 잡을 거라고 기대하면 안 됩니다. 하지만 AM/FM, 아마추어 무선 대역, VHF/UHF 신호 등은 충분히 들을 수 있습니다.
RTL-SDR을 사고 싶지 않다면 KiwiSDR을 검색해 보세요. 30MHz 아래 주파수를 스트리밍해 주는 SDR입니다. 전 세계에 있는 KiwiSDR에 접속할 수도 있습니다.
그러다 근질근질해지면 HackRF를 구하든, 아마추어 무선 면허를 따든, 가려운 곳을 긁어 줄 다른 무엇이든 하시면 됩니다.
고마워요, Claude
네, 이런 글을 읽으면요.
"BRINGUP, from a cold radio: what MediaTek's ROM patch does at download (XO, pin mux, the CONN AFE calibration pulse per band, the A-die TOP init by chip ID, pads and CONN switch, the A-dies' eFuse trims); the UMAC pool layout; the common and per-band PHY initialisation; on each A-die the RF init tables, the resistor calibration and the RC filter calibration; the FEM outputs and the crystal trim."
("BRINGUP, 콜드 상태의 라디오에서: 다운로드 시 MediaTek ROM 패치가 하는 일(XO, 핀 먹스, 대역별 CONN AFE 보정 펄스, 칩 ID별 A-die TOP 초기화, 패드와 CONN 스위치, A-die의 eFuse 트림), UMAC 풀 배치, 공통 및 대역별 PHY 초기화, 각 A-die의 RF 초기화 테이블, 저항 보정과 RC 필터 보정, FEM 출력과 크리스털 트림.")
다른 언어를 영어로 어설프게 번역한 것도 아니고, 그냥 단어를 늘어놓은 겁니다.
이런 글과 읽을 수도 없는 수학 "증명"을 보면, 여기서 무슨 이점이 있는지 정말 모르겠습니다.
제가 여기서 읽어 낸 건, 문서만 있다면 이 하드웨어용으로 Wifi7 애플리케이션보다 더 범용적인 SDR 애플리케이션을 쓸 수 있다는 점입니다. LLM 모델이 이런 동작을 끌어낼 수 있다는 게 그 존재 증명으로는 괜찮은 사례일지도 모르겠네요?
무선 칩이나 펌웨어를 다뤄 본 사람이라면 말이 되는 표현입니다.
XO(크리스털 오실레이터)와 핀 먹스(칩 핀 멀티플렉서, 쉽게 말해 핀에 역할을 할당하는 것)는 무선뿐 아니라 임베디드 작업에서 흔히 쓰는 용어입니다.
보통 프로젝트에서는 이런 용어를 별도의 구현 문서에 숨겨 두기 때문에, 가볍게 읽는 독자가 헷갈릴 일이 없죠.
네, 거기 무선 용어가 들어 있긴 하죠. :-) 그래도 저도 전용 무선 칩용 펌웨어/게이트웨어 드라이버를 같이 써 본 사람인데, 그 문단은 거의 이해가 안 됩니다. AMD/Xilinx의 RFSoC 문서조차 훨씬 잘 쓰여 있는데, 그것도 꽤나 빽빽한 문서거든요.
이 프로젝트는 칩셋에 대한 벤더급 문서를 목표로 한 게 아닙니다. 리버스 엔지니어링에 성공했고, 그 위에 무언가를 만들 수 있을 만큼의 문서는 갖춘 프로젝트입니다.
자유롭게 공유된 리버스 엔지니어링 개념 증명을 벤더가 제공하는 1차 문서와 비교하는 건 터무니없이 높은 기준입니다.
몇 시간 전에 공유된 멋진 프로젝트입니다. 벤더 1차 문서 수준이 아니라고 비판하는 건 정말 악의적인 비판입니다.
좋습니다. 그러면 이게 본격적인 프로젝트가 아니라 단순한 개념 증명(PoC)이라고 칩시다. README.md의 첫 문단은 이렇습니다.
"Turns a Gemtek W1700K Wi-Fi 7 router into a wideband software-defined receiver. The router's MediaTek MT7996 radio captures raw 14-bit IQ at up to 320 Msps, its Airoha AN7581 SoC streams it over 10 GbE, and a Linux host shows it as a live spectrum and waterfall in the browser, with the receiver's controls next to it."
("Gemtek W1700K Wi-Fi 7 라우터를 광대역 소프트웨어 정의 수신기로 바꿔 줍니다. 라우터의 MediaTek MT7996 라디오가 최대 320Msps로 14비트 원시 IQ를 캡처하고, Airoha AN7581 SoC가 이를 10GbE로 스트리밍하며, 리눅스 호스트가 이를 브라우저에서 실시간 스펙트럼과 워터폴로 보여 주고 그 옆에 수신기 제어 기능을 둡니다.")
이 문단이 읽는 사람에게 "이 PoC 좀 보세요!"라고 말하는 것 같습니까?
그러니까 한 사람이 Claude Code로 기기를 리버스 엔지니어링했다는 얘기입니다. 좋아요, 그걸 README로 쓰세요. "이건 Claude Code로 이 기기를 리버스 엔지니어링해서 얻은 결과물이고, 어떻게 동작하는지는 저도 모르지만, 제가 보여 드리는 스펙트럼이 동작한다는 증거입니다"라고 적혀 있었다면 말입니다.
이른바 이 분야에 "숙련된" 우리 같은 사람에게 이건 "이거 보세요, 엄마 신용카드 번호를 넣어서 유료 결제 벽을 우회했어요!"로 읽힙니다. 여기서 핵심은 Claude가 뭔가를 리버스 엔지니어링할 수 있다는 것이고, 그건 여기 올라왔던 "All the things I own, owned."라는 제목의 글이 이미 가장 잘 보여 줬습니다.
제가 답글을 단 댓글은 그냥 "Thanks Claude."라고 했습니다. 건조하지만 정확한 말이죠. 그리고 제가 보기에, 자기가 이해하지도 못하는 도구로 "한" 일, 결과물도 이해하지 못하는 일을 자랑하는 것에 대한 비판은, 90년대와 2000년대의 스크립트 키디를 강하게 떠올리게 합니다. 그들은 "이거 보세요, <웹사이트>의 루트를 땄어요."라고 당당하게 외쳤지만, 실제로 한 건 Metasploit을 돌리고 이런저런 스크립트를 RCE 취약점이 나올 때까지 줄줄이 돌린 다음 그걸 이용해(또 다른 스크립트로) 루트를 딴 것뿐이었습니다.
그러니 언젠가 벤더가 이 모델이 악용한 허점을 패치하고 관리 아키텍처를 다시 짜야 할 겁니다. 좋은 소프트웨어를 쓰지 못해서 "지적 재산"이 부적절하게 노출됐다면 칩 회사들에게 벌금을 물게 될 수도 있고요. 그래서 이 제품들을 범용 SDR로 쓰는 데 한 걸음이라도 가까워졌습니까? 아니요, 아닙니다.
그와 대비되는 사례가 RealTek DVB-T 튜너 칩을 리버스 엔지니어링한 사람들입니다. 그들은 자기들이 한 일과 그 작동 원리를 이해하고 있었고, 그 결과 수많은 RTL-SDR 동글이 나와서 많은 사람이 SDR을 접하게 됐습니다.
이건 정말 멋진 프로젝트이고, 이 기기들을 리버스 엔지니어링하는 출발점이 될 수 있는 흥미로운 개념 증명이 맞습니다. 하지만 저자는 이걸 "아키텍처" 같은 항목까지 문서화된, 바로 쓸 수 있는 완성 프로젝트처럼 내놓기로 했습니다.
저자도, 하물며 거대 언어 모델은 더더욱, 이 펌웨어가 어떻게 동작하는지 전혀 모를 거라는 생각이 듭니다.
무슨 말씀이세요? 주파수를 맞추고 IQ를 이더넷으로 스트리밍하고 있잖아요. 이건 범용 SDR입니다! 지금 당장 범용 SDR로 쓸 수 있어요.
저도 자기가 뭘 하는지 제대로 아는 사람(아니면 하다못해 Claude에게 더 자세히 써 달라고 시킨 사람)이 수신기의 "진짜" 핵심 내용을 좀 더 알려 줬으면 합니다(IQ 불균형 보정은 어떻게 작동하나? 다이내믹 레인지는 실제로 얼마나 되나? 프런트엔드를 얼마나 세밀하게 설정할 수 있나?). 하지만 이 프로젝트가 Claude로 작성됐다는 이유만으로 현 단계에서 스크립트 키디 수준이라거나 쓸모없다고 주장하는 건 공정하지 않다고 생각합니다.
그리고 Mediatek이 자기네 IP를 노출했다고 누가 Mediatek에 벌금을 물리겠어요?
에이, 아니죠. 죄송하지만 진입 장벽이 이제 엄청나게 낮아졌습니다. 특히 들어가는 노력 면에서요.
20년쯤 전이었다면 이건 말 그대로 SF였을 겁니다. 그때는 USRP를 gnu-radio에 붙여서 돌아가게 하는 것만 해도, 알맞은 외부 클럭 하드웨어를 찾고, 자료를 읽고 이것저것 시험해 보고 스크립트를 쓰는 일이 엄청나게 많아서 시간도 노력도 어마어마하게 들었습니다. 토큰을 쏟아부어서 적어도 출발점을 얻을 수 있다는 건 제가 보기엔 굉장한 일입니다.
초월적인 지능과 대화하는 느낌이 이런 건가요?