9
170 정보과학회논문지 : 시스템 및 이론 39 권 제 2 (2012.4) 본 연구는 한성대학교 교내연구비의 지원으로 이루어졌음 이 논문은 제38회 추계학술발표회에서 안드로이드 스마트폰을 위한 USB 기반 통합 디버깅 방법의 제목으로 발표된 논문을 확장한 것임 †† ††† †††† 비 회 원 종신회원 종신회원 비 회 원 논문접수 심사완료 : : : : : : 국민대학교 컴퓨터공학부 [email protected] 국민대학교 컴퓨터공학부 교수 [email protected] (Corresponding author) 한성대학교 컴퓨터공학과 교수 [email protected] ()세븐코아 대표이사 [email protected] 2011125201223Copyright2012 한국정보과학회ː개인 목적이나 교육 목적인 경우, 이 저작 물의 전체 또는 일부에 대한 복사본 혹은 디지털 사본의 제작을 허가합니다. 이 때, 사본은 상업적 수단으로 사용할 수 없으며 첫 페이지에 본 문구와 출처 를 반드시 명시해야 합니다. 이 외의 목적으로 복제, 배포, 출판, 전송 등 모든 유형의 사용행위를 하는 경우에 대하여는 사전에 허가를 얻고 비용을 지불해야 합니다. 정보과학회논문지: 시스템 및 이론 제39권 제2(2012.4) 안드로이드 스마트폰을 위한 USB 기반 통합 디버깅 방법 (USB-based Debugging Method for Android Smart Phones) 경주현 임성수 †† 이민석 ††† 허성민 †††† (Joohyun Kyong) (Sung-Soo Lim) (Minsuk Lee) (Sungmin Her) 안드로이드 스마트폰 개발을 위한 효율적인 디버깅 방법은 스마트폰 개발 생산성과 시장성을 위해 반드시 필요하다. 하지만 현재까지 안드로이드 커널 디버깅은 하드웨어 디버거에 의존하거나 느린 시 리얼 통신을 이용하여 수행할 수 밖에 없는 문제점을 가지고 있다. 우리는 이를 해결하기 위해 기존 안드 로이드 디버깅 아키텍처를 수정하여 새로운 통합 디버깅 아키텍처를 설계하였다. 새롭게 설계한 통합 디버 깅 아키텍처에서는 기존 KGDB를 수정하여 시리얼 통신 대신 USB 기반으로 완벽하게 동작하도록 구현 하였다. 이를 통해 안드로이드 스마트폰 개발 생산성을 향상시키고 상용 스마트폰 제품에서도 커널 디버깅 을 수행할 수 있도록 했다. 새로운 디버깅 방법을 이용하면 일반 사용자가 손쉽게 상용 스마트폰을 활용 하여 커널 디버깅을 수행한 후 커널을 재 배포할 수 있게 된다. 키워드 : 안드로이드, KGDB, 커널 디버깅, 디버깅, USB, 스마트폰 Abstract An effective debugging method for the development of Android smartphone is essential for enhancing productivity and marketability. Until now, however, Android kernel debugging methods have had too much dependency on hardware based debugging method which is expensive and complex to set up with even slow serial connection. To solve these problems, we have modified the existing android debugging architecture and have designed a new integrated debugging architecture which modifies the internal of KGDB for Android kernel. As a result, we have showed it adopts well with various Android smartphones through fast USB connection instead of the slow serial connection. This has improved the productivity in development of Android smartphone. By using this new debugging method, even common users can perform kernel debugging and redistribute the kernel easily. Key words : Android, KGDB, Kernel Debugging, USB, Smartphone, Debugging 1. 서 론 스마트폰 사용자의 증가와 더불어 스마트폰 개발에 대한 관심이 증가하고 있다. 특히 안드로이드 운영체제 를 사용하는 스마트폰에 대한 관심이 더욱 증가하고 있 는 상황이다. 이러한 안드로이드 스마트폰은 소스가 공 개되어 있는 특징을 가지고 있으며, 이 공개 소스를 활 용한 스마트폰 개발과 연구가 증가하고 있는 추세이다. 안드로이드를 활용한 소프트웨어 개발은 제조사가 개발 하는 안드로이드 스마트폰 플랫폼 개발과 마켓에서 수 익을 얻는 응용프로그램 개발로 나뉜다. 이 중 스마트폰 제조사의 안드로이드 커널과 프레임워크에 대한 개발 환경은 크게 부족한 상황이며, 또한 안드로이드 스마트 폰 사용자가 GPL 라이선스로 되어 있는 안드로이드 커 널을 수정하여 재배포 하는 일은 개발 환경 부족으로 쉽지 않다. 특히 안드로이드 커널 디버깅 작업은 매우 힘든 상황이다.

안드로이드 스마트폰을 위한 USB 기반 통합 디버깅 방법170 정보과학회논문지: 시스템 및 이론 제 39 권 제 2 호(2012.4) ․본 연구는 한성대학교

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 안드로이드 스마트폰을 위한 USB 기반 통합 디버깅 방법170 정보과학회논문지: 시스템 및 이론 제 39 권 제 2 호(2012.4) ․본 연구는 한성대학교

