linux-kernel - msleep - usleep_range



Microsecond Sleep в ядре Linux (0)

udelay() , mdelay() , usleep_range() дают ошибки времени выполнения:

symbol lookup error: undefined symbol: __const_udelay

Я пытаюсь использовать ns3-DCE-linux , поэтому я могу видеть ошибку, но в Linux-ядре я получаю панику ядра.

Отсюда udelay() определяется как макрос.

#define udelay(n)                                                \
 ({                                                              \
         if (__builtin_constant_p(n)) {                          \
                 if ((n) / 20000 >= 1)                           \
                          __bad_udelay();                        \
                 else                                            \
                         __const_udelay((n) * 0x10c7ul);         \
         } else {                                                \
                 __udelay(n);                                    \
         }                                                       \
 })

Отсюда mdelay() определяется как макрос, который использует udelay() .

#ifndef mdelay
#define mdelay(n) (\
        (__builtin_constant_p(n) && (n)<=MAX_UDELAY_MS) ? udelay((n)*1000) : \
        ({unsigned long __ms=(n); while (__ms--) udelay(1000);}))
#endif

usleep_range() также использует udelay() после длительного отслеживания.

Здесь я ясно вижу определение __const_udelay() .

inline void __const_udelay(unsigned long xloops)
 {
         int d0;

         xloops *= 4;
         asm("mull %%edx"
                 :"=d" (xloops), "=&a" (d0)
                 :"1" (xloops), ""
                 (this_cpu_read(cpu_info.loops_per_jiffy) * (HZ/4)));

         __delay(++xloops);
 }
 EXPORT_SYMBOL(__const_udelay);

и включен как extern здесь .

extern void __const_udelay(unsigned long xloops);

Единственное, что работает, - msleep() .

В любом случае, я могу дать несколько микросекундного сна в ядре? (задержка или сон, но сон предпочтительнее).

В чем причина ошибки выше? Связано ли это с аппаратным обеспечением? Как решить ошибку?





sleep