У вас, похоже, отсутствует понимание того, как работают системы UNIX.
Подумай об этом. Предположим, вы смогли войти в функцию ядра, которая реализует системный вызов, скажем sys_open
. Итак, теперь вы смотрите на исходный код ядра для sys_open
в отладчике. Вопрос в том, работает ли ядро в этот момент или оно остановлено. Поскольку вы захотите сделать что-то вроде next
в отладчике, давайте предположим, что ядро остановлено .
Итак, теперь вы нажимаете клавишу n
, и что происходит?
Обычно ядро реагирует на прерывание, вызванное клавиатурой, выясняет, какая клавиша была нажата, и отправляет эту клавишу нужному процессу (тот, который заблокирован в read(2)
от терминал, управляющий клавиатурой).
Но ваше ядро остановлено , поэтому вам не нужно нажимать клавишу.
Вывод: отладка ядра с помощью отладчика, работающего на той же машине, невозможна.
На самом деле, когда люди отлаживают ядро, они обычно делают это, запустив отладчик на другой машине (это называется удаленной отладкой).
Если вы действительно хотите войти в ядро, самый простой способ сделать это - UML .
После того, как вы поиграете с UML и поймете, как интерфейс пользовательского пространства / ядра работает и взаимодействует, вы можете попробовать kgdb
, хотя настройка обычно немного сложнее. На самом деле вам не нужно иметь отдельную машину для этого, вы можете использовать VMWare, VirtualPC или VirtualBox.