debugginglinux-kernelkernelsleeposcilloscope

How to sleep() from kernel init?


I'm debugging some code of the kernel init with an oscilloscope by setting up values on GPIO, what is the best way to sleep() for a given time very early, i.e, in ddr3_init() ?

Thank you


Solution

  • You could use a busy loop that stops after a given time interval. This should sleep for one second (I'm not sure if it works, I put it together by looking at the time.h header):

    #include <linux/time.h>
    
    struct timespec start_ts = current_kernel_time();
    s64 start = timespec_to_ns(&start_ts);
    do {
        struct timespec now_ts = current_kernel_time();
        s64 now = timespec_to_ns(&now_ts);
    } while (now - start < 1000000000ULL);