SlideShare a Scribd company logo
1 of 25
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/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/12
Motivation
1) CPU와 Memory가 제한적인 임베디드 디바이스에서 애플리케이션 스토어의 등장
2) 시스템이 리부팅되거나, 시스템의 반응속도가 갑자기 느려지는 현상
3) 고객들의 디바이스에 대한 충성심 및 회사의 경쟁력을 확고히 하기 위하여 디버깅 기술이 중요함.
Too many apps
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/12
• 실시간으로 원격으로 디버깅가능
• 진입장벽 해소를 위한 GUI 인터페이스
What is the Challenges?
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/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/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/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/12
Evaluation 2/3
• http://www.youtube.com/watch?v=3rUUJc3EMEw&list=UUQQy-pib6naOe5BCeXB-OsQ&index=1&feature=plcp
11/12
• Eclipse에서 GDB를 연동하여 커널 디버깅시에 아래와 같이 GDB콘솔에서 Tracdpoint관련 GDB명령을
수행하도록 한다.
(1)
(2)
(3)(4)
Evaluation 3/3
12/12
Conclusion and Future work
• 본 논문의 아이디어는 운영체제 레벨의 동적 적재 소프트웨어 솔루션이므로, 안드로이
드 플랫폼의 어떠한 추가적인 수정도 필요로 하지 않는다.
• TCP/IP기반으로 임베디드 디바이스들을 실시간으로 특정 시점 동안 원격으로 디버깅
가능하다.
• NOTRACE32의 진입장벽 최소화를 위해 Eclipse 기반의 Tracing GUI 클라이언트 지원
한다.
• 오픈소스로 릴리즈 하였으므로, http://notrace32.googlecode.com/ 에서 소스코드
및 바이너리 파일들을 다운로드하여 자유롭게 추가적인 연구가 가능하다.
• 메모리뿐만 아니라 CPU도 실시간 디버깅을 할 수 있도록 PMU (Performance
Monitoring Unit)의 지원을 확장하면, CPU와 캐시 정보까지 실시간으로 디버깅이 가능
할 것이다.
13/12
14/12
BACKUP SLIDES
In Case We Have More Time…
15/12
Eclipse & GDB 연동 작업 : Eclipse 3.7.2(Indigo) C
• C/C++코드의 디버깅을 위해서는 Eclipse CDT 버전을 다운로드해야함.
(2)
(1)
16/12
Eclipse & GDB 연동 작업 : zylinCDT 플러그인 설치
• Eclipse에서 gdb-release을 연동하기 위하여 Eclipse 실행후에 [Help] – [ Install New Software] 메뉴에
서 zylinCDT 플러그인 다운로드
(1)
(2)
(3)
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/12
Eclipse & GDB 연동 작업 : Cross 컴파일러 셋팅
• ARM용 바이너리를 생성되도록 크로스 툴체인 경로를 셋팅하도록 한다.
(1) (2) (3)
(2)
(2)
19/12
Eclipse & GDB 연동 작업 : 빌드 및 실행 테스트
• [Project] – [Build Project]을 클릭하여 ARM용 바이너리를 빌드하도록 한다.
(1)
(2)
(3)
20/12
Eclipse & GDB 연동 작업 : Eclipse에서 GDB 실행
• [Run] - [Debug AS…] – [ Debug
Configurations]을 선택한다.
(1)
(2)
21/12
Eclipse & GDB 연동 작업 : Eclipse에서 GDB 실행
• [Debugger]탭메뉴에서 컴파일해놓은 gdb-
release 명령은 연결시킨다.
(1)
(2)
(3)
* mi: Machine Interface
22/12
Eclipse & GDB 연동 작업 : Eclipse에서 GDB 실행
• Gdb 실행시 환경 설정 작업을 자동으로 실행하도록 [Commands]탭의 “Run” 명령박스에 추가하도록 한
다.
(1)
(2)
(3)
(4)
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/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/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 원격 디버깅 (네트웍 모듈)

More Related Content

What's hot

