linux kernel - script - Sueño de Microsegundo en kernel de Linux
microsegundos abreviatura (0)
udelay()
, mdelay()
, usleep_range()
todos están dando errores de tiempo de ejecución:
symbol lookup error: undefined symbol: __const_udelay
Estoy intentando con ns3-DCE-linux , por lo tanto, puedo ver el error, pero en Kernel de Linux, me da un ataque de kernel.
Desde aquí, udelay()
se define como una macro.
#define udelay(n) /
({ /
if (__builtin_constant_p(n)) { /
if ((n) / 20000 >= 1) /
__bad_udelay(); /
else /
__const_udelay((n) * 0x10c7ul); /
} else { /
__udelay(n); /
} /
})
Desde aquí mdelay()
se define como una macro que usa 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()
también usa udelay()
después de un seguimiento largo.
Puedo ver claramente la definición de __const_udelay()
aquí .
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);
e incluido como extern
aquí .
extern void __const_udelay(unsigned long xloops);
Lo único que funciona es msleep()
.
¿Hay alguna forma de que pueda dar un sueño de unos microsegundos en Kernel? (demora o duerme. Pero dormir es preferible).
¿Cuál es la razón del error anterior? ¿Es este hardware dependiente? ¿Cómo resolver el error?