0

insmod を使用して LKM を RedHat カーネルにロードしようとすると問題が発生しますが、次のエラーが返されます:-

Insmod –f tmdq.o

tmdq.o: 未解決のシンボル スリープ

LKM 内からの sleep() システム コールで問題が発生するのはなぜですか? Red Hat Linux 3.2.2-5、Linux バージョン 2.4.20-8 で sleep() に別の名前が付けられているかどうかを確認したいと考えています。

また、RedHat のソース コードをダウンロードせずにオンラインで参照する方法はありますか?

ありがとう。

4

2 に答える 2

0

まず、sleep() はシステム コールとしてではなく、sys_nanosleep syscall を使用して libc に実装されています。

そのため、カーネルにはスリープがありません。msleep、mdelay、または usleep_range (include/linux/delay.h) を使用するか、wait_event_ 関数 (include/linux/wait.h) のいずれかを使用してください。

于 2012-12-20T07:09:16.800 に答える
0

msleep およびその他の亜種の定義は、カーネル 2.4.20 には含まれていません。カーネルの schedule_timeout() 関数を使用して、自分で実装する必要があります。

さらに、これはカーネルコードを参照できる場所です: lxr.linux.no

于 2012-12-21T07:37:56.723 に答える