Debugging a custom kernel
Hello,
I am working on a custom kernel, and I would like to add the necessary support to enable it to boot with qemu. In order to achieve that I am trying to debug it inside qemu by attaching a gdb to it. I still can't figure where the boot process is getting stuck with step-by-step execution, but it seems that the last function called is "delay_loop" from arch/x86/lib/delay.c.
That function contains some assembly code, does someone know what it is supposed to do ?
Beside, do you have any advice on the way I should proceed to get the necessary information to port the kernel ?
Thanks.
Signature · 1 line
Apelete
Quoted 4 lines · Apelete Seketeli
Hello,
I am working on a custom kernel, and I would like to add the necessary support to enable it to boot with qemu.
When you say "debug inside qemu", do you run
gdb qemu
or
gdb vmlinux
Quoted 2 lines
In order to achieve that I am
trying to debug it inside qemu by attaching a gdb to it.
you do this by adding -S -s to the qemu boot parameters. the from the gdb shell, target remote :1234.
Quoted 4 lines
I still can't
figure where the boot process is getting stuck with step-by-step execution, but it seems that the last function called is "delay_loop" fromarch/x86/lib/delay.c.
Have you run the backtrace (bt) command from the gdb shell? That should tell you what function is calling the __delay.
Quoted 2 lines
That function contains some assembly code, does someone know what it is supposed to do ?
Probably wait a specific amount of time. Since a compiler optimizes C you can't write an accurate delay in C. The compiler wont optimize the inline assembly.
Quoted 2 lines
Beside, do you have any advice on the way I should proceed to get the necessary information to port the kernel ?
You should find an existing board and tweak it to get started, or post the backtrace output.
Quoted 2 lines
Thanks.
Have you had any luck with a google search along the lines of "qemu gdb kernel"?
Quoted 9 lines · Christopher Harvey
Quoted 4 lines · Apelete Seketeli
Hello,
I am working on a custom kernel, and I would like to add the necessary support to enable it to boot with qemu.
When you say "debug inside qemu", do you run
gdb qemu
or
gdb vmlinux
"gdb vmlinux" actually. The focus is on the kernel, to know what going on during the boot process (since it doesn't boot in qemu).
Quoted 4 lines
Quoted 2 lines
In order to achieve that I am
trying to debug it inside qemu by attaching a gdb to it.you do this by adding -S -s to the qemu boot parameters. the from the gdb shell, target remote :1234.
"qemu -S -kernel bzImage", then, using the monitor inside qemu I start a gdbserver to which I connect to debug the kernel.
Quoted 6 lines
Quoted 4 lines
I still can't
figure where the boot process is getting stuck with step-by-step execution, but it seems that the last function called is "delay_loop" fromarch/x86/lib/delay.c.Have you run the backtrace (bt) command from the gdb shell? That should tell you what function is calling the
__delay.
I didn't, will try that and see if it helps.
Quoted 5 lines
Quoted 2 lines
That function contains some assembly code, does someone know what it is supposed to do ?
Probably wait a specific amount of time. Since a compiler optimizes C you can't write an accurate delay in C. The compiler wont optimize the inline assembly.
Okay, so I really need to know which function is calling the delay and go down from there.
Quoted 2 lines
Have you had any luck with a google search along the lines of "qemu gdb kernel"?
Running gdb with qemu caused me some headache, but I got it, as said before. Thanks for the tips, I'll try and see if I can get something useful.
Signature · 1 line
Apelete
Quoted 5 lines · Apelete Seketeli
Quoted 4 lines · Christopher Harvey
Quoted 3 lines · Apelete Seketeli
I still can't
figure where the boot process is getting stuck with step-by-step execution, but it seems that the last function called is
Quoted 7 lines
Quoted 5 lines
"
delay_loop"Quoted 1 line
from
arch/x86/lib/delay.c.Have you run the backtrace (bt) command from the gdb shell? That should
tell you what function is calling the__delay.I didn't, will try that and see if it helps.
That command is your bread and butter. If you type "up" into gdb it will take you to the line that called __delay. Keep typing up to see exactly what series of functions were called to get to the __delay.
Quoted 12 lines · Apelete Seketeli
Hello,
I am working on a custom kernel, and I would like to add the necessary support to enable it to boot with qemu. In order to achieve that I am trying to debug it inside qemu by attaching a gdb to it. I still can't figure where the boot process is getting stuck with step-by-step execution, but it seems that the last function called is "
delay_loop" fromarch/x86/lib/delay.c.
That function contains some assembly code, does someone know what it is supposed to do ?
Beside, do you have any advice on the way I should proceed to get the necessary information to port the kernel ?
Does a stock kernel work in your setup?
If so, try using its config, most distributions put it into /boot as config-uname -r or something.
HTH,
Jonathan Neusch?fer