Successfully reported this slideshow.
Your SlideShare is downloading. ×

Remote-debugging-based-on-notrace32-20130619-1900

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 25 Ad

More Related Content

Slideshows for you (20)

Viewers also liked (20)

Advertisement

Similar to Remote-debugging-based-on-notrace32-20130619-1900 (20)

Advertisement

Remote-debugging-based-on-notrace32-20130619-1900

  1. 1. 18/11/2016 9:29 AM Notrace32-based Real-time Remote Debugging Method for Optimization of Mobile OS Geunsik Lim http://leemgs.fedorapeople.org Sungkyunkwan University Samsung Electronics Co., Ltd.
  2. 2. 2/12 Motivation Related work Notrace32 (Previous Research) Notrace32 based Remote Debugging Model TCP/IP Server & Client Model Ring buffer Data Management Eclipse-based GUI Client Evaluation Conclusion Outline
  3. 3. 3/12 Motivation 1) CPU와 Memory가 제한적인 임베디드 디바이스에서 애플리케이션 스토어의 등장 2) 시스템이 리부팅되거나, 시스템의 반응속도가 갑자기 느려지는 현상 3) 고객들의 디바이스에 대한 충성심 및 회사의 경쟁력을 확고히 하기 위하여 디버깅 기술이 중요함. Too many apps
  4. 4. 4/12 Related work Approach Pros. Cons. Lauterbach GmbH의 TRACE32 • 특정시점의 기간 동안의 시 스템 변화 정보를 디버깅 • 원격으로 디버깅을 할 수 없다. • 하드웨어가 반드시 있어야만 사 용이 가능하다. LLDB (Low Level Debugger on LLVM) • GDB 디버깅을 위한 통신규 약을 통해서 실시간으로 특 정 시점을 디버깅 • 특정 순간의 디버깅 정보만 파악 을 할 수만 있고, 특정 시점 동안 의 시스템 변화 정보를 알 수는 없다. "GDB Tracepoints for Linux Kernel “ by Jim Blandy • 특정시점의 기간 동안 시스 템 변화 정보를 디버깅 할 수 있다 • 로컬 디버깅만 가능하고, Bionic C library기반의 안드로이드 플랫 폼을 위한 호환성을 제공하지 않 는다. NoTrace32 (Our previous research) • 특정 시점동안의 시스템변 화파악 가능 • 非시스템개발자가 제대로 사용 (숙련)하려면 진입장벽이 높다.
  5. 5. 5/12 • 실시간으로 원격으로 디버깅가능 • 진입장벽 해소를 위한 GUI 인터페이스 What is the Challenges?
  6. 6. 6/12 Notrace32-based Real-time Remote Debugging nt32.ko nt32 client (Based on gdb-tracepoints using DWARF) debugfs tracepoints kprobe KernelSpaceUserSpace TCP/IP nt32CrossTool-chain (ARMCortex-A9) PERF_EVENTS GDB Tracepoints sysfs GDB(CLI) Eclipse Based GUI Client nt32 Service Daemon (work-queue single kernel thread) GUI Server Client Structure kprobe Structure kretprobe Structure pt_regs DDD(GUI) Append Tracepoint Handler using Kprobe NOTRACE32 TOOLCHAIN ADB • 이전의 연구: 파란색 네모박스 • 제안 시스템: 빨간색 네모박스
  7. 7. 7/12 TCP/IP Server & Client Model • Eclipse의 CDT(C/C++ Development Toolkit) 에 기반하여 Debug View를 추가. • 코드의 Breakpoint, Watch point, Variable, Register 정보를 GUI 모드로 추적 가능. Kernel Image Kernel gdbserver ( nc –l 1234 ) nt32 server drives Linux kernel GDB-release reads debug information from unstripped local copy of Kernel Eclipse GDB Client Kernel Image (vmlinux) Kernel gdbserver protocol over TCP/IP GDB protocol Host System Target System 192.168.155.20:1234
  8. 8. 8/12 Ring Buffer for Controlling Mass Data Ring Buffer Fetch data Add new data Release old data This image shows a partially full buffer basically. This image shows a full buffer with two elements having been overwritten to keep the maximum size of the memory. 6 7 8 9 10 A B 5 1 2 3 4 END START ENDSTART
  9. 9. 9/12 Server Client Android Emulator Linux Desktop WiFi 3G Network Wired LAN nt32.ko nt32.ko nt32.ko nt32 Client TCP/IP DWARF debugging symbols DWARF debugging symbols DWARF debugging symbols • 실험환경: Ubuntu 12.04 LTS가 설치된 리눅스 데스크탑 환경에서 안드로이드 모바일 디바이스에 접속을 한 후에 원격 분석 수행 Evaluation 1/3
  10. 10. 10/12 Evaluation 2/3 • http://www.youtube.com/watch?v=3rUUJc3EMEw&list=UUQQy-pib6naOe5BCeXB-OsQ&index=1&feature=plcp
  11. 11. 11/12 • Eclipse에서 GDB를 연동하여 커널 디버깅시에 아래와 같이 GDB콘솔에서 Tracdpoint관련 GDB명령을 수행하도록 한다. (1) (2) (3)(4) Evaluation 3/3
  12. 12. 12/12 Conclusion and Future work • 본 논문의 아이디어는 운영체제 레벨의 동적 적재 소프트웨어 솔루션이므로, 안드로이 드 플랫폼의 어떠한 추가적인 수정도 필요로 하지 않는다. • TCP/IP기반으로 임베디드 디바이스들을 실시간으로 특정 시점 동안 원격으로 디버깅 가능하다. • NOTRACE32의 진입장벽 최소화를 위해 Eclipse 기반의 Tracing GUI 클라이언트 지원 한다. • 오픈소스로 릴리즈 하였으므로, http://notrace32.googlecode.com/ 에서 소스코드 및 바이너리 파일들을 다운로드하여 자유롭게 추가적인 연구가 가능하다. • 메모리뿐만 아니라 CPU도 실시간 디버깅을 할 수 있도록 PMU (Performance Monitoring Unit)의 지원을 확장하면, CPU와 캐시 정보까지 실시간으로 디버깅이 가능 할 것이다.
  13. 13. 13/12
  14. 14. 14/12 BACKUP SLIDES In Case We Have More Time…
  15. 15. 15/12 Eclipse & GDB 연동 작업 : Eclipse 3.7.2(Indigo) C • C/C++코드의 디버깅을 위해서는 Eclipse CDT 버전을 다운로드해야함. (2) (1)
  16. 16. 16/12 Eclipse & GDB 연동 작업 : zylinCDT 플러그인 설치 • Eclipse에서 gdb-release을 연동하기 위하여 Eclipse 실행후에 [Help] – [ Install New Software] 메뉴에 서 zylinCDT 플러그인 다운로드 (1) (2) (3)
  17. 17. 17/12 Eclipse & GDB 연동 작업 : New C Project 생성 • [File] – [New] – [ C Project 생성]메뉴에서 – Project name: hello – Project type: Executable – Empty Project – Toolchain: Linux GCC – 를 선택하여 C 프로젝트를 생성하도록 한 다. (1) (2) (3) (4)
  18. 18. 18/12 Eclipse & GDB 연동 작업 : Cross 컴파일러 셋팅 • ARM용 바이너리를 생성되도록 크로스 툴체인 경로를 셋팅하도록 한다. (1) (2) (3) (2) (2)
  19. 19. 19/12 Eclipse & GDB 연동 작업 : 빌드 및 실행 테스트 • [Project] – [Build Project]을 클릭하여 ARM용 바이너리를 빌드하도록 한다. (1) (2) (3)
  20. 20. 20/12 Eclipse & GDB 연동 작업 : Eclipse에서 GDB 실행 • [Run] - [Debug AS…] – [ Debug Configurations]을 선택한다. (1) (2)
  21. 21. 21/12 Eclipse & GDB 연동 작업 : Eclipse에서 GDB 실행 • [Debugger]탭메뉴에서 컴파일해놓은 gdb- release 명령은 연결시킨다. (1) (2) (3) * mi: Machine Interface
  22. 22. 22/12 Eclipse & GDB 연동 작업 : Eclipse에서 GDB 실행 • Gdb 실행시 환경 설정 작업을 자동으로 실행하도록 [Commands]탭의 “Run” 명령박스에 추가하도록 한 다. (1) (2) (3) (4)
  23. 23. 23/12 1. Host Linux PC에서 trace-point 설정하기 (nt-gdb) list vfs_readdir (nt-gdb) trace vfs_readdir ( 또는 trace fs/readdir.c:29 ) Tracepoint 1 at 0xc0958608: file fs/readdir.c, line 24. (nt-gdb) actions Enter actions for tracepoint 1 , one per line End with a line saying just “end”. >collect *file ( 또는 collect $reg) >end (nt-gdb) 2. Host Linux PC에서 원격접속으로 타겟보드의 ls 명령 실행하기 (nt-gdb) tstart Target#> ls /lib/ libc.so.6 libm.so.6 lib이-2.13.so libgcc.so.1 libpthread-2.13.so librt-2.13.so (nt-gdb) tstop 3. Host Linux PC에서 원격접속으로 타겟보드 디버깅하기 (nt-gdb) tfind Found trace frame 0, tracepoint 1 #0 vfs_readdir (file=0x0, filler=0x163d8ae3, buf=0x18c0) at /opt/android-kernel/fs/readdir.c:23 23 { (nt-gdb) p *file ( 또는 p $reg ; info $reg ) $1 = {f_u = {fu_list = {next = 0xe58ab780, prev = 0xc1610918}, fu_rcuhead = {next = 0xe58ab780, func = 0xc1610918}}, . . . . 중간 생 략 . . . . . ra_pages = 32, mmap_miss = 0, prev_pos = -1}, f_version = 0, private_data = 0x0, f_ep_links = {next = 0xe5337a5c, prev = 0xe5337a5c}, f_mapping = 0xe3da2d00} 해당 Tracepoint 정보가 없다면, “Target failed to find requested trace frame” 정보를 출력함. Kernel으로부터 Register정보 얻기 print 부록#: TCP/IP 원격 디버깅 (file read 트레이싱)
  24. 24. 24/12 1. Host Linux PC에서 trace-point 설정하기 * 해석) 호출이 되는 인스터럭션 정보를 알아 내도록 해보겠습니다. (nt-gdb) disassemble /rm tty_read 938 static ssize_t tty_read(struct file *file, char __user *buf, size_t count, 939 loff_t *ppos) 940 { 0xc0b68c34 <+0>: 0d c0 a0 e1 mov r12, sp 0xc0b68c38 <+4>: f0 dd 2d e9 push {r4, r5, r6, r7, r8, r10, r11, r12, lr, pc} 0xc0b68c3c <+8>: 04 b0 4c e2 sub r11, r12, #4 0xc0b68c40 <+12>: 08 d0 4d e2 sub sp, sp, #8 0xc0b68c44 <+16>: 04 e0 2d e5 push {lr} ; (str lr, [sp, #-4]!) . . . 아 래 생 략 . . . (nt-gdb) trace *0xc0b68c34 Tracepoint 2 at 0xc0b68c34: file drivers/tty/tty_io.c, line 940.. (nt-gdb) actions Enter actions for tracepoint 1, one per line. End with a line saying just "end". >collect $reg >end 2. Host Linux PC에서 원격접속으로 타겟보드의 ls 명령 실행하기 (nt-gdb) tstart (nt-gdb) tstop 3. Host Linux PC에서 원격접속으로 타겟보드 디버깅하기 (nt-gdb) tfind Found trace frame 0, tracepoint 1 321 ret = file->f_op->read(file, buf, count, pos); (nt-gdb) p $reg $1 = void • With a /m modifier, source lines are included (if available). • With a /r modifier, raw instructions in hex are included. 부록#: TCP/IP 원격 디버깅 (/rm 예제)
  25. 25. 25/12 1. Host Linux PC에서 네트웍 카드 func관련 trace-point 설정하기 (nt-gdb) trace boomerang_start_xmit Tracepoint 1 at 0xc86df4bc: file drivers/net/3c59x.c, line 2094. (nt-gdb) actions > collect *dev > end (nt-gdb) trace drivers/net/3c59x.c:2107 Tracepoint 2 at 0xc86df509: file drivers/net/3c59x.c, line 2107. (nt-gdb) actions > collect ioaddr > collect vp->cur_tx > end 2. Host Linux PC에서 원격접속으로 타겟보드의 ls 명령 실행하기 (nt-gdb) tstart //...wait until packet received for a long time (nt-gdb) tstop 3. Host Linux PC에서 원격접속으로 타겟보드 디버깅하기 (nt-gdb) tfind (nt-gdb) p *dev (nt-gdb) (nt-gdb) tfind (nt-gdb) p ioaddr (nt-gdb) p vp->cur_tx (nt-gdb) list 2102 pr_debug("boomerang_start_xmit()n"); 2103 pr_debug("%s: Trying to send a packet, Tx index %d.n", 2104 dev->name, vp->cur_tx); 2105 } 부록#: TCP/IP 원격 디버깅 (네트웍 모듈)

Editor's Notes

  • Thread scheduling framework

×