Ответ 1
skink_free_devices+0x32/0xb0
Это означает, что команда-нарушитель составляет 0x32
байт от начала функции skink_free_devices()
, которая в целом равна 0xB0
байтам.
Если вы скомпилируете ядро с включенным -g
, вы можете получить номер строки внутри функций, где элемент управления подпрыгнул с помощью инструмента addr2line
или нашего старого старого gdb
Что-то вроде этого
$ addr2line -e ./vmlinux 0xc01cf0d1
/mnt/linux-2.5.26/include/asm/bitops.h:244
or
$ gdb ./vmlinux
...
(gdb) l *0xc01cf0d1
0xc01cf0d1 is in read_chan (include/asm/bitops.h:244).
(...)
244 return ((1UL << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
(...)
Итак, просто укажите адрес, который вы хотите проверить, на addr2line
или gdb
, и они сообщают вам номер строки в исходном файле, где присутствует функция нарушения
См. эту статью для полной информации
EDIT: vmlinux
- это несжатая версия ядра, используемая для отладки и обычно найденная @ /lib/modules/$(uname -r)/build/vmlinux
при условии, что вы создали свое ядро из источников. vmlinuz
, который вы находите в /boot
, является сжатым ядром и может быть не столь полезным при отладке