ㅈㅅㄹ

제목이 뭐라 짓기 참 거시기 해서 어물쩡한 이름으로 적긴 했는데 다시말해 안드로이드 단말을 ADB 서버에서 인식할 수 있도록 하는 방법에 대한 설명이다. 윈도용 USB 디버깅 드라이버는 단말사나 구글을 통해 대충 배포되고 있으니 구해서 설치하면 되지만, 리눅스에선 딱히 뭘 받아서 설치할 필요 없이 udev에 rule을 추가하는 것 만으로 간단하게 USB 디버깅 연결을 설정할 수 있다. 주의할 점은 이 방식으로 설정한 USB 연결은 ADB에서만 한정된 것으로, FASTBOOT을 사용하려면 다른 방법을 써서 연결을 설정해 줘야 한다. 물론 FASTBOOT으로 롬 밀어 넣는 건 그닥 자주 쓸 일도 없고 뒤지기 귀찮아서 이때까지 윈도에서만 밀어 넣은 것 뿐이라 어떻게 설정해야 될 지 모른다. -_- 뭐 기회가 되서 뒤적거리다 알게 되면 포스팅할 지도 모르겠지만 현재로썬 딱히...

어쨌든, 리눅스에서 USB 디버깅 연결을 설정하려면 udev가 시스템에 돌아가고 있어야 한다. 뭐 요즘 리눅스 머신이라면 대충 다 깔려 있으니 걱정할 건 없겠고 그저 /etc/udev/rules.d에 룰 하나만 추가해 주면 된다. 

루트 권한으로 적당한 rule 파일을 만들어 준다. 가령 LGE 계열 안드로이드 단말은 다음과 같은 rule을 만들어 주면 된다. rule 파일명은 2digit-name.rules 의 형식으로 지정하는게 일반적이며, 파일명 처음의 숫자의 순서대로 rule을 매칭해보므로 이왕이면 9X 의 뒷 번호를 사용하는 게 보다 안전하다. 참고로 아래의 rule 파일은 90-LGE-android.rules 으로 사용하고 있다.

SUBSYSTEM=="usb|usb_device", SYSFS{idVendor}=="1004",MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb|usb_device", ATTR{idVendor}=="1004", ATTR{idProduct}=="618e", SYMLINK+="android_adb"

여기서 idVendor와 idProduct에 해당하는 16진수 문자열은 각각 제조사와 제품의 고유ID를 뜻한다. LGE의 경우 1004의 벤더ID를 가지고 있고, 안드로이드 단말에는 618E를 대체로 부여하고 있다. 구글 안드로이드 개발자 사이트를 뒤지다 보면 벤더ID의 목록을 발견할 수 있지만, 단순히 usb 장비를 연결한 상태에서 lsusb 커맨드로도 쉽게 알아낼 수 있다.

$ lsusb
Bus 002 Device 002: ID 046d:c01d Logitech, Inc. MX510 Optical Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 016: ID 1004:618e LG Electronics, Inc
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

만약 다른 회사의 단말을 사용한다면 lsusb 커맨드로 검색한 후 위의 rule 파일에서 idVendor, idProduct 값만을 변경하여 사용하면 무리 없이 작동할 것이다.

/etc/udev/rules.d 아래에 rule 파일을 만들었다면 udev 서비스를 다시 재시작 해 주어야 신규 추가된 rule을 적용할 수 있다. 아래의 명령어로 서비스를 재 시작 해 주며 된다. 물론 당연하겠지만 root 권한이 필요하다.

# service udev restart

단말 설정에서 usb 디버깅을 사용함에 체크하고 USB 연결을 한 후 adb devices 명령어를 사용하면, 단말이 성공적으로 디버깅 모드로 연결 되었음을 확인할 수 있다. 

$ adb devices
List of devices attached 
HT02LP903403 device