cmake: add support for gdb debugging, cd-rom boot
This commit is contained in:
@@ -1,27 +1,34 @@
|
||||
find_program(QEMU qemu-system-${TARGET_ARCH} REQUIRED)
|
||||
find_program(LLDB lldb REQUIRED)
|
||||
if (NOT QEMU)
|
||||
message(STATUS "QEMU: Cannot find qemu-system-${TARGET_ARCH}. Direct-kernel boot unavailable")
|
||||
return()
|
||||
endif ()
|
||||
|
||||
find_program(LLDB lldb)
|
||||
find_program(GDB gdb)
|
||||
|
||||
set(patched_kernel ${CMAKE_CURRENT_BINARY_DIR}/kernel/${kernel_name}.elf32)
|
||||
|
||||
add_custom_command(OUTPUT ${patched_kernel}
|
||||
DEPENDS ${kernel_name}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
$<TARGET_FILE:${kernel_name}>
|
||||
${patched_kernel}
|
||||
COMMAND ${BUILD_TOOLS_DIR}/e64patch ${patched_kernel}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
COMMENT "Patching kernel elf64 image"
|
||||
)
|
||||
|
||||
message(STATUS "QEMU: Enable direct-kernel boot")
|
||||
add_custom_target(run-kernel
|
||||
COMMAND
|
||||
${QEMU}
|
||||
-kernel $<TARGET_FILE:${kernel_name}>
|
||||
-kernel ${patched_kernel}
|
||||
-initrd ${sys_dir}/${bsp_name}
|
||||
-m 1G -serial stdio
|
||||
-m 1G -serial stdio -enable-kvm
|
||||
--append kernel.early-console=ttyS0
|
||||
USES_TERMINAL
|
||||
DEPENDS ${kernel_name} bsp)
|
||||
|
||||
add_custom_target(debug-kernel
|
||||
COMMAND
|
||||
${QEMU}
|
||||
-kernel $<TARGET_FILE:${kernel_name}>
|
||||
-initrd ${sys_dir}/${bsp_name}
|
||||
-m 1G -s -S &
|
||||
${LLDB}
|
||||
-o "file ${CMAKE_BINARY_DIR}/kernel/${kernel_name}.debug"
|
||||
-o "gdb-remote localhost:1234"
|
||||
USES_TERMINAL
|
||||
DEPENDS ${kernel_name} bsp)
|
||||
DEPENDS ${patched_kernel} bsp)
|
||||
|
||||
add_custom_target(run-kernel-monitor
|
||||
COMMAND
|
||||
@@ -31,3 +38,73 @@ add_custom_target(run-kernel-monitor
|
||||
-m 1G -monitor stdio
|
||||
USES_TERMINAL
|
||||
DEPENDS ${kernel_name} bsp)
|
||||
|
||||
if (image_cdrom)
|
||||
message(STATUS "QEMU: Enable CD-ROM boot")
|
||||
add_custom_target(run-cdrom
|
||||
COMMAND
|
||||
${QEMU}
|
||||
-cdrom ${image_cdrom}
|
||||
-m 1G
|
||||
-serial stdio
|
||||
USES_TERMINAL
|
||||
DEPENDS ${image_cdrom})
|
||||
endif ()
|
||||
|
||||
if (LLDB)
|
||||
message(STATUS "QEMU: Enable direct-kernel debug with LLDB")
|
||||
add_custom_target(debug-kernel
|
||||
COMMAND
|
||||
${QEMU}
|
||||
-kernel $<TARGET_FILE:${kernel_name}>
|
||||
-initrd ${sys_dir}/${bsp_name}
|
||||
-enable-kvm
|
||||
-m 1G -s -S &
|
||||
${LLDB}
|
||||
-o "file ${CMAKE_BINARY_DIR}/kernel/${kernel_name}.debug"
|
||||
-o "gdb-remote localhost:1234"
|
||||
USES_TERMINAL
|
||||
DEPENDS ${kernel_name} bsp)
|
||||
|
||||
if (image_cdrom)
|
||||
message(STATUS "QEMU: Enable CD-ROM debug with LLDB")
|
||||
add_custom_target(debug-cdrom
|
||||
COMMAND
|
||||
${QEMU}
|
||||
-cdrom ${image_cdrom}
|
||||
-m 1G -s -S &
|
||||
${LLDB}
|
||||
-o "file ${CMAKE_BINARY_DIR}/kernel/${kernel_name}.debug"
|
||||
-o "target remote localhost:1234"
|
||||
USES_TERMINAL
|
||||
DEPENDS cdrom)
|
||||
endif ()
|
||||
elseif (GDB)
|
||||
message(STATUS "QEMU: Enable direct-kernel debug with GDB")
|
||||
add_custom_target(debug-kernel
|
||||
COMMAND
|
||||
${QEMU}
|
||||
-kernel $<TARGET_FILE:${kernel_name}>
|
||||
-initrd ${sys_dir}/${bsp_name}
|
||||
-m 1G -s -S &
|
||||
${GDB}
|
||||
-o "file ${CMAKE_BINARY_DIR}/kernel/${kernel_name}.debug"
|
||||
-o "remote localhost:1234"
|
||||
USES_TERMINAL
|
||||
DEPENDS ${kernel_name} bsp)
|
||||
|
||||
if (image_cdrom)
|
||||
message(STATUS "QEMU: Enable CD-ROM debug with GDB")
|
||||
add_custom_target(debug-cdrom
|
||||
COMMAND
|
||||
${QEMU}
|
||||
-cdrom ${image_cdrom}
|
||||
-m 1G -s -S &
|
||||
${GDB} -tui
|
||||
-s "${CMAKE_BINARY_DIR}/kernel/${kernel_name}.debug"
|
||||
-ex "target remote localhost:1234"
|
||||
USES_TERMINAL
|
||||
DEPENDS ${image_cdrom})
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user