원본 URL :

https://github.com/iamroot12CD/linux/wiki/raspberrypi2_kernel_debug

 

 

QEMU를 이용한 라즈베리파이2 커널 디버깅

QEMU 컴파일

$ mkdir -p ~/git/pi2
$ cd ~/git/pi2

$ git clone https://github.com/0xabu/qemu.git -b raspi
$ cd qemu
$ git submodule update --init dtc
  • QEMU 커널 BASE 주소 수정
    • Qemu 소스 hw/arm/boot.c 파일 수정.
#define KERNEL_LOAD_ADDR 0x00010000

이것을 아래처럼 수정.

#define KERNEL_LOAD_ADDR 0x00008000
  • compile 및 설치
$ cd ~/git/pi2/qemu

$ ./configure --target-list=arm-softmmu
$ make -j$(nproc)
$ sudo make install

라즈베리파이2용 커널 컴파일

$ mkdir ~/git/pi2
$ cd ~/git/pi2
$ git clone https://github.com/raspberrypi/tools
  • 컴파일 환경 설정 파일 만들기
$ vi env.sh
#!/bin/sh
export PATH=~/git/pi2/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin:$PATH
export KERNEL=kernel7

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
  • 환경 설정 적용.
$ source env.sh
  • 커널 컴파일시 추가 셋팅
$ cd ~/git/pi2/
$ git clone --depth=1 https://github.com/raspberrypi/linux
$ git checkout tag5  #  2016년 11월 이후 버전에서만 실행

$ cd linux
$ make bcm2709_defconfig
$ make menuconfig

Kernel hacking --> Compile-time checks and compiler option --> Compile the kernel with debug info --> Enable

$ make -j$(nproc) zImage modules dtbs

커널 디버깅

  • 컴파일 된 커널과 DTB파일 추출
$ scripts/mkknlimg arch/arm/boot/zImage ~/git/pi2/kernel7.img
$ cp arch/arm/boot/dts/bcm2709-rpi-2-b.dtb ~/git/pi2
  • QEMNU 실행 스크립트 작성.
$ vi ~/git/pi2/run_qemu.sh
#!/bin/sh

BOOT_CMDLINE="rw earlyprintk loglevel=8 console=ttyAMA0,115200 console=tty1 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2"
DTB_FILE="bcm2709-rpi-2-b.dtb"
KERNEL_IMG="kernel7.img"
SD_IMG="raspbian-jessie.img"

echo "target remote localhost:1234"
qemu-system-arm -s -S -M raspi2 -kernel ${KERNEL_IMG} \
    -sd ${SD_IMG} \
    -append "${BOOT_CMDLINE}" \
    -dtb ${DTB_FILE} -serial stdio
  • QEMU 실행
$ sh ./run_qemu.sh
  • gdb 실행 새터미널을 띄운후 gdb 실행(디버깅)
$ cd ~/git/pi2
$ source env.sh
$ cd ~/git/pi2/linux
$ arm-linux-gnueabihf-gdb ./vmlinux
# GDB shell에서 target remote localhost:1234 명령을 친다.
(gdb) target remote localhost:1234

# start_kernel 에 브레이크 포인트 셋팅
(gdb) b start_kernel

# 디버깅 시작.
(gdb) c

# 소스 확인
(gdb) list
493 vmalloc_init();
494 ioremap_huge_init();
495 }
496
497 asmlinkage __visible void __init start_kernel(void)
498 {
499 char *command_line;
500 char *after_dashes;
501
502 /*
(gdb)
번호 제목 글쓴이 날짜 조회 수
공지 [공지] 강좌, 팁, 정보등에 대해 올리는 게시판입니다. woos 2016.04.09 246
129 제2회 통신망 안정성 확보를 위한 인공지능 해커톤 인공지능팩토리 2023.07.21 10
128 [챗GPT 러닝데이 | 챗GPT말고 LLM] 딥러닝 병렬처리 및 Polyglot 언어모델 file 인공지능팩토리 2023.05.12 14
127 [한국농수산식품유통공사] 2022 농산물 가격 예측 AI 경진대회 ~ 8. 28. (일) 15:00 접수마감 인공지능팩토리 2022.07.29 15
126 제5회 2023 연구개발특구 AI SPARK 챌린지 인공지능팩토리 2023.04.18 16
125 무료온라인 [랭체인러닝데이] 챗GPT 점메추 메뉴판, 예산입력하고 점심 메뉴 추천받자 file 인공지능팩토리 2023.06.02 16
124 [총 상금 1억원] 2022년 스마트농업 AI 경진대회 ~ 8월 28일 (일) 17시까지 접수마감 인공지능팩토리 2022.08.14 17
123 INNOPOLIS AI SPACE-S 인공지능 세미나 - 정형 데이터를 다루는 머신러닝 문제해결 패턴 인공지능팩토리 2022.09.14 17
122 [SD러닝데이] 디자이너의 영상&3D에서의 AI 활용 실전 워크플로우 file 인공지능팩토리1 2023.10.17 17
121 제4차 USG AI·데이터 문제해결 제조혁신 경진대회 file 인공지능팩토리1 2023.10.25 17
120 제3회 ETRI 휴먼이해 인공지능 논문경진대회 file 인공지능팩토리1 2024.04.22 17
119 [캐글 1위 수상자의 세미나] 시장 데이터 분석 및 머신러닝 활용 가이드 인공지능팩토리 2022.08.13 18
118 [무료 세미나] 퀀트 투자와 데이터 기반 트레이딩 그리고 인공지능 인공지능팩토리 2022.08.24 18
117 [공모전] 제4회 빅데이터・인공지능 스타트업 경진대회 인공지능팩토리 2022.09.08 19
116 베타 테스터 모집 : AIF BUG SLAY 인공지능팩토리 2023.04.18 19
115 제2회 ETRI 휴먼이해 인공지능 논문경진대회 ~ 4월 14일 (금) 8시 접수 마감 인공지능팩토리 2023.02.28 22
114 [무료세미나] - SD러닝데이 Knock Knock. "Stable Diffusion? 인공지능팩토리 2023.06.30 22
113 2023 제1회 철도 인공지능 경진대회 인공지능팩토리 2023.07.24 22
112 무료세미나 음성 챗봇 만들기와 마이크로소프트 ISV 혜택 및 등록팁 방출! 인공지능팩토리 2023.07.26 23
111 [챗GPT 러닝데이 | 챗GPT말고 LLM] LLM 기반 챗봇 만들기 file 인공지능팩토리 2023.05.06 24
110 (채용특전) 제2회 교원그룹 AI 챌린지 - 생성 AI기반 에듀테크 사업 제안 대회 인공지능팩토리 2023.05.22 24
XE Login