about summary refs log tree commit diff

My Linux Kernel Development Workflow

'Install' the required dependencies

$ nix develop

or if youre not using flakes...

$ nix-shell linux.nix

Build the kernel

$ make x86_64_defconfig
$ make defconfig kvm_guest.config
$ scripts/config --set-val DEBUG_INFO y --set-val DEBUG y  --set-val GDB_SCRIPTS y --set-val DEBUG_DRIVER y

$ make

Create root filesystem

$ qemu-img create qemu-image.img 1g
$ mkfs.ext2 qemu-image.img
$ mkdir mnt
# mount -o loop qemu-image.img mnt
# debootstrap --arch amd64 jessie mnt
# chroot mnt /bin/sh
## passdw (set password)
## exit

Run the VM with the built kernel

$ qemu-system-x86_64 -kernel arch/x86/boot/bzImage -drive file=qemu-image.img,index=0,media=disk,format=raw -append "root=/dev/sda nokaslr console=ttyS0 earlyprintk=serial" -enable-kvm -nographic

Debugging

  1. Add -s -S to the qemu parameters
  2. gdb -ex "add-auto-load-safe-path $(pwd)" -ex "file vmlinux" -ex 'target remote 127.0.0.1:1234' -ex 'hbreak start_kernel'
  3. Debug!