모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 오유인페이지
    개인차단 상태
    REGENTAG님의
    개인페이지입니다
    가입 : 11-07-31
    방문 : 3153회
    닉네임변경 이력
    회원차단
    회원차단해제
    게시물ID : programmer_10108
    작성자 : REGENTAG
    추천 : 2
    조회수 : 7903
    IP : 122.38.***.234
    댓글 : 4개
    등록시간 : 2015/05/15 23:44:25
    http://todayhumor.com/?programmer_10108 모바일
    안드로이드와 PC간의 USB 통신 (1)
    <div>업무하면서 찾았던 자료들을 정리하는 중입니다.</div> <div>머리속에 알고 있는 내용인데도 글로 쓰려니 오래 걸리네요...</div> <div>실제로 개발했던 코드는 군용 S/W라 코드를 가지고 나올 수 없어서 머리속에 있는 것만 가지고 군과  관련없는 기술적인 내용만 정리하려니 더 오래 걸리는 것 같습니다. ㅠㅠ</div> <div><br></div> <div>이 글은 제 Github Page에 올린 내용을 복사한 것입니다.</div> <div><a target="_blank" href="http://regentag.github.io/android/2015/05/15/android-usb-communication-1/">http://regentag.github.io/android/2015/05/15/android-usb-communication-1/</a></div> <div><br></div> <div><br></div> <div><br></div> <div><header class="post-header" style="margin-bottom:30px;color:#111111;font-family:'맑은 고딕', sans-serif;font-size:16px;line-height:24px;background-color:#fdfdfd;"><h1 class="post-title" style="margin:0px 0px 15px;padding:0px;font-weight:300;font-size:42px;letter-spacing:-1px;line-height:1;">안드로이드와 PC간의 USB 통신 (1)</h1> <p class="post-meta" style="margin:0px 0px 15px;padding:0px;font-size:14px;color:#828282;">May 15, 2015</p></header><article class="post-content" style="margin-bottom:30px;color:#111111;font-family:'맑은 고딕', sans-serif;font-size:16px;line-height:24px;background-color:#fdfdfd;"><h1 style="margin:0px 0px 15px;padding:0px;font-weight:300;">시작하기 전에</h1> <p style="margin:0px 0px 15px;padding:0px;">안드로이드를 운영체제로 사용하는 모바일 기기들은 대부분 와이파이를 비롯한 무선 인터넷을 통하여 다른 시스템과 통신을 하는 것이 일반적입니다. 하지만 기술적 또는 절차적 제한으로 인하여 무선 인터넷을 사용할 수 없는 환경은 아직도 존재하고, 그러한 환경에서 모바일 기기 내부의 자료를 갱신해야 할 필요성도 있습니다.</p> <p style="margin:0px 0px 15px;padding:0px;">USB 하드웨어를 만드는 업체가 아닌 이상 대부분의 경우에는 이런 상황을 고려하지 않으므로 인터넷에서 관련 자료를 찾기가 쉽지 않습니다. 안드로이드와 PC의 USB 통신을 구글에 검색하면 대부분 ADB를 사용하여 소켓 통신을 하라고 말합니다. 하지만 일반 사용자에게 ADB를 써야하니 안드로이드 SDK를 설치하라고 하는것은 올바른 해결책이 아니겠죠.</p> <p style="margin:0px 0px 15px;padding:0px;">이 글의 내용은 대한민국 공군에서 모 체계를 개발하면서 안드로이드 기기와 PC간의 USB 통신이 필요했고 그것을 해결하면서 얻은 자료를 정리한 것입니다.</p> <h1 style="margin:0px 0px 15px;padding:0px;font-weight:300;">안드로이드의 USB통신</h1> <p style="margin:0px 0px 15px;padding:0px;">USB로 연결된 두 장치는 전원을 공급하고 각 장치들을 열거하는 호스트와 호스트에 연결되어 작동하는 주변기기(Accessory)로 구분됩니다.</p> <p style="margin:0px 0px 15px;padding:0px;">안드로이드는 USB 통신을 위해 두 가지 모드를 제공하고 있습니다.<img src="http://regentag.github.io/static/android-usb/usb-host-accessory.png" alt="Android USB Host & Accessory" style="vertical-align:middle;"></p> <ul style="margin:0px 0px 15px 30px;padding:0px;"><li> <p style="margin:0px 0px 15px;padding:0px;">Host mode : 안드로이드 기기가 USB 호스트가 되어 장치에 전원을 공급하는 모드입니다. 이 모드를 사용하려면 안드로이드 기기가 OTG를 지원해야 하고 OTG 케이블이 별도로 필요합니다.</p></li> <li> <p style="margin:0px 0px 15px;padding:0px;">Accessory mode : 안드로이드 기기가 주변기기가 되고 연결되는 USB 장치가 호스트가 되는 모드입니다. 여기서는 Accessory mode로 호스트인 PC에 연결되도록 구현할 것입니다.</p></li></ul><p style="margin:0px 0px 15px;padding:0px;">안드로이드에서 USB를 왜 이렇게 관리하는지에 대한 자세한 내용은 <a target="_blank" href="https://developer.android.com/guide/topics/connectivity/usb/index.html" style="color:#1756a9;text-decoration:none;" target="_blank">안드로이드 개발자 홈페이지</a>를 참고하시기 바랍니다.</p> <h1 style="margin:0px 0px 15px;padding:0px;font-weight:300;">USB 통신을 위한 준비</h1> <h4 style="margin:0px 0px 15px;padding:0px;font-weight:300;font-size:20px;">안드로이드</h4> <p style="margin:0px 0px 15px;padding:0px;">안드로이드에는 Accessory mode에서 USB 통신을 위한 기능들이 이미 모두 준비되어 있습니다.</p> <h4 style="margin:0px 0px 15px;padding:0px;font-weight:300;font-size:20px;">PC</h4> <p style="margin:0px 0px 15px;padding:0px;">USB 드라이버가 필요합니다. 범용 USB 드라이버 중 하나인 <a target="_blank" href="http://www.libusb.org/" style="color:#1756a9;text-decoration:none;" target="_blank"><code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">libusb</code></a>의 윈도용 포팅인 <a target="_blank" href="http://sourceforge.net/p/libusb-win32/wiki/Home/" style="color:#1756a9;text-decoration:none;" target="_blank"><code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">libusb-win32</code></a>를 사용할 것입니다. Unix-like 환경이라면 libusb를 사용해도 무방합니다.</p> <p style="margin:0px 0px 15px;padding:0px;"><a target="_blank" href="http://sourceforge.net/projects/libusb-win32/files/libusb-win32-releases/" style="color:#1756a9;text-decoration:none;" target="_blank">다운로드 페이지</a>에서 최신 버전을 내려받습니다.</p> <p style="margin:0px 0px 15px;padding:0px;">코드는 <code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">libusb</code>의 Java wrapper인 <a target="_blank" href="http://libusbjava.sourceforge.net/wp/" style="color:#1756a9;text-decoration:none;" target="_blank"><code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">libusbjava</code></a>를 사용하여 자바로 작성할 것입니다. <a target="_blank" href="http://sourceforge.net/projects/libusbjava/files/" style="color:#1756a9;text-decoration:none;" target="_blank">다운로드 페이지</a>에서 최신 버전의 JAR 파일과 DLL을 내려받습니다.</p> <h1 style="margin:0px 0px 15px;padding:0px;font-weight:300;">드라이버 설정</h1> <h4 style="margin:0px 0px 15px;padding:0px;font-weight:300;font-size:20px;">하드웨어 ID와 장치 클래스 확인</h4> <p style="margin:0px 0px 15px;padding:0px;">모든 USB 장치는 제조사 ID(VID; Vendor ID)와 제품 ID(PID; Product ID)를 가지고 있습니다. 이 두개의 값으로 장치의 종류(기종)를 구분할 수 있습니다.</p> <p style="margin:0px 0px 15px;padding:0px;">장치 클래스는 비슷한 기능을 제공하는 USB 장치들을 하나로 묶어 드라이버를 제공하기 위한 범주입니다. 덕분에 마우스와 키보드 같은 장치들은 제조사가 모두 다르더라도 운영체제에서 제공하는 드라이버로 사용이 가능합니다.</p> <p style="margin:0px 0px 15px;padding:0px;">안드로이드 기기를 USB 케이블로 PC에 연결한 후 장치관리자를 실행하면 <strong>휴대용 장치</strong>의 하위에 기기가 나타나 있을 것입니다.</p> <p style="margin:0px 0px 15px;padding:0px;"><img src="http://regentag.github.io/static/android-usb/01-device-list.png" alt="장치관리자" style="vertical-align:middle;"></p> <p style="margin:0px 0px 15px;padding:0px;">장치의 속성에서 <strong>자세히</strong> 탭을 선택하면 하드웨어 ID와 장치 클래스를 확인할 수 있습니다.</p> <p style="margin:0px 0px 15px;padding:0px;"><img src="http://regentag.github.io/static/android-usb/02-hardware-id.png" alt="하드웨어 ID" style="vertical-align:middle;"></p> <p style="margin:0px 0px 15px;padding:0px;"><img src="http://regentag.github.io/static/android-usb/03-device-class.png" alt="장치 클래스" style="vertical-align:middle;"></p> <p style="margin:0px 0px 15px;padding:0px;">이 안드로이드 기기의 VID와 PID는 각각 <code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">0x1004</code>와 <code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">0x61F9</code>이며 장치 클래스는 <code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">WPD</code>임을 알 수 있습니다.</p> <p style="margin:0px 0px 15px;padding:0px;"><code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">0x1004</code>는 LG전자의 제조사 ID입니다. 다른 회사의 제품이라면 해당 제조사의 ID가 보여집니다.<code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">0x61F9</code>는 LG전자의 안드로이드 기기들의 제품 ID입니다. 다른 모델의 제품이라도 LG전자의 안드로이드 기기는 모두 같은 PID 값을 가질 것입니다.</p> <p style="margin:0px 0px 15px;padding:0px;"><code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">WPD</code>는 MTP 장치의 장치 클래스입니다.</p> <h4 style="margin:0px 0px 15px;padding:0px;font-weight:300;font-size:20px;">필터 드라이버 설치</h4> <p style="margin:0px 0px 15px;padding:0px;">내려받은 <code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">libusb-win32</code>의 파일을 적당한 위치에 압축을 풀어줍니다. <code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">bin</code> 디렉터리의 하위에 CPU 아키텍처별로 나누어진 디렉터리가 있습니다. 자신의 PC CPU 아키텍처에 맞는 디렉터리의 파일들을 사용합니다.</p> <ul style="margin:0px 0px 15px 30px;padding:0px;"><li><code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">install-filter.exe</code> : 필터 드라이버를 설치/제거하는 CUI 프로그램입니다.</li> <li><code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">install-filter-win.exe</code> : 필터 드라이버를 설치/제거하는 GUI 프로그램입니다.</li> <li><code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">libusb0.sys</code> : USB 드라이버 파일입니다.</li> <li><code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">libusb0.dll</code> : USB 드라이버의 기능들을 호출하기 위한 라이브러리 DLL입니다.</li></ul><p style="margin:0px 0px 15px;padding:0px;">먼저 <code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">libusb0.sys</code> 파일을 <code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">C:\Windows\System32\drivers</code> 디렉터리에 복사합니다.</p> <p style="margin:0px 0px 15px;padding:0px;">그 다음 필터 드라이버 설치를 위해 명령 프롬프트를 <strong>관리자 권한</strong>으로 실행합니다. 다음 명령으로 <code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">WPD</code>장치 클래스에 필터 드라이버를 설치합니다.</p> <div class="highlight" style="margin-bottom:15px;background:#ffffff;"><pre style="margin-top:0px;margin-bottom:15px;padding:8px 12px;font-size:15px;border:1px solid rgb(232,232,232);background-color:#eeeeff;"><code class="language-text" style="border:0px;padding:1px 0px;">$ install-filter install --class=WPD </code></pre></div> <p style="margin:0px 0px 15px;padding:0px;">설치가 완료되면 안드로이드 기기의 USB 케이블을 뽑았다가 다시 연결해 주세요. 그런 다음<code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">testlibusb</code> 명령을 사용해 필터 드라이버가 올바르게 설치되었는지 검사합니다. 올바르게 설치되었다면 다음과 같이 <code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">Dev #1</code>항목이 출력되어야 합니다.</p> <div class="highlight" style="margin-bottom:15px;background:#ffffff;"><pre style="margin-top:0px;margin-bottom:15px;padding:8px 12px;font-size:15px;border:1px solid rgb(232,232,232);background-color:#eeeeff;"><code class="language-text" style="border:0px;padding:1px 0px;">$ testlibusb.exe Dev #0: 0000 - 0000 Dev #1: LG Electronics Inc. - MTP </code></pre></div> <p style="margin:0px 0px 15px;padding:0px;"><code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">testlibusb-win.exe</code>를 사용해 GUI 화면으로 확인할 수도 있습니다. <img src="http://regentag.github.io/static/android-usb/04-filter-driver-test.png" alt="Filter Driver Test" style="vertical-align:middle;"></p> <p style="margin:0px 0px 15px;padding:0px;">GUI 화면에는 <code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">DLL version</code>과 <code style="font-size:15px;border:1px solid rgb(232,232,232);padding:1px 5px;background-color:#eeeeff;">Driver version</code> 및 장치의 상세 정보가 출력되어야 합니다.</p> <hr style="margin:0px;padding:0px;"><p style="margin:0px 0px 15px;padding:0px;">다음 글에서 안드로이드 기기를 Accessory mode로 진입시키고 이것을 감지하여 USB 통신을 처리할 안드로이드 앱을 실행시키는 법에 대하여 설명하도록 하겠습니다.</p></article></div> <div><br></div> <div><br></div>
    출처 http://regentag.github.io/android/2015/05/15/android-usb-communication-1/

    이 게시물을 추천한 분들의 목록입니다.
    [1] 2015/05/16 12:34:33  1.238.***.34  navs  241922
    [2] 2015/05/16 18:29:06  118.37.***.207  kosi  439167
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    453
    Tab vs. Spaces [9] REGENTAG 15/05/26 23:38 44 0
    452
    최근 잘 된것들 [3] REGENTAG 15/05/26 23:27 27 0
    451
    빛은 충분히 빠르지 않다. [7] 펌글 REGENTAG 15/05/23 18:57 51 11
    450
    빛은 충분히 빠르지 않다. [10] 펌글 REGENTAG 15/05/23 13:01 61 5
    449
    병일이는 훌륭한 경전차입니다 [1] REGENTAG 15/05/17 21:51 24 1
    448
    Rust 언어 1.0 버전 발표 REGENTAG 15/05/16 16:57 41 1
    안드로이드와 PC간의 USB 통신 (1) [4] REGENTAG 15/05/15 23:44 60 2
    446
    오늘 있었던 일 [3] REGENTAG 15/05/13 22:36 41 0
    445
    네거티브에 멍청하게 대처하기 - 듀카키스의 경우. [1] REGENTAG 15/05/12 19:56 68 1
    444
    요즘은 게임이 재미가 없네요 [5] REGENTAG 15/05/11 21:44 21 0
    443
    이거 뭐하는 책이지??? [1] REGENTAG 15/05/11 01:31 111 0
    442
    V3 Lite를 깔았는데... [3] REGENTAG 15/05/11 01:20 27 0
    441
    윈도 콘솔 함수 예제 REGENTAG 15/05/09 15:45 64 1
    440
    2~4티어를 잘 타면 제초인가요? [5] REGENTAG 15/05/06 23:27 32 1
    439
    검색 대행 페이지를 만들어 보았습니다 [8] REGENTAG 15/05/06 22:45 46 2
    438
    공군 병사 생활 엿보기 - 같은 군대지만 너무나도 다른 육군과 공군 [13] REGENTAG 15/05/03 02:02 129 5
    437
    왜 10티어 자주만 타면 [4] REGENTAG 15/04/30 22:45 67 0
    436
    (SlideShare) HTTP/2 REGENTAG 15/04/29 23:43 25 2
    435
    한글 자모 분리 [5] REGENTAG 15/04/27 00:42 66 10
    434
    웨스트필드는 맵이 이쁜거 같아요 [1] REGENTAG 15/04/25 23:40 55 2
    433
    [WAOU] 클랜 운영 방침에 대한 문의 [9] REGENTAG 15/04/25 17:25 48 0
    432
    사격 우선 순위 [6] REGENTAG 15/04/19 15:04 65 3
    431
    박격포 [9] REGENTAG 15/04/17 21:21 57 1
    430
    리그베다 위키(구 엔하위키)가... [7] REGENTAG 15/04/17 19:31 193 5
    429
    술안주는 중국요리 [1] REGENTAG 15/04/16 23:43 252 12
    428
    구글이 재미있는 서비스를 만들었네요. [3] REGENTAG 15/04/11 00:21 90 11
    427
    게시판 구조와 저격글 [13] REGENTAG 15/04/05 17:58 55 4
    426
    여섯번째 화력의 증표 [2] REGENTAG 15/04/05 00:45 30 0
    425
    Rust 언어 1.0 베타 버전이 릴리즈 되었습니다. [3] REGENTAG 15/04/04 08:51 36 0
    424
    엘퀴로 망친 멘탈 홍퀴로 치유하자 REGENTAG 15/03/30 22:51 37 1
    [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