请教关于内核模块编写的问题

C、C++和Java语言
回复
kinglong
帖子: 2
注册时间: 2006-05-23 15:22
送出感谢: 0
接收感谢: 0

请教关于内核模块编写的问题

#1

帖子 kinglong » 2006-10-05 15:28

我下了linux-source-2.6.15.tar.bz2包,解压后放在/usr/src/linux-source-2.6.15.
这样是不是就已经完成内核树的构造?
然后试着编写‘helloworld'模块,makefile 用最简单的obj-m:=helloworld.o
make -C /usr/src/linux-source-2.6.15 M='pwd' modules 出现错误:
make: Entering directory `/usr/src/linux-source-2.6.15'
Makefile:490: .config: No such file or directory
scripts/Makefile.build:15: /usr/src/linux-source-2.6.15/pwd/Makefile: No such file or directory
make[1]: *** 没有规则可以创建目标“/usr/src/linux-source-2.6.15/pwd/Makefile”。 停止。
make: *** [_module_pwd] 错误 2
make: Leaving directory `/usr/src/linux-source-2.6.15'
请教高手原因??
头像
nobrain
帖子: 808
注册时间: 2005-08-25 13:58
来自: ustc
送出感谢: 0
接收感谢: 0
联系:

#2

帖子 nobrain » 2006-10-06 21:30

`pwd` not 'pwd'
pwd用'1'左边的键括起来。

一般编译内核模块(2.6),

代码: 全选

sudo apt-get install module-assistant
sudo m-a update
sudo m-a prepare
准备linux-headers

Makefile:

代码: 全选

# if invoked by the Kernel Module Build system
# set obj-m
ifneq ($(KERNELRELEASE),)
        obj-m := your_module.o

# else, invoked from command line directly
else
        KERNELDIR ?= /lib/modules/$(shell uname -r)/build
        PWD := $(shell pwd)

default:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
上次由 nobrain 在 2006-10-07 21:13,总共编辑 1 次。
爱喝真猪奶茶的夜鸣猪
kinglong
帖子: 2
注册时间: 2006-05-23 15:22
送出感谢: 0
接收感谢: 0

还是没能解决

#3

帖子 kinglong » 2006-10-07 14:54

使用了这个makefile:
ifneq ($(KERNELRELEASE),)
obj-m : = hello.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif

出现一下错误:
make -C /lib/modules/2.6.15-27-686/build M=/home/kinglong/modules modules
make: *** /lib/modules/2.6.15-27-686/build: No such file or directory。 停止。
make: *** [default] 错误 2

请问这是什么原因??
头像
nobrain
帖子: 808
注册时间: 2005-08-25 13:58
来自: ustc
送出感谢: 0
接收感谢: 0
联系:

#4

帖子 nobrain » 2006-10-07 21:15

KERNELDIR要指定正确根据自己的情况指定。
这个Makefile是按照一般装linux-headers的目录来的。
用m-a prepare来装linux-headers就没问题了。
爱喝真猪奶茶的夜鸣猪
回复

回到 “C/C++/Java”