8000 GitHub - srgmzk/kdebug
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

srgmzk/kdebug

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 

Repository files navigation

kdebug. kernel debug practice

Useful links:

Build environment:

kernel

git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next.git
make ARCH=x86_64 x86_64_defconfig
make ARCH=x86_64 menuconfig
...
make -j8

rootfs

cd buildroot
make menuconfig
...
make -j8

Tools:

vim

cscope

http://cscope.sourceforge.net/large_projects.html

Для ядра Linux это немного сложнее, поскольку мы хотим исключить весь код в каталогах документации и сценариев, а также всю архитектуру и код сборки для всех чипов, кроме всеми любимого Intel x86 (который, как я предполагаю, является интересующая вас архитектура). Кроме того, я исключаю весь код драйвера ядра в этом примере (они более чем вдвое превышают объем кода для анализа, что приводит к раздуванию базы данных Cscope, и они содержат много повторяющихся определений, что часто затрудняет поиск. код драйвера, опустите соответствующую строку ниже или измените ее, чтобы распечатать только интересующие вас файлы драйвера):

#!/bin/bash

LNX="."

echo "Finding relevant source files..."
find $LNX                                                                \
   -path "$LNX/arch/*" ! -path "$LNX/arch/x86*" -prune -o               \
   -path "$LNX/include/asm-*" ! -path "$LNX/include/asm-generic*"       \
                              ! -path "$LNX/include/asm-x86*" -prune -o \
   -path "$LNX/tmp*" -prune -o                                          \
   -path "$LNX/Documentation*" -prune -o                                \
   -path "$LNX/scripts*" -prune -o                                      \
   -name "*.[chxsS]" -print > $LNX/cscope.files

echo "Building cscope database..."
time cscope -q -k -b -i cscope.files

exit 0

qemu

run kernel and debug it

  1. run target system:

Debug without rootfs:

qemu-system-x86_64 -s -S -no-kvm -kernel arch/x86/boot/bzImage -hda /dev/zero -append "root=/dev/zero console=ttyS0 nokaslr" -serial stdio -display none

Debug with rootfs:

qemu-system-x86_64 -kernel arch/x86/boot/bzImage -boot c -m 2049M -hda ../buildroot/output/images/rootfs.ext2 -append "root=/dev/sda rw console=ttyS0,115200 acpi=off nokaslr" -serial stdio -display none

In another terminal to open vim . inside Kernel src run vim command:

:Termdebug ./vmlinux
target remote localhost:1234
debugged program+  gdb communication+                                                      buffers
Reading symbols from ./vmlinux...
startupdone
(gdb) new-ui mi /dev/pts/6
New UI allocated
(gdb)
...