Узнайте, как скомпилировать и установить ядро и использовать его в конфигурации make menuconfig ниже. Вы можете искать Sybmbols с помощью клавиши F8 или клавиши / в menuconfig. (Например, wiki.ubuntu.com . В первом абзаце позаботьтесь о том, чтобы выполнить deb-sr c перед apt-get:)
# CONFIG_SERIAL_KGDB_NMI не установлено
CONFIG_CONSOLE_POLL = y
# CONFIG_DEBUG_INFO не задано
CONFIG_KGDB = y
CONFIG_KGDB_SERIAL_CONSOLE = y
ДБ
КОНФ. * # CONFIG_KGDB_KDB не задано CONFIG_FRAME_POINTER = y
CONFIG_DEBUG_INFO = y
# CONFIG_DEBUG_INFO_REDUCED не задано
* 1048_49_ CONFIG * CONFIG * CONFIG * CONFIG * CONFIG не установлен 1050 * CONFIG_DEBUG_INFO_DWARF4 = y CONFIG_GDB_SCRIPTS = y
CONFIG_STRIP_ASM_SYMS = y
# CONFIG_RANDOMIZE_BASE не установлено * 10 * * * * * * * * * * * * * * * * * Примечание для расширенного использования в Yocto, пропустите, если вы отлаживаете P C: в yocto я создал на своем слое файл: recipes-kernel / linux / linux -mainline _%. Bbappend с содержимым: FILESEXTRAPATHS_prepend: = " $ {THISDIR} / files: "SRC_URI + =" file: //kgdb.cfg «И в files / kgdb.cfg Я добавил фрагмент конфигурации, показанный выше (без недоступных параметров ARM CONFIG_RANDOMIZE_BASE и CONFIG_FRAME_POINTER))
Вам нужен второй компьютер отладчика, мы называем его «отладчик p c» ":
- Полный исходный код ядра, тот же код, который вы использовали для компиляции ядра выше. (Если вы скомпилировали объекты .o и .ko на месте, а не в папке сборки, вам лучше не копировать каталог из другого p c, где вы вызвали make et c. In, но тогда лучше захватить fre sh исходники снова.)
- vm linux файл, содержащий символы (находится в исходном тексте ядра root или в папке сборки самого высокого уровня после создания ядра).
- vm linux -gdb.py файл, созданный во время сборки ядра (также находится на той же позиции на самом высоком уровне.).
- Все скрипты в папке scripts / gdb (Скрипты папки на одном и том же верхнем уровне -позиция. Если вы используете выделенную папку сборки, используйте папку сценария оттуда, а не из исходной папки.)
- (Дополнительно: если оба компьютера не совпадают по процессору, как Intel и Arm, крестик -gdb build. Игнорировать, если вы используете Intel / AMD.)
Примечание для расширенного использования Yocto, я сделал что-то вроде (игнорировать, если вы отлаживаете P C):
bitbake -c patch virtual/kernel #(apply the changed kernel config from above)
bitbake -f -c compile virtual/kernel #(unpack is not sufficient because of vmlinux-gdb.py)
mkdir ~/gdbenv
cp -a tmp/work-shared/phyboard-mira-imx6-14/kernel-source/. ~/gdbenv
cp tmp/work/phyboard_mira_imx6_14-phytec-linux-gnueabi/linux-mainline/4.19.100-phy1-r0.0/build/vmlinux ~/gdbenv
cp tmp/work/phyboard_mira_imx6_14-phytec-linux-gnueabi/linux-mainline/4.19.100-phy1-r0.0/build/vmlinux-gdb.py ~/gdbenv
mkdir ~/gdbenv/scripts
cp -r tmp/work/phyboard_mira_imx6_14-phytec-linux-gnueabi/linux-mainline/4.19.100-phy1-r0.0/build/scripts/gdb ~/gdbenv/scripts
Затем (игнорируйте, если вы используете йо-бит P C) bake - c populate_sdk [my-image]
Затем (все еще игнорировать на P C) установите файл sdk. sh -installation из каталога развертывания в отладчике p c и запустите окружение в соответствии с выводом сценария установки (запомните эту команду), затем используйте «$ GDB» для запуска cross-gdb вместо «gdb».
Выполнение отладки
Запустите на отладчике два экрана консоли:
Консоль 1, s sh: +++++++++++ ++++++++++++++++++++++++++++
ssh user@192.168.x.y
sudo -s
echo ttyS0,9600n8 > /sys/module/kgdboc/parameters/kgdboc
echo 1 > /proc/sys/kernel/sysrq
echo g > /proc/sysrq-trigger
Консоль 2, локальная: ++++++++ ++++++++++++++++++++++++++++++++
cd ~/gdbenv
gdb -tui ./vmlinux
add-auto-load-safe-path ~/gdbenv
source ~/gdbenv/vmlinux-gdb.py
set serial baud 9600
target remote /dev/ttyS0 (use the tty port you confirmed in the beginning)
b [name of the c funtion you want to debug]
cont
Вернуться к консоли 1, s sh : +++++++++++++++++++++++++++++++++++++++
[Now trigger the function, e.g. sudo modprobe yourFancyKernelModule]
Назад на консоль 2, локально: ++++++++++++++++++++++++++++++++++++++++
Теперь используйте функции GDB, такие как bt, step, next, fini sh ...
Вы также можете использовать linux -ware-команды. Вызовите "apropos lx" в gdb для получения списка команд.