Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ubuntu
- fprintf
- context
- 속도저하
- context switch
- Shared Folder
- activities
- pagefile.sys
- interrupt context
- 멀티프로세싱
- makefile
- 디스크 축소
- intents
- fscanf
- layouts
- HDR
- usb2.0
- interrupt handler
- jenkins
- gparted
- sprintf
- sscanf
- 소캣
- memcmp
- 젠킨스
- 환경 변수
- DMA
- 디스크립터
- 프레임버퍼
- 문자형 디바이스 파일
Archives
- Today
- Total
do{학습}while
Kernel) QEMU와 Buildroot로 ftrace 실습 환경 만들기 본문

QEMU와 Buildroot로 ftrace 실습 환경 만들기
이번 글에서는 QEMU와 Buildroot를 이용해 ftrace를 실습할 수 있는 환경을 구축하는 방법을 정리한다. ftrace는 Linux 커널 내부의 동작을 추적할 수 있는 매우 강력한 도구이며, 별도의 추가 설치 없이 커널만 잘 구성해도 바로 사용할 수 있다. 이 실습은 x86_64 환경을 기준으로 진행된다.
1. ftrace란?
ftrace는 Linux 커널에 내장된 트레이싱 프레임워크로, 다음과 같은 작업에 사용된다:
- 함수 호출 추적
- 스케줄링 전환 추적
- 인터럽트 오프/온 상태 추적
- IRQ 지연 분석 등
ftrace는 /sys/kernel/debug/tracing 디렉토리를 통해 접근할 수 있으며, debugfs 파일 시스템이 마운트되어 있어야 한다.
2. 준비물
- QEMU (x86_64 기준)
- Buildroot (https://buildroot.org)
- Linux 호스트 시스템 (Ubuntu 등)
3. Buildroot 설정 및 커널 빌드
3-1. Buildroot 다운로드 및 기본 설정
git clone https://github.com/buildroot/buildroot.git
cd buildroot
make qemu_x86_64_defconfig
3-2. menuconfig 설정
make menuconfig
아래 항목을 확인하거나 수정한다:
- System configuration → Custom post-build script:
- board/qemu/x86_64/post-build.sh
기타 항목은 기본값을 사용해도 무방하다.
4. post-build.sh 작성
board/qemu/x86_64/post-build.sh 파일을 아래와 같이 생성한다:
#!/bin/sh
set -u
set -e
# tty1 콘솔 추가 (QEMU 그래픽 창 사용 시)
if [ -e ${TARGET_DIR}/etc/inittab ]; then
grep -qE '^tty1::' ${TARGET_DIR}/etc/inittab || \
sed -i '/GENERIC_SERIAL/a\
tty1::respawn:/sbin/getty -L tty1 0 vt100 # QEMU graphical window' ${TARGET_DIR}/etc/inittab
fi
# rcS 초기화 스크립트 추가
mkdir -p ${TARGET_DIR}/etc/init.d
cat <<EOF > ${TARGET_DIR}/etc/init.d/rcS
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mount -t debugfs none /sys/kernel/debug
echo "Init done"
EOF
chmod +x ${TARGET_DIR}/etc/init.d/rcS
이 스크립트는 파일 시스템 이미지가 생성되기 직전에 실행되며, ftrace 사용을 위한 debugfs 마운트를 자동으로 처리해준다.
5. 이미지 빌드
병렬 빌드를 위해 현재 시스템의 코어 수를 확인한다:
nproc
출력값이 14라면:
make -j14
또는 자동화 형태로:
make -j$(nproc)
6. QEMU로 부팅
qemu-system-x86_64 \
-kernel output/images/bzImage \
-hda output/images/rootfs.ext4 \
-append "root=/dev/sda console=ttyS0" \
-nographic
부팅이 완료되면 로그인 없이 바로 쉘로 진입할 수 있다.
7. ftrace 기본 사용법
부팅 후 다음 명령어로 debugfs 마운트 상태를 확인한다:
mount | grep debugfs
정상적으로 마운트되어 있다면 다음 경로로 진입 가능:
cd /sys/kernel/debug/tracing
기본 사용 예시는 다음과 같다:
echo function > current_tracer
echo > trace
echo 1 > tracing_on
ls /
echo 0 > tracing_on
cat trace
마무리
이 환경을 활용하면 커널 함수 호출, 스케줄링 전환, IRQ 상태 등 다양한 커널 내부 동작을 실시간으로 추적할 수 있다. 향후에는 다음과 같은 실습을 이어나갈 수 있다:
- 특정 함수만 추적하기 (set_ftrace_filter)
- function_graph를 통한 콜스택 시각화
- sched_switch를 이용한 스케줄러 분석
'Linux > Kernel' 카테고리의 다른 글
| Kernel) 디버깅을 연습을 위한 환경 셋팅(x86 환경) (0) | 2025.05.19 |
|---|---|
| Kernel) 커널 동기화 (0) | 2025.05.15 |
| Kernel) Interrupt, Interrupt handler, Interrupt context (0) | 2025.05.15 |
| Kernel) 프로세스 VS 스레드 (0) | 2025.05.14 |
| Kernel) Context와 Context Switch란 무엇인가 (0) | 2025.05.14 |