本人小白,刚学内核入门,一个小问题,希望大家看看
很简单就是仿照网上的写个hollow的模块aaa.c
#define MODULE
#include <linux/module.h>
int init_module(void)
{
printk("<1>aaaaaaa!\n");
return 0;
}
void cleanup_module(void)
{
printk("<1>88888888\n");
}
Makefile:
ifneq ($(KERNELRELEASE),)
obj-m:=aaa.o
else
KERNELDIR:=/lib/modules/$(shell uname -r)/build
PWD:=$(shell pwd)
default:;$(MAKE) -C $(KERNELDIR)M=$(PWD) modules
clean:;rm -rf *.o *.mod.c *.mod.o *.ko
endif
make后
$ insmod aaa.o
insmod: ERROR: could not load module aaa.o: No such file or directory
不知道那里错了,
怎么内核模块的编写,不如在ide里写c方便,至少ide编译的时候就能告诉我那里写错了,而insmod给出的信息好是生硬 终端信息贴错了,应该是:
$ insmod aaa.o
insmod: ERROR: could not insert module aaa.o: Operation not permitted
用root用户登录,insmod aaa.ko 回复 3# beyondfly
感谢大神,成功了,但是没有输出,下面是新代码的过程:
$ su -
密码:
上一次登录:六 8月 16 16:13:07 CST 2014pts/0 上
# cd /home/oracle/my_kernel_iptables/
# cat aaa.c
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
static inthello_init(void)
{
printk("<1>aaaaa!\n");
return 0;
}
static voidhello_exit(void)
{
printk("<1>hello\n");
}
module_init(hello_init);
module_exit(hello_exit);
# cat Makefile
ifneq ($(KERNELRELEASE),)
obj-m:=aaa.o
else
KERNELDIR:=/lib/modules/$(shell uname -r)/build
PWD:=$(shell pwd)
default:;$(MAKE) -C $(KERNELDIR)M=$(PWD) modules
clean:;rm -rf *.o *.mod.c *.mod.o *.ko
endif
# make
make -C /lib/modules/3.15.8-200.fc20.x86_64/buildM=/home/oracle/my_kernel_iptables modules
make: 进入目录“/usr/src/kernels/3.15.8-200.fc20.x86_64”
Building modules, stage 2.
MODPOST 1 modules
make: 离开目录“/usr/src/kernels/3.15.8-200.fc20.x86_64”
# insmod aaa.ko
# lsmod |grep aaa
aaa 124960
# rmmod aaa
#
但是insmod rmmod为什么都没有输出那?
看你的 dmesg 里面,应该有输出 回复 4# wantaugust
看看/var/log/message 或是dmesg,应该是有输出的 回复 5# openspace
没有 回复 6# beyondfly
messages和dmesg都没有,不知道怎么才能把hellow输出到终端 printk 前面可以用 KERN_INFO 之类的来修饰要打印的字符串
可以看看 ldd3 ,里面有章节介绍 printk 和 console 字符串的打印级别 回复 8# wantaugust
你把dmesg的内容拷上来。
页:
[1]
2