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

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
Einsxu
帖子: 26
注册时间: 2008-03-18 13:23

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

#1

帖子 Einsxu » 2008-06-21 15:17

#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 个软件未被升级, 然后还是出同样的错?
liuboadsl
帖子: 113
注册时间: 2006-08-17 6:10

#2

帖子 liuboadsl » 2008-06-21 16:22

apt-get search linux-headers 安装相应的头文件
Einsxu
帖子: 26
注册时间: 2008-03-18 13:23

#3

帖子 Einsxu » 2008-06-21 16:52

提示
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
请您明确地选择一个来进行安装。
怎么选择呢?
Einsxu
帖子: 26
注册时间: 2008-03-18 13:23

#4

帖子 Einsxu » 2008-06-21 16:55

输入sudo apt-get install linux-headers-2.6.20-16
提示linux-headers-2.6.20-16 已经是最新的版本了。
共升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件未被升级。
但是编译的时候还是提示没有找到头文件
liuboadsl
帖子: 113
注册时间: 2006-08-17 6:10

#5

帖子 liuboadsl » 2008-06-21 21:12

如果你是穿着超短裙的超级可爱美少女,那应该是多么美妙啊..

uname -r

搜索相应的头文件,并且安装它们
kinwin
帖子: 225
注册时间: 2007-08-28 13:19
来自: USTC

#6

帖子 kinwin » 2008-06-21 21:14

show your Makefile
liuboadsl
帖子: 113
注册时间: 2006-08-17 6:10

#7

帖子 liuboadsl » 2008-06-21 21:22

linux-headers-`uname -r`这行命令, 当初使用debian时也遇到和你同样的问题
Einsxu
帖子: 26
注册时间: 2008-03-18 13:23

#8

帖子 Einsxu » 2008-06-22 2:12

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这四个文件
该怎么办啊?
Einsxu
帖子: 26
注册时间: 2008-03-18 13:23

#9

帖子 Einsxu » 2008-06-22 2:49

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
liuboadsl
帖子: 113
注册时间: 2006-08-17 6:10

#10

帖子 liuboadsl » 2008-06-22 5:25

简单的内核模块没必要makefile
另外,上面的写法适合 2.4 版本的内核 参考linux device drivers


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