分页: 1 / 1

[求救]一个最简单的内核模块

发表于 : 2008-06-21 15:17
Einsxu
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_INFO " Hello World enter\n");
return 0;
}

static void hello_exit(void)
{
printk(KERN_INFO " Hello World exit\n ");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_AUTHOR("Song Baohua");
MODULE_DESCRIPTION("A simple Hello World Module");
MODULE_ALIAS("a simplest module");


编译的时候提示
hello.c:7:24: 错误: linux/init.h:No such file or directory
hello.c:8:26: 错误: linux/module.h:No such file or directory

怎么办啊?已经用了sudo apt-get install linux-headers-`uname -r` 之后显示共升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件未被升级, 然后还是出同样的错?

发表于 : 2008-06-21 16:22
liuboadsl
apt-get search linux-headers 安装相应的头文件

发表于 : 2008-06-21 16:52
Einsxu
提示
E: 无效的操作 search
如果把search改成install
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
读取状态信息... 完成
软件包 linux-headers 是一个由下面的软件包提供的虚拟软件包:
linux-headers-2.6.20-16-server-bigiron 2.6.20-16.35
linux-headers-2.6.20-16-server 2.6.20-16.35
linux-headers-2.6.20-16-lowlatency 2.6.20-16.35
linux-headers-2.6.20-16-generic 2.6.20-16.35
linux-headers-2.6.20-16-386 2.6.20-16.35
linux-headers-2.6.20-16 2.6.20-16.35
linux-headers-2.6.20-15-server-bigiron 2.6.20-15.27
linux-headers-2.6.20-15-server 2.6.20-15.27
linux-headers-2.6.20-15-lowlatency 2.6.20-15.27
linux-headers-2.6.20-15-generic 2.6.20-15.27
linux-headers-2.6.20-15-386 2.6.20-15.27
linux-headers-2.6.20-15 2.6.20-15.27
请您明确地选择一个来进行安装。
怎么选择呢?

发表于 : 2008-06-21 16:55
Einsxu
输入sudo apt-get install linux-headers-2.6.20-16
提示linux-headers-2.6.20-16 已经是最新的版本了。
共升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件未被升级。
但是编译的时候还是提示没有找到头文件

发表于 : 2008-06-21 21:12
liuboadsl
如果你是穿着超短裙的超级可爱美少女,那应该是多么美妙啊..

uname -r

搜索相应的头文件,并且安装它们

发表于 : 2008-06-21 21:14
kinwin
show your Makefile

发表于 : 2008-06-21 21:22
liuboadsl
linux-headers-`uname -r`这行命令, 当初使用debian时也遇到和你同样的问题

发表于 : 2008-06-22 2:12
Einsxu
liuboadsl 写了:如果你是穿着超短裙的超级可爱美少女,那应该是多么美妙啊..

uname -r

搜索相应的头文件,并且安装它们
输入uname -r 后显示
2.6.20-16-generic

再输入sudo apt-get install linux-headers-2.6.20-16-generic
显示
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
读取状态信息... 完成
linux-headers-2.6.20-16-generic 已经是最新的版本了。
共升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件未被升级。
而且在/usr/src/下没有2.6.20-16-generic这个,只有linux-headers-2.6.20-15,linux-headers-2.6.20-15-generic,linux-headers-2.6.20-16,linux-headers-2.6.20-16-generic这四个文件
该怎么办啊?

发表于 : 2008-06-22 2:49
Einsxu
kinwin 写了:show your Makefile
PWD = $(shell pwd)
KERNEL_SRC = /usr/src/linux-headers-2.6.20-15
obj-m := test.o
module-objs := test.o

all:
$(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules

clean:
rm *.ko
rm *.o

这样的

make后提示/bin/sh: scripts/mod/modpost: not found
make[2]: *** [__modpost] 错误 127
make[1]: *** [modules] 错误 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.20-15'
make: *** [all] 错误 2

发表于 : 2008-06-22 5:25
liuboadsl
简单的内核模块没必要makefile
另外,上面的写法适合 2.4 版本的内核 参考linux device drivers


如果还是不行, 具体操作可以参考下两篇文章, 希望能对你有所帮助 :)
http://blog.csdn.net/pottichu/archive/2 ... 92245.aspx
http://blog.chinaunix.net/u2/66806/showart_571450.html