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