170 정보과학회논문지 : 시스템 이론 제 39 권 제 2 호(2012.4)

․본 연구는 한성 학교 교내연구비의 지원으로 이루어졌음

․이 논문은 제38회 추계학술발표회에서 ‘안드로이드 스마트폰을 한

USB 기반 통합 디버깅 방법’의 제목으로 발표된 논문을 확장한 것임

††

†††

††††

비 회 원

종신회원

종신회원

비 회 원

논문 수

심사완료

:

:

:

:

:

:

국민 학교 컴퓨터공학부

[email protected]

국민 학교 컴퓨터공학부 교수

[email protected]

(Corresponding author임)

한성 학교 컴퓨터공학과 교수

[email protected]

(주)세 코아 표이사

[email protected]

2011년 12월 5일

2012년 2월 3일

CopyrightⒸ2012 한국정보과학회ː개인 목 이나 교육 목 인 경우, 이 작

물의 체 는 일부에 한 복사본 혹은 디지털 사본의 제작을 허가합니다.

이 때, 사본은 상업 수단으로 사용할 수 없으며 첫 페이지에 본 문구와 출처

를 반드시 명시해야 합니다. 이 외의 목 으로 복제, 배포, 출 , 송 등 모든

유형의 사용행 를 하는 경우에 하여는 사 에 허가를 얻고 비용을 지불해야

합니다.

정보과학회논문지: 시스템 이론 제39권 제2호(2012.4)

안드로이드 스마트폰을 한 USB 기반 통합 디버깅 방법

(USB-based Debugging Method for Android Smart Phones)

경 주 † 임 성 수 †† 이 민 석 ††† 허 성 민 ††††

(Joohyun Kyong) (Sung-Soo Lim) (Minsuk Lee) (Sungmin Her)

요 약 안드로이드 스마트폰 개발을 한 효율 인 디버깅 방법은 스마트폰 개발 생산성과 시장성을

해 반드시 필요하다. 하지만 재까지 안드로이드 커 디버깅은 하드웨어 디버거에 의존하거나 느린 시

리얼 통신을 이용하여 수행할 수 밖에 없는 문제 을 가지고 있다. 우리는 이를 해결하기 해 기존 안드

로이드 디버깅 아키텍처를 수정하여 새로운 통합 디버깅 아키텍처를 설계하 다. 새롭게 설계한 통합 디버

깅 아키텍처에서는 기존 KGDB를 수정하여 시리얼 통신 신 USB 기반으로 완벽하게 동작하도록 구

하 다. 이를 통해 안드로이드 스마트폰 개발 생산성을 향상시키고 상용 스마트폰 제품에서도 커 디버깅

을 수행할 수 있도록 했다. 새로운 디버깅 방법을 이용하면 일반 사용자가 손쉽게 상용 스마트폰을 활용

하여 커 디버깅을 수행한 후 커 을 재 배포할 수 있게 된다.

키워드 : 안드로이드, KGDB, 커 디버깅, 디버깅, USB, 스마트폰

Abstract An effective debugging method for the development of Android smartphone is essential

for enhancing productivity and marketability. Until now, however, Android kernel debugging methods

have had too much dependency on hardware based debugging method which is expensive and complex

to set up with even slow serial connection. To solve these problems, we have modified the existing

android debugging architecture and have designed a new integrated debugging architecture which

modifies the internal of KGDB for Android kernel. As a result, we have showed it adopts well with

various Android smartphones through fast USB connection instead of the slow serial connection. This

has improved the productivity in development of Android smartphone. By using this new debugging

method, even common users can perform kernel debugging and redistribute the kernel easily.

Key words : Android, KGDB, Kernel Debugging, USB, Smartphone, Debugging

1. 서 론

스마트폰 사용자의 증가와 더불어 스마트폰 개발에

한 심이 증가하고 있다. 특히 안드로이드 운 체제

를 사용하는 스마트폰에 한 심이 더욱 증가하고 있

는 상황이다. 이러한 안드로이드 스마트폰은 소스가 공

개되어 있는 특징을 가지고 있으며, 이 공개 소스를 활

용한 스마트폰 개발과 연구가 증가하고 있는 추세이다.

안드로이드를 활용한 소 트웨어 개발은 제조사가 개발

하는 안드로이드 스마트폰 랫폼 개발과 마켓에서 수

익을 얻는 응용 로그램 개발로 나뉜다. 이 스마트폰

제조사의 안드로이드 커 과 임워크에 한 개발

환경은 크게 부족한 상황이며, 한 안드로이드 스마트

폰 사용자가 GPL 라이선스로 되어 있는 안드로이드 커

을 수정하여 재배포 하는 일은 개발 환경 부족으로

쉽지 않다. 특히 안드로이드 커 디버깅 작업은 매우

힘든 상황이다.

Page 2: 안드로이드 스마트폰을 위한 USB 기반 통합 디버깅 방법170 정보과학회논문지: 시스템 및 이론 제 39 권 제 2 호(2012.4) ․본 연구는 한성대학교

