# kernel gdb
# Install Tools
``` bash
sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt update
sudo apt install gcc-arm-embedded
sudo apt install qemu libncurses5-dev gcc-arm-linux-gnueabi build-essential gcc-aarch64-linux-gnu
```
> 原教學使用 gdb-arm-none-eabi ,安裝名改為 gcc-arm-embedded([安裝](https://launchpad.net/~team-gcc-arm-embedded/+archive/ubuntu/ppa))
# Build
``` bash
git clone https://github.com/figozhang/runninglinuxkernel_4.0.git
cd runninglinuxkernel_4.0
export ARCH=arm # arm or arm64
export CROSS_COMPILE=arm-linux-gnueabi- # 原教學為 arm-none-eabi-,依環境設定
make vexpress_defconfig # arm公司的開發板
make menuconfig # 確認為上面設定的開發版 -> system type -> show ARM Ltd. Versatile Express family
make bzImage -j 8
make dtbs
```
> 現行的 github 上的 project 編譯會有問題,可以使用 docker image 內的編譯
> > docker pull benshushu/runninglinuxkernel:rlk_basic_ubuntu
# Prepare file system
使用 runninglinuxkernel4.0 內準備的 file system: _install_arm32 / _install_arm64 / _install_x86
## 準備 console
``` bash
cd _install_arm32/dev
sudo mknod console c 5 1
```
# Run
``` bash
qemu-system-arm -nographic -M vexpress-a9 -m 1024M -kernel arch/arm/boot/zImage -append "rdinit=/linuxrc console=ttyAMA0 loglevel=8" -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb
```
> 新增 -S -s 的 option 可以接 gdb,注意接上後,console 會類似卡住在等 gdb 控制
## 使用互動介面的 gdb 接管 qemu 執行 kernel
``` bash
arm-none-eabi-gdb --tui vmlinux
target remote localhost:1234
```
# Appendix
[奔跑吧 linux kernel](https://hub.docker.com/r/benshushu/runninglinuxkernel)