### 0.0.1 ModemManager 간섭으로 인한 USB 연결 끊김 현상 원인 및 비활성화 조치
QGroundControl을 띄워놓고 Pixhawk 보드에 USB 타이를 체결하는 순간, 기체의 파라미터가 5초 정도 술술 읽어지다가 돌연 연결이 끊어지며 먹통이 되는 공포스러운 현상을 겪게 되는 경우가 있다. 플래싱 타임 아웃이나 MAVLink 심박동(Heartbeat) 송수신 실패의 뒤편에는 리눅스 데몬의 스파이, 바로 ModemManager 가 독버섯처럼 도사리고 있다.
ModemManager의 멍청한 오지랖(Interference)
우분투 데스크톱 시스템에는 인터넷을 연결하기 위한 백그라운드 서비스 패키지들이 살고 있다. 그중 ModemManager 프로세스는 구형 3G/LTE USB 동글 장치가 포트에 꽂히는지를 24시간 감시하는 역할을 맡고 있다.
어느 날, 시리얼 통신을 지원하는 비행 제어기 보드(FMU)가 /dev/ttyACM0 (또는 USB0) 포맷으로 USB 잭을 물리며 들어온다. 안타깝게도 이 텍스트 기반 시리얼 포트 규격은 구형 인터넷 모뎀 단자와 하드웨어 식별 프로토콜이 매우 유사하다.
이때 ModemManager는 흥분하며 “아! 인터넷 다이얼 모뎀이 꽂혔구나!” 착각을 일으키고, 해당 포트의 읽기/쓰기 제어권을 QGroundControl이나 플래싱 스크립트로부터 강제로 낚아채 버린다(Snatching/Hijacking). 제어권을 빼앗은 모뎀매니저는 이 포트에 인터넷 접속용 AT 명령어(AT Commands) 텍스트를 마구잡이로 비행제어기 안쪽으로 쏴버린다.
황당한 AT 명령어를 갑작스레 융단폭격 맞은 피스호크 메인 칩셋은 패킷 처리 오류를 일으켜 MAVLink 파서(Parser)를 중단시키거나 커넥션을 아예 물리적으로 리셋(Reset)시켜 버린다. 이것이 바로 USB 5초 끊김 대참사의 전말이다.
근원적 비활성화(Deactivation) 및 숙청 타격
이러한 통신 하이재킹과 지연 현상을 원천적으로 분쇄하기 위해 제어 설계자는 반드시 시스템 메스(Mes)를 들어야 한다.
- 가장 무자비한 해결책 (서비스 말살): 당신의 개발 머신이 USB LTE 동글 따위로 인터넷을 잡을 일이 영원히 없는 데스크톱이라면,
sudo apt-get remove modemmanager명령으로 이 오만한 데몬을 패키지 트리 밖으로 깨끗이 숙청(Uninstall)해 버리는 것이 가장 완벽하고 통쾌한 물리적 마감 조치이다. - 선별적 우회책 (Udev Rules 봉쇄): 모뎀 매니저를 시스템 환경에 남겨두어야 한다면, udev 규칙 파일 속에
ENV{ID_MM_DEVICE_IGNORE}="1"이라는 특수 코드를 이식해야 한다. 모뎀매니저의 감시 센서망에 픽스호크 보드의 벤더 ID 스펙트럼이 포착되더라도, 이 환경 변수를 보면 “아, 이것은 무시해야 할 장비군” 하고 스캐닝 시도를 멈춘 채 조용히 물러난다.