안드로이드 스마트폰을 한 USB 기반 통합 디버깅 방법 171

안드로이드 스마트폰 개발에서 안드로이드 커 디버

깅 작업은 기 보드 이식 작업부터 시작하여 각종 디

바이스 드라이버 작업을 수행할 때 주로 필요하다.

한, 사업자 요구 사항과 제조사 요구 사항에 따른 추가

인 기능 개발이 필요하며, 최종 제품이 납품될 때까지

개발 기간 체 으로 커 디버깅 작업이 요구된다. 납

품된 이후에도 버 업그 이드와 버그 수정 등의 이유

로 안드로이드 커 디버깅 작업은 계속 이루어진다. 이

러한 이유로 커 디버깅 작업은 지속 인 버그 수정과

커 패치 등 스마트폰 개발 로세스의 상당 부분을

차지하고 있다. 이처럼 안드로이드 커 디버깅에 걸리

는 시간을 이는 것은 개발 기간을 단축시켜 제품 출

시 일을 앞당긴다.

재까지 스마트폰 제조사의 커 디버깅은 printk 함

수를 이용한 방법과 하드웨어 디버깅 방법을 사용해 왔

다. 필요에 따라 시리얼 통신을 이용한 KGDB[1] 디버

깅을 수행한다. 제조사가 아닌 일반 안드로이드 스마트

폰 사용자는 배포된 커 을 분석, 는 디버깅을 하기

해서 주로 printk 함수를 사용한다. 우선 제조사의 커

디버깅 방법 printk를 이용한 방법은 많은 정보를

분석하기 해서 코드에 삽입해야 하므로 제한 이다.

다른 방법 하나인 JTAG 디버깅 방법은 고가인 문

제 이 있어서 모든 개발자가 자유롭게 사용할 수 없다.

한 특별한 하드웨어 장비가 필요하고 이클립스와 같

이 기존의 익숙한 통합 개발 환경이 아닌 독립 인

GUI를 사용하는 문제 을 가지고 있다. 뿐만 아니라 양

산 제품에는 JTAG 인터페이스가 없으므로 활용하지

못하고 JTAG 인터페이스가 있는 개발 보드만 사용해

야 한다. 이러한 이유로 기 보드 이식 과정에서는 활

용도가 높으나 차후 양산 시 이 되면 활용도가 떨어진

다. 다음으로 제조사의 개발자들은 커 디버깅을 해

서 시리얼 KGDB 방식을 사용한다. 이 방법 역시 양산

시 의 개발 보드는 시리얼 인터페이스를 제거하여 제

공되므로 활용하지 못하는 문제 이 있다. 한 이 방법의

문제 은 최근 개발된 BSP(Board Support Package)

자체가 시리얼 KGDB를 지원하지 않는 것이다. 마지막

으로 시리얼 인터페이스는 느린 속도 때문에, 많은 정보

를 주고받는 경우 개발 생산성이 떨어진다. 다음으로 안

드로이드 스마트폰 사용자는 상용 스마트폰에 USB 인

터페이스만 존재하므로, printk 이외의 방법으로 디버깅

할 수 없는 문제 이 있다. 이밖에 안드로이드 스마트폰

디버깅 방식으로는 LTTng[2], Ftrace[3], Oprofile[4]등

이 있다. 이러한 방법들은 로 일 기법 는 샘 링

기법을 사용하여 병목 상이나 소 트웨어 버그를 해

결한다. 이러한 트 이스 기반 디버깅 방법은 화식 디

버거와 비교해서 제한 인 정보만 얻을 수 있는 단 을

가지고 있다.

본 연구에서는 이러한 하드웨어 디버거에 의존하는

기존 화식 개발 환경의 문제 을 개선하고, 시리얼을

활용한 커 디버깅의 문제 을 제거하여, 새로운 커

디버깅을 한 아키텍처를 설계 구 하 다.

우리는 이를 구 퍼런스 폰을 비롯한 다양한 스마

트폰 개발 환경에 용하여 기존 개발 환경의 문제 을

보완하 다. USB를 이용한 임베디드 시스템 교차 개발

환경의 구조는 최근에 출시되고 있는 PC나 모든 노트

북에 별도의 시리얼 포트 추가 지원 장치 없이 바로 개

발 환경을 구축할 수 있다.

본 논문에서는 느린 송 속도에 따른 생산성 문제와

개발 환경 구성의 편리성 문제, 경제성 문제 등 기존 교

차 개발 통신 환경에서의 문제를 한꺼번에 해결하는 방

법을 제시하 다.

본 논문은 아래와 같은 사항을 기여하 다.

∙우리는 기존 안드로이드 시스템에서 디버깅 방법을

계층별로 분류하 으며, 디버깅 한계를 보여주었다.

∙우리는 USB 기반의 통합 개발 환경 구축을 한 안

드로이드 커 에서 새로운 디버깅 아키텍처를 설계하

다.

∙우리는 설계한 디버깅 아키텍처를 구 하여 기존 커

