Estou tentando depurar remotamente o kernel do Linux e estou tendo problemas.
Minha configuração:
Conectei as máquinas com porta serial no lado do Linux e USB no lado da máquina de desenvolvimento. Na máquina alvo: Eu carreguei meu módulo X com insmod,
>cat /sys/module/X/sections/.text
0xffffffffc046e000
>cat /sys/module/X/sections/.bss
0xffffffffc04708c0
>cat /sys/module/X/sections/.data
0xffffffffc0470000
Eu li que devo iniciar o kernel com "alguns parâmetros", mas não entendo como fazer isso no Ubuntu, então fiz isso:
>echo "ttyS0,115200 > /sys/module/kgdboc/parameters/kgdboc
Também tentei isso:
echo ttyS0 > /sys/module/kgdboc/parameters/kgdboc
e depois
>echo g > /proc/sysrq-trigger
Neste ponto, a máquina Linux congelou, o que é bom. (esperando pelo gdb) Na máquina Windows eu abri o cygwin, Eu coloquei os arquivos vmlinux e X.o no diretório raiz, assim como o código fonte no lugar certo. Então eu corri
gdb ./vmlinux - b 115200
(gdb) add-symbol-file byt_adsp21479.o 0xffffffffc046e000 -s .bss 0xffffffffc04708c0 -s .data 0xffffffffc0470000
(gdb) set architecture i386:x86-64:intel
Depois eu configurei alguns pontos de interrupção no meu módulo do kernel e executei
(gdb) target remote /dev/ttyS7 which is COM8
que funcionou e depois de digitar
(gdb) continue
A máquina linux descongelada, No entanto, quando eu executei uma operação em minha máquina Linux que deve acionar um ponto de interrupção, recebi esta mensagem na máquina de desenvolvimento:
[New Thread 3264]
Ignoring packet error, continuing...
Remote 'g' packet reply is too long: 0840000000000000000e00080847c0ffffffff000100c0000000000300000000000000bc3b63360088ffff0000000000000000a03b63360088ffff983b63360088ffff000063360088ffff2f944e2fbd3b000020c00a360088ffff000000000000000000000000000000000300000000000000000000000000000000ccd7ceff7f0000ede146c0ffffffff4602000010000000180000000000000000000000
O mais estranho é que, uma vez, consegui entrar em duas funções, mas recebi a mesma mensagem de erro. Quais podem ser os problemas?
Apenas FYI eu já passei por abandonar a depuração através da porta serial, e tentando através de ethernet, Então eu fui aqui link E baixei e construí o kgboe, mas quando tentei rodar o insmod kgdboe.ko eu recebi um erro:
insmod: Error: could not insert module kgdboe.ko : Unknown symbol module
e quando eu corro o dmesg Vejo
kgdboe: Unknown symbol set_memory_rw (err 0)
Com a configuração que tenho, alguém pode me ajudar a encontrar uma maneira de depurar meu módulo do kernel, por favor. Obrigada!