2020-12-22qemu加gdb跑linux kernel

预安装依赖库
有ncurses等等;

1. 编译linux kernel
下载linux源码
make O=xxx allyesconfig
make O=xxx menuconfig
cd xxx
make -j2

2. 编译busybox
make O=xxxx defconfig
make O=xxxx menuconfig,选择build static library
cd xxxx
make -j2
make install

  • 2.1 在busybox编译完目录xxxx下制作init,inittab,rcS等脚本

将编译完的busybox里的内容拷贝到需要制作的根文件目录下
mkdir -pv {bin,dev,sbin,etc,proc,sys/kernel/debug,usr/{bin,sbin},lib,lib64,mnt/root,root}
cp -av _install/* xxx/
cp -av /dev/{null,console,tty,sda1}

init脚本
ln -s ./bin/busybox init

inittab:

::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a

init.d/rcS:

mount -t proc none /proc
mount -t sysfs none /sys
mount -t debugfs none /sys/kernel/debug
echo -e "\nBoot took $(cut -d' ' -f1 /proc/uptime) seconds\n"
echo -e "\nlinux started\n"
  • 2.2 制作根文件系统
    find . | cpio -H newc -o > ../initramfs.cpio
    cd ../
    cat initramfs.cpio | gzip > initramfs.igz

3. gdb启动远程调试linux kernel

  • 3.1 qemu启动kernel
    `qemu-system-x86_64 -kernel xxx/arch/x86_64/boot/bzImage -initrd initramfs.igz -nographic -append "nokaslr earlyprintk=serial,ttyS0 console=ttyS0" -S -s

  • 3.2 gdb启动vmlinux
    打开一个终端,进入linux内核编译完后的目录下xxx
    gdb vmlinux
    (gdb) target remote:1234
    (gdb) b start_kernel
    (gdb) c

你可能感兴趣的:(2020-12-22qemu加gdb跑linux kernel)