디버깅과 커 콘솔을 USB로 체 하 으며 이를

다양한 랫폼에 구 하 다.

2. 기존 안드로이드 디버깅 방법 련 연구

2.1 안드로이드 디버깅 방법

안드로이드 시스템의 아키텍처는 커 부분과 C/C++

로 구성된 라이 러리, 달빅 가상 머신(Dalvik Virtual

Machine) 그리고 네이티 응용 로그램으로 구성되어

있다. 한, 자바로 구 된 안드로이드 임워크와 응

용 로그램으로 이루어져 있다. 이 게 계층 이고 복합

인 언어로 구 된 안드로이드는 구성에 따라 개별

인 디버깅을 수행해야 한다. 안드로이드를 디버깅하기

해서는 여러 방법이 존재하며, 공개 SW로 구 된 디

버깅 방법을 표 하면 표 1과 같다. 이 소 트웨어를

단한 후 수행하는 화식 디버깅 방법에는, 자바언어

를 디버깅하는 자바 디버거와 네이티 응용 로그램을

디버깅하는 GDB/GDBSERVER, 그리고 마지막으로 커

을 디버깅하는 GDB/KGDB가 있다. 커 을 제외한

디버깅 방법은 모두 호스트 머신과 타겟 머신 간에

USB만으로 디버깅할 수 있다. 그러나 GDB/KGDB를

이용한 디버깅 방법은 USB를 이용할 수 없는 문제 을

가지고 있다. 디버깅을 한 커 로그 메시지 한 부

후 ADB를 이용해 /proc/kmsg를 읽어서 확인하는

수 이다. 이외에도 논스탑 기반 디버깅인 Ftrace, LTTng,

Page 3: 안드로이드 스마트폰을 위한 USB 기반 통합 디버깅 방법170 정보과학회논문지: 시스템 및 이론 제 39 권 제 2 호(2012.4) ․본 연구는 한성대학교

172 정보과학회논문지 : 시스템 이론 제 39 권 제 2 호(2012.4)

표 1 계층별 안드로이드 스마트폰 디버깅 방법

Oprofile을 활용하여 디버깅을 수행한다.

Danke[5]는 우리와 비슷한 방법으로 USB를 통한 커

디버깅을 제안하여 리 스의 CDC-ACM을 활용한

커 디버깅을 구 하 다. 이러한 Danke의 실험은 안

드로이드 응용 로그램 디버깅을 해 필요한 ADB와

함께 사용하지 못하는 문제 을 가진다. 즉, 응용 로그램

과 함께 디버깅할 수 없는 문제 이 있다. 한, Danke

의 방법은 컴 칩을 상으로 구 하 고 랫폼 종속

인 부분이 많아서 이식성이 떨어진다. 다른 문제

으로 커 메시지를 고려하지 않았다. 이에 비해 우리의

방법은 안드로이드 응용 로그램 디버깅을 한 ADB와

통합 으로 사용할 수 있으며, PXA270을 비롯한 S3C6410,

S5PC110, QSD8250, OMAP4430등 안드로이드 스마트

폰에서 사용되는 여러 응용 로세서를 상으로 구

하 고 이를 검증하 다. 한 CDC-ACM을 이용한

USB 기반의 커 콘솔을 고려하여 차후 커 콘솔까지

지원할 수 있는 구조로 설계하 다.

2.2 리 스 USB 가젯 드라이버(Gadget Driver)

일반 인 리 스 커 에서 사용되는 USB 가젯 드라

이버는 표 2와 같다.

이외에도 리 스 커 에는 PTP(Picture Transfer

Protocol)와 미디어 송을 한 MTP(Media Transfer

Protocol) 가젯 드라이버와 HID(Human Interface

Device) 가젯 드라이버가 추가되고 있다. 안드로이드 커

은 이러한 리 스 가젯 드라이버에 추가 인 가젯 드

라이버를 제공하게 된다. 표 3은 이러한 안드로이드 스

마트폰에 추가된 가젯 드라이버를 보여 다.

이처럼 안드로이드에서 사용되는 가젯 드라이버는 목

에 따라 다양하게 사용되고 있다. 즉 안드로이드 스마

트폰에서는 다양한 드라이버를 조합하여 사용하게 된다.

본 논문에서 우리는 기존 안드로이드 디버깅에서 사용

되는 ADB 가젯 드라이버와 유사하게 구 하 으며, 기

표 2 리 스 USB 가젯 드리아버

Gadget Zero :

Gadget Zero는USB 가젯 드라이버가 정상 으로 동작하는지

체크하기 한 드라이버이다.

Ethernet over USB :

Ethernet over USB는 USB를 이용해 이더넷 장치를 가상화

하는 것이다. 이 가젯 드라이버는 네트워크 통신을 한

CDC(Communications Device Class)의 표 스펙인 CDC

Ethernet Class의 드라이버와 마이크로 소 트웨어의

RNDIS를 지원하는 기능을 가진다. RNDIS는 보통 안드로이

