[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:29587] Re: #include<linux/sched.h> のエラー
佐野@浜松です。
In <20010819011444.410E.PISOGOO@xxxxxxxxx>,
on "Sun, 19 Aug 2001 01:28:25 +0900',
with "[debian-users:29567] #include<linux/sched.h> のエラー",
Masatoshi Iwasaki <pisogoo@xxxxxxxxx> さん wrote:
> 問題を一言でいうと、#include<linux/sched.h>
> の一行を入れると、sched.hもしくはsched.hの
> インクルードするファイルから大量のエラーが出て
> コンパイルが出来ないという現象です。
> 以下に私の環境でその現象を確認したサンプル
> のソースを載せます。このソースでは、sched.hを
> ただインクルードしてるだけで、sched.hで宣言
> されている変数や関数は使っていませんが、最初に
> この現象に遭遇したときはsched.h内のjffiesを参照
> しようとしたときでした。hello_sched.cをhello.cと
> してコンパイルするとエラーがでます。hello_nosched.c
> をhello.cとした場合は、エラーもちゃんと出ずに
> insmod,rmmodともにできます。
>
> --------------hello_sched.c-----------------
>
> #include <linux/kernel.h>
> #include <linux/module.h>
> #include <linux/sched.h>
>
> #if CONFIG_MODVERSIONS==1
> #define MODVERSIONS
> #include <linux/modversions.h>
> #endif
>
> int init_module()
> {
> printk("Hello, world with sched.h\n");
>
> return 0;
> }
>
> void cleanup_module()
> {
> printk("Short is the life of a kernel module\n");
> }
>
> ---------------------------------------------------
> ---------------------Makefile----------------------------
>
> CC=gcc
> MODCFLAGS := -Wall -DMODULE -D__KERNEL__
>
> hello.o: hello.c /usr/include/linux/version.h
> $(CC) $(MODCFLAGS) -c hello.c
>
> clean:
> rm -rf *.o
> --------------------------------------------------------
上記の hello_sched.c, Makefile を手元の potato なシステムで
試してみましたが、普通に make できましたし、insmod/rmmod も
できましたよ ? もちろん lsmod すると
hello 360 0 (unused)
という表示が確認できました。
そのまま make しようとすると
$ make
make: *** `hello.o' に必要なターゲット `hello.c' を make するルールがありません. 中止。
$ ls
Makefile hello_sched.c
$ cp hello_sched.c hello.c
$ make
gcc -Wall -DMODULE -D__KERNEL__ -c hello.c
hello.c:8: linux/modversions.h: そのようなファイルやディレクトリはありません
make: *** [hello.o] エラー 1
というエラーが出たので、info gcc して
Environment Variables Affecting GCC
の項目で
`C_INCLUDE_PATH'
`CPLUS_INCLUDE_PATH'
`OBJC_INCLUDE_PATH'
These environment variables pertain to particular languages. Each
variable's value is a colon-separated list of directories, much
like `PATH'. When GCC searches for header files, it tries the
directories listed in the variable for the language you are using,
after the directories specified with `-I' but before the standard
header file directories.
を確認してから、普段カーネルを make しているディレクトリを引けるように
$ C_INCLUDE_PATH=/Work/Kernel/package/2.2.19/kernel-source-2.2.19/include/ make
gcc -Wall -DMODULE -D__KERNEL__ -c hello.c
hello.c: In function `init_module':
hello.c:13: warning: implicit declaration of function `printk_Rdd132261'
$ ls -l
合計 16
-rw-rw-r-- 1 sano sano 151 Aug 21 02:22 Makefile
-rw-rw-r-- 1 sano sano 316 Aug 21 02:23 hello.c
-rw-rw-r-- 1 sano sano 1224 Aug 21 02:25 hello.o
-rw-rw-r-- 1 sano sano 316 Aug 21 02:22 hello_sched.c
と環境変数 C_INCLUDE_PATH を定義してから make しただけです。
warning は出ましたが、一応 hello.o が make できています。
> Googleで英語サイトも調べて見ましたが、これといって決め手になる
> ものはありませんでした。どれも最後は「ソースコードを落とし直して
> もう一度コンパイル」という方法が勧められていて、先ほど書いたように
> それも試したのですが、だめでした。/usr/include/linuxや/usr/include/asm
> がちゃんとカーネルソースにリンクしているかも確認してあります。
ふつう、Debian 上では /usr/include/linux や /usr/include/asm などは
libc6-dev パッケージに附属のもので、カーネルの構築に利用される
ソースツリーにはリンクされていないはずだと思うのですが。
なお、利用しているカーネルは 2.2.19 で、kernel-source-2.2.19 に
含まれる tar.bz2 を展開したものです。
--
# (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
<kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)