diff options
-rw-r--r-- | Makefile | 35 | ||||
-rw-r--r-- | config/linux.config | 21 | ||||
-rwxr-xr-x | qemu-gdb.cmds | 2 | ||||
-rwxr-xr-x | skeleton/init | 1 |
4 files changed, 50 insertions, 9 deletions
@@ -7,6 +7,7 @@ KEYMAP ?= i386/qwertz/de-latin1 LINUX_LOCAL ?= DEFCONFIG ?= n NO_MODULES ?= n +USE_GDB ?= n BUILDJOBS ?= $(shell cat /proc/cpuinfo | grep -o '^processor' | wc -l) THIS_DIR=$(realpath .) @@ -53,6 +54,7 @@ BUSYBOX_LDFLAGS=-L$(ROOTFS_DIR)/lib BUSYBOX_TARGET=$(BUSYBOX_BUILD_DIR)/busybox all: pre dl extract build image + @echo 'Finished.' $(DL_DIR): mkdir -p '$@' @@ -175,22 +177,40 @@ net: net-clean: sudo ip link delete $(NET_QEMU_TAP) +ifeq ($(USE_GDB),y) +QEMU_ARGS += -s -S +endif + +qemu-gdb-connect: + gdb -s '$(LINUX_BUILD_DIR)/vmlinux' -x ./qemu-gdb.cmds + qemu: image - qemu-system-$(ARCH) -kernel '$(LINUX_BUILD_DIR)/arch/$(ARCH)/boot/bzImage' -initrd '$(INITRD_TARGET)' -enable-kvm -m $(MEMORY) -vga qxl -display sdl -append 'keymap=$(KEYMAP)' + qemu-system-$(ARCH) -kernel '$(LINUX_BUILD_DIR)/arch/$(ARCH)/boot/bzImage' -initrd '$(INITRD_TARGET)' \ + -enable-kvm -m $(MEMORY) -vga qxl -display sdl \ + -append 'nokaslr keymap=$(KEYMAP)' $(QEMU_ARGS) qemu-console: image - qemu-system-$(ARCH) -kernel '$(LINUX_BUILD_DIR)/arch/$(ARCH)/boot/bzImage' -initrd '$(INITRD_TARGET)' -enable-kvm -m $(MEMORY) -curses -append 'keymap=$(KEYMAP)' + qemu-system-$(ARCH) -kernel '$(LINUX_BUILD_DIR)/arch/$(ARCH)/boot/bzImage' -initrd '$(INITRD_TARGET)' \ + -enable-kvm -m $(MEMORY) -curses \ + -append 'nokaslr keymap=$(KEYMAP)' $(QEMU_ARGS) qemu-serial: image - qemu-system-$(ARCH) -kernel '$(LINUX_BUILD_DIR)/arch/$(ARCH)/boot/bzImage' -initrd '$(INITRD_TARGET)' -enable-kvm -m $(MEMORY) -nographic -append 'console=ttyS0 keymap=$(KEYMAP)' + qemu-system-$(ARCH) -kernel '$(LINUX_BUILD_DIR)/arch/$(ARCH)/boot/bzImage' -initrd '$(INITRD_TARGET)' \ + -enable-kvm -m $(MEMORY) -nographic \ + -append 'nokaslr console=ttyS0 keymap=$(KEYMAP)' $(QEMU_ARGS) qemu-serial-net: image - qemu-system-$(ARCH) -kernel '$(LINUX_BUILD_DIR)/arch/$(ARCH)/boot/bzImage' -initrd '$(INITRD_TARGET)' -enable-kvm -m $(MEMORY) -nographic \ - -net nic,macaddr=$(NET_HWADDR) -net tap,ifname=$(NET_QEMU_TAP),br=$(NET_BRIDGE),script=no,downscript=no -append 'net console=ttyS0 keymap=$(KEYMAP)' + qemu-system-$(ARCH) -kernel '$(LINUX_BUILD_DIR)/arch/$(ARCH)/boot/bzImage' -initrd '$(INITRD_TARGET)' \ + -enable-kvm -m $(MEMORY) -nographic \ + -net nic,macaddr=$(NET_HWADDR) -net tap,ifname=$(NET_QEMU_TAP),br=$(NET_BRIDGE),script=no,downscript=no \ + -append 'nokaslr net console=ttyS0 keymap=$(KEYMAP)' \ + $(QEMU_ARGS) qemu-net: image - qemu-system-$(ARCH) -kernel '$(LINUX_BUILD_DIR)/arch/$(ARCH)/boot/bzImage' -initrd '$(INITRD_TARGET)' -enable-kvm -m $(MEMORY) -vga qxl -display sdl \ - -net nic,macaddr=$(NET_HWADDR) -net tap,ifname=$(NET_QEMU_TAP),br=$(NET_BRIDGE),script=no,downscript=no -append 'net keymap=$(KEYMAP)' + qemu-system-$(ARCH) -kernel '$(LINUX_BUILD_DIR)/arch/$(ARCH)/boot/bzImage' -initrd '$(INITRD_TARGET)' \ + -enable-kvm -m $(MEMORY) -vga qxl -display sdl \ + -net nic,macaddr=$(NET_HWADDR) -net tap,ifname=$(NET_QEMU_TAP),br=$(NET_BRIDGE),script=no,downscript=no \ + -append 'nokaslr net keymap=$(KEYMAP)' $(QEMU_ARGS) define HELP_PREFIX @printf '%*s%-10s - %s\n' '20' '$1' '' '$2' @@ -219,6 +239,7 @@ help: $(call HELP_PREFIX,qemu-net,test your kernel/initramfs combination with QEMU and network support through TAP) @echo @echo -e '\tAdditional make options:' + $(call HELP_PREFIX_OPTS,USE_GDB=$(USE_GDB),start QEMU with debugging capabilities enabled) $(call HELP_PREFIX_OPTS,NO_MODULES=$(NO_MODULES),neither build nor install kernel modules) $(call HELP_PREFIX_OPTS,MEMORY=$(MEMORY),set the RAM size for QEMU in MBytes) $(call HELP_PREFIX_OPTS,NET_QEMU_TAP=$(NET_QEMU_TAP),set the ifname which QEMU will use as TAP device (run `make net` before)) diff --git a/config/linux.config b/config/linux.config index dcd8d37..216c35b 100644 --- a/config/linux.config +++ b/config/linux.config @@ -2356,9 +2356,11 @@ CONFIG_SERIAL_8250_MID=y # # Non-8250 serial port support # +CONFIG_SERIAL_KGDB_NMI=y # CONFIG_SERIAL_UARTLITE is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_CONSOLE_POLL=y # CONFIG_SERIAL_JSM is not set # CONFIG_SERIAL_LANTIQ is not set # CONFIG_SERIAL_SCCNXP is not set @@ -4560,7 +4562,13 @@ CONFIG_DEBUG_BUGVERBOSE=y # # Compile-time checks and compiler options # -# CONFIG_DEBUG_INFO is not set +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_INFO_REDUCED is not set +# CONFIG_DEBUG_INFO_COMPRESSED is not set +# CONFIG_DEBUG_INFO_SPLIT is not set +CONFIG_DEBUG_INFO_DWARF4=y +# CONFIG_DEBUG_INFO_BTF is not set +CONFIG_GDB_SCRIPTS=y CONFIG_ENABLE_MUST_CHECK=y CONFIG_FRAME_WARN=2048 # CONFIG_STRIP_ASM_SYMS is not set @@ -4581,7 +4589,16 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE="" CONFIG_DEBUG_FS=y CONFIG_HAVE_ARCH_KGDB=y -# CONFIG_KGDB is not set +CONFIG_KGDB=y +CONFIG_KGDB_SERIAL_CONSOLE=y +CONFIG_KGDB_TESTS=y +CONFIG_KGDB_TESTS_ON_BOOT=n +CONFIG_KGDB_LOW_LEVEL_TRAP=y +CONFIG_KGDB_KDB=y +CONFIG_KDB_DEFAULT_ENABLE=0x1 +CONFIG_KDB_KEYBOARD=y +CONFIG_KDB_CONTINUE_CATASTROPHIC=0 +CONFIG_ARCH_HAS_EARLY_DEBUG=y CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y # CONFIG_UBSAN is not set # end of Generic Kernel Debugging Instruments diff --git a/qemu-gdb.cmds b/qemu-gdb.cmds new file mode 100755 index 0000000..fc141d5 --- /dev/null +++ b/qemu-gdb.cmds @@ -0,0 +1,2 @@ +target remote :1234 +hbreak start_kernel diff --git a/skeleton/init b/skeleton/init index e8618a6..8b4f148 100755 --- a/skeleton/init +++ b/skeleton/init @@ -66,6 +66,7 @@ for arg in $(cat /proc/cmdline | tr '[:upper:]' '[:lower:]'); do esac done +resize hostname ${HOSTNAME} cd ${HOME} setsid cttyhack sh |