드 스마트폰에서 USB 테더링을 사용하기 해 활성화 된다.

GadgetFS :

GadgetFS는 USB를 유 모드에서 컨트롤 할 수 있도록 지

원하기 해 만들어진 가젯 드라이버이다. 이 드라이버를 통

해 유 모드에서 컨피규 이션 디스크립터와 디바이스 디스

크립터를 기화 하고 엔드포인트를 활용할 수 있다. 이는

개발된 가젯 드라이버가 GPL 라이선스를 피할 수 있는 방법

을 제공해 다

File-backed Storage :

USB Mass Storage class이다. 시스템의 장소를 마치 외

장 디스크처럼 사용할 수 있게 해 다.

Serial :

가젯 Serial은 CDC ACM class의 표 스펙을 구 해 가젯

드라이버를 마치 가상 시리얼 장치처럼 보여 다. 이는 스마

트폰의 모뎀 칩과 통신할 때 주로 사용한다.

MIDI :

MIDI 가젯 드라이버는 USB 디바이스를 ALSA MIDI 인터

페이스처럼 보여 다. MIDI 가젯 드라이버를 ALSA MIDI

드라이버처럼 사용할 수 있다.

존 안드로이드 가젯 드라이버들과 함께 구성될 수 있도

록 하 다.

3. USB 기반 통합 디버깅 개발환경 구조

우리가 제안하는 효율 인 안드로이드 커 디버깅

구조는 그림 1과 같다. 호스트 시스템에서는 커 디버깅

을 해 android-agent-proxy를 두었다. android-agent-

Page 4: 안드로이드 스마트폰을 위한 USB 기반 통합 디버깅 방법170 정보과학회논문지: 시스템 및 이론 제 39 권 제 2 호(2012.4) ․본 연구는 한성대학교

안드로이드 스마트폰을 한 USB 기반 통합 디버깅 방법 173

그림 1 안드로이드 스마트폰을 한 USB 기반 통합 디버깅 구조

표 3 안드로이드 커 USB 가젯 드라이버

ADB (Android Debug Bridge) :

ADB는 안드로이드에서 디버깅을 해 만들어 놓은 가젯 드

라이버이다. 커 벨의 가젯 드라이버에서는 단순히 USB

벌크(Bulk) 통신을 한 인터페이스만 존재 하며 유 벨에

서USB 벌크 통신을 활용하여 DDMS등 여러 가지 디버깅을

환경을 제공해 다.

Accessories :

안드로이드 스마트폰에 포함되어 있는 장치 이외에 추가 디

바이스를 사용할 경우 이 가젯 드라이버를 통해 제어할 수

있도록 해 다.

proxy는 호스트 GDB가 USB를 지원하지 않는 문제

을 해결함과 동시에 커 콘솔 메시지를 텔넷으로 송

해 주는 이 을 가진다.

우리는 이를 해 기존 공개 소 트웨어인 agent-

proxy[6]가 가지고 있는 기능을 사용하 다. 즉 TCP/IP

인터페이스를 시리얼 인터페이스로 달 해주는 기능을

활용하여 GDB 로토콜 하나인 커 메시지를

USB로 송하도록 하 다. 이 방법은 기존 agent-proxy

가 가진 시리얼과 TCP/IP 기능에 USB 기능을 추가하

여 설계하 다. 그리고 텔넷을 통해 디버깅 세션이 연결

된 동안 제한 인 커 콘솔 메시지를 볼 수가 있는 장

을 가지고 있다[6]. 결론 으로 우리는 GDB가 가지고

있는 문제 인 USB 인터페이스를 지원하지 않는 부분

을 해결함과 동시에 커 디버깅과 커 메시지를 분리

할 수 있는 agent-proxy를 확장하여 호스트 시스템을

설계하 다. 한 USB 인터페이스의 잉여 엔드포인트

(Endpoint)를 활용하여 기존 안드로이드 디버깅에 사용

하는 ADB 인터페이스와 충돌 없이 사용되도록 설계하

다.

타겟 아키텍처는 기존 안드로이드 아키텍처의 커

디버깅 부분을 확장하여 설계하 다. 먼 기존 안드로

이드 디버깅은 모두 ADB를 활용하여 디버깅한다. 응용

로그램과 안드로이드 임워크는 달빅 가상 머신이

지원하는 디버깅 채 을 통해 ADB 인터페이스를 거쳐

타겟과 통신하게 된다. 달빅 가상 머신과 네이티 응용

로그램, 라이 러리는 GDBSERVER를 이용하여 원

격 디버깅을 수행하게 된다. GDBSERVER는 ADB의

기능 의 하나인 가상 TCP/IP 기능을 통해 원격 디버

깅을 수행한다. 우리가 기존 아키텍처에 추가로 설계한

부분은 커 디버깅을 한 부분과 커 콘솔 부분이다.

우선 커 디버깅을 해서 KGDB 가젯 드라이버와 이

를 이용하는 KDGB USB I/O 인터페이스를 설계하

다. 이는 리 스 커 에 제공되는 시리얼과 이더넷에 확