[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpointNAVER D2
 
Pgday bdr 천정대
Pgday bdr 천정대Pgday bdr 천정대
Pgday bdr 천정대PgDay.Seoul
 
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhudMinGeun Park
 
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신WooSangHwang
 
Introduction to Parallel Programming
Introduction to Parallel ProgrammingIntroduction to Parallel Programming
Introduction to Parallel ProgrammingUNIST
 
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례BJ Jang
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성NAVER D2
 
Community openstack & Ceph 기반 서비스 운영 해결 방안
Community openstack & Ceph 기반 서비스 운영 해결 방안Community openstack & Ceph 기반 서비스 운영 해결 방안
Community openstack & Ceph 기반 서비스 운영 해결 방안Open Source Consulting
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기Jaeseung Ha
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?NAVER D2
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기zupet
 
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Ki-Hwan Kim
 
Versatile tensor accelerator (vta) introduction and usage
Versatile tensor accelerator (vta) introduction and usage Versatile tensor accelerator (vta) introduction and usage
Versatile tensor accelerator (vta) introduction and usage jemin lee
 
Pgday bdr gt1000
Pgday bdr gt1000Pgday bdr gt1000
Pgday bdr gt1000정대 천
 
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요? (2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요? 내훈 정
 
Terasort
TerasortTerasort
Terasorthhyin
 
[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기진현 조
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화Jaeseung Ha
 
Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2YEONG-CHEON YOU
 

What's hot (20)

[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpoint
 
Pgday bdr 천정대
Pgday bdr 천정대Pgday bdr 천정대
Pgday bdr 천정대
 
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
 
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
 
Introduction to Parallel Programming
Introduction to Parallel ProgrammingIntroduction to Parallel Programming
Introduction to Parallel Programming
 
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성
 
Community openstack & Ceph 기반 서비스 운영 해결 방안
Community openstack & Ceph 기반 서비스 운영 해결 방안Community openstack & Ceph 기반 서비스 운영 해결 방안
Community openstack & Ceph 기반 서비스 운영 해결 방안
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
 
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
 
Cuda intro
Cuda introCuda intro
Cuda intro
 
Versatile tensor accelerator (vta) introduction and usage
Versatile tensor accelerator (vta) introduction and usage Versatile tensor accelerator (vta) introduction and usage
Versatile tensor accelerator (vta) introduction and usage
 
Pgday bdr gt1000
Pgday bdr gt1000Pgday bdr gt1000
Pgday bdr gt1000
 
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요? (2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
Terasort
TerasortTerasort
Terasort
 
[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
 
Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2
 

Viewers also liked

효과적인 임베디드 디버깅 환경구축
효과적인 임베디드 디버깅 환경구축효과적인 임베디드 디버깅 환경구축
효과적인 임베디드 디버깅 환경구축guest0ad316e
 
Route Maps & Redistribution into OSPF with Route Maps
Route Maps & Redistribution into OSPF with Route MapsRoute Maps & Redistribution into OSPF with Route Maps
Route Maps & Redistribution into OSPF with Route MapsNetProtocol Xpert
 
MY CV EKA PUTRI (1)
MY CV EKA PUTRI (1)MY CV EKA PUTRI (1)
MY CV EKA PUTRI (1)EKA PUTRI
 
DCI - Marcada para janeiro, implantação do bloco k pode ser adiada mais uma vez
DCI - Marcada para janeiro, implantação do bloco k pode ser adiada mais uma vezDCI - Marcada para janeiro, implantação do bloco k pode ser adiada mais uma vez
DCI - Marcada para janeiro, implantação do bloco k pode ser adiada mais uma vezGrounds - Expanding tax & financial limits
 
Scheda Tecnica Audi A4 2016
Scheda Tecnica Audi A4 2016Scheda Tecnica Audi A4 2016
Scheda Tecnica Audi A4 2016Autoblog.it
 
임베디드시스템개발 Part2
임베디드시스템개발 Part2임베디드시스템개발 Part2
임베디드시스템개발 Part2Minsuk Lee
 
임베디드 과제 0992021 서정원
임베디드 과제 0992021 서정원임베디드 과제 0992021 서정원
임베디드 과제 0992021 서정원정원 서
 
Hyundai Tucson: listino prezzi
Hyundai Tucson: listino prezziHyundai Tucson: listino prezzi
Hyundai Tucson: listino prezziautoblogpuntoit
 
Cisco 2960x switch password recovery
Cisco 2960x switch password recoveryCisco 2960x switch password recovery
Cisco 2960x switch password recoveryNetProtocol Xpert
 
Network Security
Network SecurityNetwork Security
Network Securityhj43us
 
리눅스 커널 디버거 KGDB/KDB
리눅스 커널 디버거 KGDB/KDB리눅스 커널 디버거 KGDB/KDB
리눅스 커널 디버거 KGDB/KDBManjong Han
 

Viewers also liked (20)

효과적인 임베디드 디버깅 환경구축
효과적인 임베디드 디버깅 환경구축효과적인 임베디드 디버깅 환경구축
효과적인 임베디드 디버깅 환경구축
 
Ccna1v3.1 mod02
Ccna1v3.1 mod02 Ccna1v3.1 mod02
Ccna1v3.1 mod02
 
Artigo: Escritório de advocacia e contadores
Artigo: Escritório de advocacia e contadoresArtigo: Escritório de advocacia e contadores
Artigo: Escritório de advocacia e contadores
 
Route Maps & Redistribution into OSPF with Route Maps
Route Maps & Redistribution into OSPF with Route MapsRoute Maps & Redistribution into OSPF with Route Maps
Route Maps & Redistribution into OSPF with Route Maps
 
CRONOGRAMA DE CAPACITACIONES CEG 2017 - PRIMER SEMESTRE
CRONOGRAMA DE CAPACITACIONES CEG 2017 - PRIMER SEMESTRECRONOGRAMA DE CAPACITACIONES CEG 2017 - PRIMER SEMESTRE
CRONOGRAMA DE CAPACITACIONES CEG 2017 - PRIMER SEMESTRE
 
CV
CVCV
CV
 
MY CV EKA PUTRI (1)
MY CV EKA PUTRI (1)MY CV EKA PUTRI (1)
MY CV EKA PUTRI (1)
 
DCI - Marcada para janeiro, implantação do bloco k pode ser adiada mais uma vez
DCI - Marcada para janeiro, implantação do bloco k pode ser adiada mais uma vezDCI - Marcada para janeiro, implantação do bloco k pode ser adiada mais uma vez
DCI - Marcada para janeiro, implantação do bloco k pode ser adiada mais uma vez
 
Scheda Tecnica Audi A4 2016
Scheda Tecnica Audi A4 2016Scheda Tecnica Audi A4 2016
Scheda Tecnica Audi A4 2016
 
임베디드시스템개발 Part2
임베디드시스템개발 Part2임베디드시스템개발 Part2
임베디드시스템개발 Part2
 
임베디드 과제 0992021 서정원
임베디드 과제 0992021 서정원임베디드 과제 0992021 서정원
임베디드 과제 0992021 서정원
 
"Санхүүгийн үндэс" Хичээл - 8
"Санхүүгийн үндэс" Хичээл - 8"Санхүүгийн үндэс" Хичээл - 8
"Санхүүгийн үндэс" Хичээл - 8
 
Hyundai Tucson: listino prezzi
Hyundai Tucson: listino prezziHyundai Tucson: listino prezzi
Hyundai Tucson: listino prezzi
 
Cisco 2960x switch password recovery
Cisco 2960x switch password recoveryCisco 2960x switch password recovery
Cisco 2960x switch password recovery
 
Network Security
Network SecurityNetwork Security
Network Security
 
Redistribution into EIGRP
Redistribution into EIGRPRedistribution into EIGRP
Redistribution into EIGRP
 
리눅스 커널 디버거 KGDB/KDB
리눅스 커널 디버거 KGDB/KDB리눅스 커널 디버거 KGDB/KDB
리눅스 커널 디버거 KGDB/KDB
 
vlan
vlanvlan
vlan
 
EIGRP Overview
EIGRP OverviewEIGRP Overview
EIGRP Overview
 
임베디드
임베디드임베디드
임베디드
 

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

Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .YEONG-CHEON YOU
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5YEONG-CHEON YOU
 
2019스마트국토엑스포-20190808-mago3D기술워크샵
2019스마트국토엑스포-20190808-mago3D기술워크샵2019스마트국토엑스포-20190808-mago3D기술워크샵
2019스마트국토엑스포-20190808-mago3D기술워크샵Gaia3D,Inc.
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340Samsung Electronics
 
Spark performance tuning
Spark performance tuningSpark performance tuning
Spark performance tuninghaiteam
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유Hwan Min
 
android stuff1
android stuff1android stuff1
android stuff1Jin Jiu
 
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) YoungSu Son
 
Alluxio: Data Orchestration on Multi-Cloud
Alluxio: Data Orchestration on Multi-CloudAlluxio: Data Orchestration on Multi-Cloud
Alluxio: Data Orchestration on Multi-CloudJinwook Chung
 
mago3d workshop in FOSS4G Korea 2018
mago3d workshop in FOSS4G Korea 2018mago3d workshop in FOSS4G Korea 2018
mago3d workshop in FOSS4G Korea 2018Gaia3D,Inc.
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집Daegwon Kim
 
Red Hat OpenStack 17 저자직강+스터디그룹_3주차
Red Hat OpenStack 17 저자직강+스터디그룹_3주차Red Hat OpenStack 17 저자직강+스터디그룹_3주차
Red Hat OpenStack 17 저자직강+스터디그룹_3주차Nalee Jang
 
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp진현 조
 
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자Taeyeop Kim
 
올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발cho hyun jong
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기YoungSu Son
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안Jeongsang Baek
 
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.chcbaram
 
Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차Nalee Jang
 

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

Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5
 
2019스마트국토엑스포-20190808-mago3D기술워크샵
2019스마트국토엑스포-20190808-mago3D기술워크샵2019스마트국토엑스포-20190808-mago3D기술워크샵
2019스마트국토엑스포-20190808-mago3D기술워크샵
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340
 
Spark performance tuning
Spark performance tuningSpark performance tuning
Spark performance tuning
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유
 
android stuff1
android stuff1android stuff1
android stuff1
 
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
 
Alluxio: Data Orchestration on Multi-Cloud
Alluxio: Data Orchestration on Multi-CloudAlluxio: Data Orchestration on Multi-Cloud
Alluxio: Data Orchestration on Multi-Cloud
 
mago3d workshop in FOSS4G Korea 2018
mago3d workshop in FOSS4G Korea 2018mago3d workshop in FOSS4G Korea 2018
mago3d workshop in FOSS4G Korea 2018
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집
 
Red Hat OpenStack 17 저자직강+스터디그룹_3주차
Red Hat OpenStack 17 저자직강+스터디그룹_3주차Red Hat OpenStack 17 저자직강+스터디그룹_3주차
Red Hat OpenStack 17 저자직강+스터디그룹_3주차
 
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp
 
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
 
올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
 
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
 
Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차
 
DPDK
DPDKDPDK
DPDK
 

More from Samsung Electronics

Samsung ARM Chromebook1/2 (for Hackers & System Developers)
Samsung ARM Chromebook1/2 (for Hackers & System Developers)Samsung ARM Chromebook1/2 (for Hackers & System Developers)
Samsung ARM Chromebook1/2 (for Hackers & System Developers)Samsung Electronics
 
Distributed Build to Speed-up Compilation of Tizen Package
Distributed Build to Speed-up Compilation of Tizen PackageDistributed Build to Speed-up Compilation of Tizen Package
Distributed Build to Speed-up Compilation of Tizen PackageSamsung Electronics
 
load-balancing-method-for-embedded-rt-system-20120711-0940
load-balancing-method-for-embedded-rt-system-20120711-0940load-balancing-method-for-embedded-rt-system-20120711-0940
load-balancing-method-for-embedded-rt-system-20120711-0940Samsung Electronics
 
booting-booster-final-20160420-0700
booting-booster-final-20160420-0700booting-booster-final-20160420-0700
booting-booster-final-20160420-0700Samsung Electronics
 

More from Samsung Electronics (7)

Samsung ARM Chromebook1/2 (for Hackers & System Developers)
Samsung ARM Chromebook1/2 (for Hackers & System Developers)Samsung ARM Chromebook1/2 (for Hackers & System Developers)
Samsung ARM Chromebook1/2 (for Hackers & System Developers)
 
Distributed Build to Speed-up Compilation of Tizen Package
Distributed Build to Speed-up Compilation of Tizen PackageDistributed Build to Speed-up Compilation of Tizen Package
Distributed Build to Speed-up Compilation of Tizen Package
 
load-balancing-method-for-embedded-rt-system-20120711-0940
load-balancing-method-for-embedded-rt-system-20120711-0940load-balancing-method-for-embedded-rt-system-20120711-0940
load-balancing-method-for-embedded-rt-system-20120711-0940
 
gcce-uapm-slide-20131001-1900
gcce-uapm-slide-20131001-1900gcce-uapm-slide-20131001-1900
gcce-uapm-slide-20131001-1900
 
distcom-short-20140112-1600
distcom-short-20140112-1600distcom-short-20140112-1600
distcom-short-20140112-1600
 
UNAS-20140123-1800
UNAS-20140123-1800UNAS-20140123-1800
UNAS-20140123-1800
 
booting-booster-final-20160420-0700
booting-booster-final-20160420-0700booting-booster-final-20160420-0700
booting-booster-final-20160420-0700
 

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

  • 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/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/12 Motivation 1) CPU와 Memory가 제한적인 임베디드 디바이스에서 애플리케이션 스토어의 등장 2) 시스템이 리부팅되거나, 시스템의 반응속도가 갑자기 느려지는 현상 3) 고객들의 디바이스에 대한 충성심 및 회사의 경쟁력을 확고히 하기 위하여 디버깅 기술이 중요함. Too many apps
  • 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/12 • 실시간으로 원격으로 디버깅가능 • 진입장벽 해소를 위한 GUI 인터페이스 What is the Challenges?
  • 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/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/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/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
  • 11. 11/12 • Eclipse에서 GDB를 연동하여 커널 디버깅시에 아래와 같이 GDB콘솔에서 Tracdpoint관련 GDB명령을 수행하도록 한다. (1) (2) (3)(4) Evaluation 3/3
  • 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/12
  • 14. 14/12 BACKUP SLIDES In Case We Have More Time…
  • 15. 15/12 Eclipse & GDB 연동 작업 : Eclipse 3.7.2(Indigo) C • C/C++코드의 디버깅을 위해서는 Eclipse CDT 버전을 다운로드해야함. (2) (1)
  • 16. 16/12 Eclipse & GDB 연동 작업 : zylinCDT 플러그인 설치 • Eclipse에서 gdb-release을 연동하기 위하여 Eclipse 실행후에 [Help] – [ Install New Software] 메뉴에 서 zylinCDT 플러그인 다운로드 (1) (2) (3)
  • 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/12 Eclipse & GDB 연동 작업 : Cross 컴파일러 셋팅 • ARM용 바이너리를 생성되도록 크로스 툴체인 경로를 셋팅하도록 한다. (1) (2) (3) (2) (2)
  • 19. 19/12 Eclipse & GDB 연동 작업 : 빌드 및 실행 테스트 • [Project] – [Build Project]을 클릭하여 ARM용 바이너리를 빌드하도록 한다. (1) (2) (3)
  • 20. 20/12 Eclipse & GDB 연동 작업 : Eclipse에서 GDB 실행 • [Run] - [Debug AS…] – [ Debug Configurations]을 선택한다. (1) (2)
  • 21. 21/12 Eclipse & GDB 연동 작업 : Eclipse에서 GDB 실행 • [Debugger]탭메뉴에서 컴파일해놓은 gdb- release 명령은 연결시킨다. (1) (2) (3) * mi: Machine Interface
  • 22. 22/12 Eclipse & GDB 연동 작업 : Eclipse에서 GDB 실행 • Gdb 실행시 환경 설정 작업을 자동으로 실행하도록 [Commands]탭의 “Run” 명령박스에 추가하도록 한 다. (1) (2) (3) (4)
  • 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/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/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

  1. Thread scheduling framework