앞에서 작성된 글이 커널 버젼이 변경되어서 정상동작 하지 않는것 같아서 현재까지 확인한 사항 업데이트해서 문서를 만들었습니다.

내용은 앞쪽 글과 동일하며 단지 커널소스를 가져오는 부분 정도만 업데이트 했습니다.

 

-분석내용

인터넷에 확인해 보면 마지막으로 QEMU 에뮬레이션 되었던 kernel version이 2015년 11월 버젼인것 같습니다.

최선 커널 버젼으로 하면 emmc, rng driver가 정상적으로 에뮬레이션 되지 않아서 문제가 발생하는것 같습니다

kernel source를  2015년 11월 버젼(tag5)가져와서 사용하면 정상동작 합니다.

 

원본 URL :

http://www.iamroot.org/xe/index.php?mid=Knowledge&document_srl=179241

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 https://github.com/raspberrypi/linux
$ cd linux
$ git checkout tag5

$ make bcm2709_defconfig
$ make menuconfig

Kernel hacking --> Compile-time checks and compiler option --> 
            Compile the kernel with debug info --> Enable
            Generate dwarf4 debuginfo --> Enable
            Provide GDB scripts for kernel debuffing--> 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
$ ddd --debugger arm-linux-gnueabihf-gdb ./vmlinux
# GDB shell에서 target remote localhost:1234 명령을 친다.
(gdb) target remote localhost:1234

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

# 디버깅 시작.
(gdb) c

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 강좌, 팁, 정보등에 대해 올리는 게시판입니다. woos 2016.04.09 246
129 제3회 ETRI 휴먼이해 인공지능 논문경진대회 file 인공지능팩토리1 2024.04.22 26
128 KVM 소스코드를 수정하고자 합니다. [1] 두두 2024.04.20 37
127 [딥러닝러닝데이] AutoML을 활용한 모델 탐색-서호건 file 인공지능팩토리1 2024.01.11 93
126 [랭체인러닝데이] 개인 데이터셋을 통한 llama2 fine-tune - 최재혁 file 인공지능팩토리1 2024.01.05 66
125 [SD러닝데이] 광고에서의 생성 AI 활용 실무사례 모음집 file 인공지능팩토리1 2023.12.07 43
124 [챗GPT 러닝데이] 개발자에게 부탁하기 두려웠던 나머지...(더보기) file 인공지능팩토리1 2023.11.02 75
123 [2023 제3회 K-water AI 경진대회] 어종(魚種) 식별 및 분류 알고리즘 개발 file 인공지능팩토리1 2023.10.25 42
122 제4차 USG AI·데이터 문제해결 제조혁신 경진대회 file 인공지능팩토리1 2023.10.25 17
121 [SD러닝데이] 디자이너의 영상&3D에서의 AI 활용 실전 워크플로우 file 인공지능팩토리1 2023.10.17 17
120 [리눅스 커널 강의] 커널 코어 분석 공유 [1] 이파란 2023.10.11 148
119 [챗GPT 러닝데이 세미나] 사랑의 컨설턴트 챗GPT(챗GPT를 활용한 연애상담) file 인공지능팩토리1 2023.10.05 28
118 [Github] 경로 또는 이름이 바뀐 파일 추적 기능 공유 file 이파란 2023.08.23 60
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 42
112 [경진대회] 2023 AI 대학원 챌린지 with kt 믿:음 ~ 7월 23일(일) 인공지능팩토리 2023.07.05 30
111 [무료세미나] - SD러닝데이 Knock Knock. "Stable Diffusion? 인공지능팩토리 2023.06.30 22
110 위성영상을 활용한 정유탱크·컨테이너 탐지 AI 경진대회 인공지능팩토리 2023.06.22 29
XE Login