장 형식으로 구 된다. 다음으로, KGDB가 지원하는 커

메시지 기능은 커 의 부 기 메시지를 확인할

방법이 없는 문제 을 가지고 있다. 우리는 이를 해결하

기 해 USB를 이용한 콘솔을 설계하 고, 기존 리

스 커 이 제공하는 CDC-ACM 가젯 드라이버를 활용

하 다. 이것은 콘솔을 한 추가 인 호스트 툴이 필요

없는 장 이 있다.

그림 2는 android-agent-proxy에 연결되는 구조를

보여 다. 이는 기존 시리얼과 같은 구조로 확장하여

구 하 다. GDB는 android-agent-proxy의 5550 포트

를 이용하여 디버깅을 수행한다. 한, 5551 포트는 커

콘솔을 해 존재하며 텔넷을 통해 속하여 커

메시지를 확인할 수 있다.

그리고 android-agent-proxy의 USB 모듈을 통해 타

겟 시스템과 USB통신을 수행하는 구조를 가진다.

타겟 시스템에 기능을 추가한 KGDB 가젯 내부 모듈

구성은 그림 3과 같고 과 USB 콘솔 내부 모듈 구성은

그림 4와 같다. KGDB 가젯에는 폴링 방식의 USB 통

신을 한 READ/WRITE 모듈이 존재하며, 이 모듈과

Page 5: 안드로이드 스마트폰을 위한 USB 기반 통합 디버깅 방법170 정보과학회논문지: 시스템 및 이론 제 39 권 제 2 호(2012.4) ․본 연구는 한성대학교

174 정보과학회논문지 : 시스템 이론 제 39 권 제 2 호(2012.4)

그림 2 android-agnet-proxy 구조

그림 3 타겟 KGDB 가젯 드라이버 구조

그림 4 타겟 USB CONSOLE 드라이버 구조

연결된 랫폼 종속 인 USB 드라이버 모듈이 존재한

다. 이러한 READ/WRITE 모듈은 리 스 KGDB 모듈

과 연결되며 이 모듈을 통해 커 디버깅이 수행된다.

커 콘솔을 한 드라이버는 얼리 콘솔(Early Console)

을 가지며, 이 부분은 부 기 메시지를 출력하기

해서 필요하다. 부 반부터는 일반 콘솔 메시지가

ACM 가젯 드라이버를 통해 출력되도록 설계하 다.

4. USB 기반 통합 디버깅 개발환경 구

4.1 랫폼 USB 폴링 드라이버

KGDB는 호스트 머신과 타겟 머신으로 구성되어 있다.

그림 5 폴링 기반 USB 드라이버

KGDB는 커 벨로 구 된 GDBSTUB가 타겟 머신을

제어하게 된다. 이러한 KGDB는 커 벨로 동작한다.

KGDB는 GDBSERVER와 다르게, OS 자원을 활용하지

않고 리 스 커 의 트랩(Trap) 핸들러에서 일을 처리한

다. KGDB는 트랩 핸들러에서 수행되므로, 기존 인터럽

트 방식으로 호스트와 통신하는 이더넷, USB, 시리얼 등

의 통신 방법은 사용할 수 없고, 호스트 머신과 통신하려

면 반드시 폴링 기법을 사용해야 한다. 우리는 이를 해

안드로이드 랫폼에 내장된 USB 클라이언트 드라이버

인 ADB 가젯 드라이버를 기반으로 USB 벌크 통신의 폴

링 드라이버를 구 하 다. 이는 기존 CDC-ACM을 사용

하는 방법에 비해 랫폼 독립 으로 구 할 수 있는 장

을 가진다. 최 한 랫폼 독립 으로 구 하기 해

모든 폴링 드라이버를 그림 5와 같이 구 하 다.

기존 인터럽트 기반의 USB 통신은 인터럽트 서비스

루틴에서 랫폼 종속 인 일을 수행한다. 이를 마친

후, 인터럽트 서비스 루틴은 USB READ/WRITE 함수

를 WAKE-UP시킨다. 랫폼 독립 인 폴링 기반 드라

이버를 해 인터럽트 서비스 루틴을 직 호출하는 방

법을 사용하 고, 이를 통해 랫폼 종속 인 부분에

한 처리를 최소화하 다.

4.2 USB 콤포지트 드라이버(Composite Driver) 구성

안드로이드 스마트폰의 USB 콤포지트 드라이버는

ADB와 Accessories, RNDIS, UMS(USB Mass Storage)

를 기본으로 한다. 이는 USB 클라이언트가 가지고 있

는 USB 엔드포인트를 활용하여 여러 종류의 클라이언

트 드라이버를 지원한다. 우리는 디버깅을 해 기존

ADB와 같이 KGDB를 확장하는 방법으로 구 하 다.

4.3 android-agent-proxy 확장 구

공개 소스로 되어 있는 agent-proxy를 수정하여 USB

가 지원되도록 하 다. android-agent-proxy는 USB를

지원하지 않는 기존 GDB와 연동하는 데 필요하다.

한, 이를 통해 커 메시지를 텔넷으로 보여주도록 구

