Using printk, how can I know where the kernel jumps after schedule() function?
Fabio M. De Francesco
fmdefrancesco at gmail.com
Sat Oct 8 16:43:29 EDT 2022
On Friday, August 26, 2022 12:04:41 PM CEST Chan Kim wrote:
> Hello experts,
>
> I am faced with a problem on my experiment. (arm64)
> When the linux kernel boots and after it jumped to /bin/sh in the initramfs
> (by busybox), it hangs after the program jumps the schedule() function.
> I can see it comes out of schedule() function using printk, but I don't know
> where it had gone(or returned).
> I tried printing the bottom two values in the schedule() function, because
> the x29(=fp) and x30(=lr) is stored at the stack bottom during any function.
> But the lr value is somewhere in then init stack(by examining the
> System.map). So I guessed that lr value, a virtual address is a user virtual
> address.. Is my guess correct or should the lr value point to a point in
> kernel text section?
>
> Actually I don't know exactly how a user program is interrupted by the
> schedule function initiated by the timer interrupt so I would be grateful if
> someone explain it.
> ( I tried reading part of a book or web posts but didn't get what I want
> yet).
>
> Thank you!
> Regards,
>
> Chan Kim
>
I suppose that "ftrace" is your best friend in this case.
YouTube videos may be the easiest introductions. I have not the links to
provide, however you may search them using something like the "ftrace Steven
Rostedt" keywords (Steven is the author and maintainer).
Otherwise read the man pages of the "trace-cmd" set of related userspace
programs built with the purpose to serve as interfaces to the kernel "ftrace".
In case you need more, you'll have to learn how ftrace actually works and how
to write your custom tracers in the kernel. If so, you have no other choice
than learning from the official docs at https://docs.kernel.org/trace/
index.html.
Regards,
Fabio
More information about the Kernelnewbies
mailing list