원본 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 제3회 ETRI 휴먼이해 인공지능 논문경진대회 file 인공지능팩토리1 2024.04.22 11
128 KVM 소스코드를 수정하고자 합니다. [1] 두두 2024.04.20 22
127 [딥러닝러닝데이] AutoML을 활용한 모델 탐색-서호건 file 인공지능팩토리1 2024.01.11 91
126 [랭체인러닝데이] 개인 데이터셋을 통한 llama2 fine-tune - 최재혁 file 인공지능팩토리1 2024.01.05 61
125 [SD러닝데이] 광고에서의 생성 AI 활용 실무사례 모음집 file 인공지능팩토리1 2023.12.07 43
124 [챗GPT 러닝데이] 개발자에게 부탁하기 두려웠던 나머지...(더보기) file 인공지능팩토리1 2023.11.02 74
123 [2023 제3회 K-water AI 경진대회] 어종(魚種) 식별 및 분류 알고리즘 개발 file 인공지능팩토리1 2023.10.25 41
122 제4차 USG AI·데이터 문제해결 제조혁신 경진대회 file 인공지능팩토리1 2023.10.25 17
121 [SD러닝데이] 디자이너의 영상&3D에서의 AI 활용 실전 워크플로우 file 인공지능팩토리1 2023.10.17 17
120 [리눅스 커널 강의] 커널 코어 분석 공유 이파란 2023.10.11 127
119 [챗GPT 러닝데이 세미나] 사랑의 컨설턴트 챗GPT(챗GPT를 활용한 연애상담) file 인공지능팩토리1 2023.10.05 28
118 [Github] 경로 또는 이름이 바뀐 파일 추적 기능 공유 file 이파란 2023.08.23 59
117 무료세미나 음성 챗봇 만들기와 마이크로소프트 ISV 혜택 및 등록팁 방출! 인공지능팩토리 2023.07.26 23
116 2023 제1회 철도 인공지능 경진대회 인공지능팩토리 2023.07.24 22
115 제2회 통신망 안정성 확보를 위한 인공지능 해커톤 인공지능팩토리 2023.07.21 10
114 무료세미나 - [SD러닝데이] AI야 배경 좀 그려줘 인공지능팩토리 2023.07.13 29
113 [무료세미나] SAM(Segment Anything Model)과 친해지기 인공지능팩토리 2023.07.06 41
112 [경진대회] 2023 AI 대학원 챌린지 with kt 믿:음 ~ 7월 23일(일) 인공지능팩토리 2023.07.05 29
111 [무료세미나] - SD러닝데이 Knock Knock. "Stable Diffusion? 인공지능팩토리 2023.06.30 22
110 위성영상을 활용한 정유탱크·컨테이너 탐지 AI 경진대회 인공지능팩토리 2023.06.22 29
XE Login