하 다.

Page 6: 안드로이드 스마트폰을 위한 USB 기반 통합 디버깅 방법170 정보과학회논문지: 시스템 및 이론 제 39 권 제 2 호(2012.4) ․본 연구는 한성대학교

안드로이드 스마트폰을 한 USB 기반 통합 디버깅 방법 175

4.4 구 이슈

구 도 여러 이슈를 발견하 다. 우선 넥서스S 같

은 경우 트랩 핸들러에서 와치독(Watchdog)이 동작하

다. 이 때문에 디버깅 도 재부 하는 이슈가 발생

하 다. 넥서스S를 디버깅하려면 와치독 기능을 제거해

야 한다. 한, 다른 USB 가젯 드라이버와 함께 사용하

면 문제가 없으나, UMS와 함께 등록하면 USB가 리셋

되는 이슈가 발생하여 디버깅이 단되는 상이 발생

하 다. 우리는 결국 USB 콤포지트 드라이버 UMS

만 제거하고 사용하 다. 즉 본 연구의 결과물은 UMS

와 동시에 사용하지 못한다.

5. 구 결과

5.1 용 모델

우리가 설계한 USB 기반 통합 디버깅 구조를 여러 안

드로이드 랫폼에 용하 다. 표 4와 같은 모델에 우리

가 설계한 구조를 용하 다. 그림 6은 DDD를 이용해

구 퍼런스 폰인 넥서스S를 상으로 커 디버깅을

수행한 장면이다. PC와는 USB 이블만 연결되어 있으며,

단지 USB만을 가지고 커 디버깅을 수행한 그림이다.

그림 7은 같은 환경에 소스 개발과 컴 일 그리고 디

버깅을 하나의 툴로 해결할 수 있는 이클립스를 이용한

디버깅 장면이다. 커 디버깅을 한 디버깅 창과 커

콘솔을 한 메시지 창을 보여 다.

표 4 용 모델

Device Specification

Nexus One CPU : Qualcomm - QSD8250

OS : Android 2.3.4, linux 2.6.35

Nexus S CPU : Samsung - S5PC110

OS : Android 2.3.4, linux 2.6.35

PandaboardCPU : TI - OMAP4430

OS : Android 2.3.4, linux 2.6.35

Odroid7CPU : Samsung - S5PC110

OS : Android 2.3.4, linux 2.6.35

그림 6 안드로이드 커 디버깅 수행 장면

그림 7 이클립스 디버깅 장면

5.2 사용

사용은 아래 그림 8과 같고, 타겟과 USB 통신을 한

android-agent-proxy를 실행하여 GDB와 서로 TCP/IP

통신으로 디버깅 정보를 주고받는다. GDB는 마치 원격

디버깅이 TCP/IP 인터페이스로 수행되는 알게 되며

android-agent-proxy는 타겟과 USB 통신을 수행하게

된다. 즉 android-agent-proxy는 GDB로부터 받은 GDB

로토콜 데이터를 타겟으로 송하여 GDB와 타겟 시

스템 간에 서로 디버깅이 될 수 있도록 해 다.

그림 8 커 디버깅 기 설정 장면

그림 9는 넥서스S의 터치 디바이스 드라이버 코드

인터럽트 서비스 루틴에 이크 포인트 설정 후 단

된 지 에서 데이터 정보를 보여 다. 기존 응용 로그

램 디버깅과 같이 터치 드라이버의 데이터 구조, 지스

터 정보, 스택 정보 등을 볼 수 있다.

그림 10은 리 스 메인 스 러인 CFS 스 러의

schedule() 함수에 단 을 설정 후 단된 지 에서

태스크 정보를 디버깅한 장면이다.

이처럼 USB를 이용한 커 디버깅은 기존 시리얼

비 향상된 속도를 제공하고 많은 데이터 정보 등을 볼

수 있다.

5.3 USB device support for Linux boot & KGDB

우리는 이러한 구 을 공개 소 트웨어 사이트인 소스

포지[7]에 공개하 으며, 많은 이들이 사용할 수 있도록

Page 7: 안드로이드 스마트폰을 위한 USB 기반 통합 디버깅 방법170 정보과학회논문지: 시스템 및 이론 제 39 권 제 2 호(2012.4) ․본 연구는 한성대학교

176 정보과학회논문지 : 시스템 이론 제 39 권 제 2 호(2012.4)

그림 9 넥서스S 터치 인터럽트 서비스 루틴 디버깅

그림 10 schedule() 함수 디버깅

하 다. 이러한 USB 기반 개발 환경 개선 로젝트는

2가지의 목표를 가지고 있다.

∙모든 임베디드 시스템의 부트로더와 커 콘솔 메시

지가 USB를 통해 송되도록 하여 개발 편의성을 향

상시키는 목표를 가진다.

∙리 스 커 디버거인 KGDB가 USB를 통해 수행되도

록 하여 기존 시리얼 비 향상된 디버깅 속도를 지원

하며, 이로 인해 개발 생산성이 향상되는 목표를 가진다.

