"hello world"カーネルモジュールの例をコンパイルしようとしています。 ubuntu 11.04、kernel 3.2.6、gcc 4.5.2、fedora 16、kernel 3.2.7、gcc 4.6.7。モジュールのコンパイル:asm/linkage.hファイルが見つかりません
コード:でコンパイルさ
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
static int __init hello_init (void)
{
printk("Hello module init\n");
return 0;
}
static void __exit hello_exit (void)
{
printk("Hello module exit\n");
}
module_init(hello_init);
module_exit(hello_exit);
:
gcc -D__KERNEL__ -I /usr/src/linux/include/ -DMODULE -Wall -O2 -c hello.c -o hello.o
エラー:
In file included from /usr/src/linux/include/linux/kernel.h:13:0, from /usr/src/linux/include/linux/cache.h:4, from /usr/src/linux/include/linux/time.h:7, from /usr/src/linux/include/linux/stat.h:60, from /usr/src/linux/include/linux/module.h:10, from hello.c:1: /usr/src/linux/include/linux/linkage.h:5:25: fatal error: asm/linkage.h: file not found
その後、私はは/ usr/src/linuxの/は、という名前のフォルダが存在しない/含まれました'asm'しかし 'asm-generic'; ので、私は「ASM-ジェネリック」にソフトリンク「ASM」を作って、agailコンパイル:
今回のエラーでした:
In file included from /usr/src/linux/include/linux/preempt.h:9:0, from /usr/src/linux/include/linux/spinlock.h:50, from /usr/src/linux/include/linux/seqlock.h:29, from /usr/src/linux/include/linux/time.h:8, from /usr/src/linux/include/linux/stat.h:60, from /usr/src/linux/include/linux/module.h:10, from hello.c:1: /usr/src/linux/include/linux/thread_info.h:53:29: fatal error: asm/thread_info.h: file not found
は、だから私は、私が間違っていた実現が、なぜ? T_T
により削除することができます
によってモジュールをカーネルにこれを追加することができますgentoo、それらのすべてにはフォルダ 'asm'が含まれていません。だから私はそれがエラーではないと思う。 –
私がチェックしたRedhatでは '/ usr/src/kernels /.../ include/asm'は' asm-x86_64'へのリンクです。 – ugoren