6. 결 론

본 논문은 기존 안드로이드 스마트폰 개발 환경을 계

층별로 분류하 으며, 이를 통해 커 디버깅을 한

USB의 지원이 없음을 발견하 다. 이러한 문제 을 해

결하기 해 안드로이드 커 부터 안드로이드 응용 로

그램까지 USB를 이용해 디버깅할 수 있는 통합 디버깅

구조를 설계하 다. 한, 본 논문에서는 기존에 사용한

시리얼을 이용한 커 디버깅 환경을 USB로 완벽 체

구 하 으며, 이를 넥서스 원과 넥서스 S와 같은 상용

구 퍼런스 랫폼을 비롯한 여러 개발용 랫폼에

용하 다. 이는 기존 시리얼을 이용한 커 디버깅의

문제 을 근본 으로 제거하고 커 의 디바이스 드라이

버 등과 커 버그 수정을 한 효율 인 개발 환경을

제공하 다. 이러한 USB만을 이용한 통합 개발 방법은

반드시 필요하며, 이를 해 안드로이드 스마트폰에서

USB를 이용한 통합 디버깅 환경을 설계 구 하

다. 재까지 우리는 통합 디버깅 환경을 설계하 고 커

디버깅과 제한 인 커 콘솔만 구 하 다. 즉 커

디버깅을 한 KGDB 부분만 USB로 완벽 체한 상

태이다. 하지만 완벽한 USB 개발 환경을 구축하려면

부 기 로그 메시지를 한 커 콘솔 문제를 구

해야 하며 이를 해 앞으로 CDC-ACM을 사용한 커

콘솔을 구 할 정이다. 한, 화식 디버거뿐만

아니라 기존 공개된 여러 커 로 일러와 통합하여

USB를 이용한 통합 개발 환경을 개선할 정이다.

참 고 문 헌

[ 1 ] D. Grothe, "Kgdb: linux kenrel source level de-

bugger," http://kgdb.linsyssoft.com/, 2001.

[ 2 ] M. Desnoyers and M. Dagenais, "LTTng: Tracing

across execution layers, from the Hypervisor to

user-space," in Proc. of the Linux Symposium,

Ottawa, Canada, Jul. 2008.

[ 3 ] Tim Bird, "Measuring function duration with

ftrace," in Proceedings of the Linux Symposion

2009, pp.47-54, Jul. 2009.

[ 4 ] J. Levon and P. Elie, "Oprofile: A system profiler

for linux," http://oprofile.sf.net, 2004.

[ 5 ] Danke xie, "Enabling KGDB for Android," http://

bootloader.wikidot.com/android:kgdb, 2010.

[ 6 ] Jason Wessel, "The State of Kernel Debugging

Technology," LinuxCon 2010, 2010.

[ 7 ] Joohyun Kyong, Sung-Soo Lim, Minsuk Lee and

Sungmin Her, "USB device support for Linux

boot & KGDB," https://sourceforge.net/projects/

usbdevicesuppor/, 2009.

경 주

2007년 한성 학교 정보시스템 공학과

졸업(학사). 2009년 한성 학교 컴퓨터공

학과 졸업(석사). 2011년~ 재 국민 학

교 컴퓨터공학과 박사과정. 2007년~ 재

(주)세 코아 선임 연구원. 심분야는

임베디드 소 트웨어, 력 소 트웨어

임 성 수

1993년 서울 학교 컴퓨터공학(학사). 1995

년 서울 학교 컴퓨터공학(석사). 2002년

서울 학교 기 컴퓨터공학(박사). 2001

년~2004년 팜팜테크(주) 기술 총 이

사. 2004년~ 재 국민 학교 컴퓨터공

학 부교수 심 분야는 임베디드 실시간

시스템, 이동단말소 트웨어, 력소 트웨어, 가상화기술

Page 8: 안드로이드 스마트폰을 위한 USB 기반 통합 디버깅 방법170 정보과학회논문지: 시스템 및 이론 제 39 권 제 2 호(2012.4) ․본 연구는 한성대학교

안드로이드 스마트폰을 한 USB 기반 통합 디버깅 방법 177

이 민 석

1986년 서울 학교 컴퓨터공학과(학사)

1988년 서울 학교 컴퓨터공학과(석사)

1995년 서울 학교 컴퓨터공학과(박사)

1999년~2002년 (주)팜팜테크, CTO. 1995

년~ 재 한성 학교 컴퓨터공학과 교수

심분야는 임베디드 시스템 소 트

웨어, 멀티미디어 일 시스템, 공개 소스 소 트웨어

허 성 민

1991년 서울 학교 컴퓨터공학과 졸업

(학사). 1993년 서울 학교 컴퓨터공학과

졸업(석사). 재 (주)세 코아 표이사

심분야는 모바일가상화, 이동단말소

트웨어

Page 9: 안드로이드 스마트폰을 위한 USB 기반 통합 디버깅 방법170 정보과학회논문지: 시스템 및 이론 제 39 권 제 2 호(2012.4) ․본 연구는 한성대학교