Chinaunix
标题:
本人小白,刚学内核入门,一个小问题,希望大家看看
[打印本页]
作者:
wantaugust
时间:
2014-08-16 11:52
标题:
本人小白,刚学内核入门,一个小问题,希望大家看看
很简单就是仿照网上的写个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后
[oracle@localhost ~]$ insmod aaa.o
insmod: ERROR: could not load module aaa.o: No such file or directory
不知道那里错了,
怎么内核模块的编写,不如在ide里写c方便,至少ide编译的时候就能告诉我那里写错了,而insmod给出的信息好是生硬
作者:
wantaugust
时间:
2014-08-16 15:39
终端信息贴错了,应该是:
[oracle@localhost my_kernel_iptables]$ insmod aaa.o
insmod: ERROR: could not insert module aaa.o: Operation not permitted
作者:
beyondfly
时间:
2014-08-16 15:48
用root用户登录,insmod aaa.ko
作者:
wantaugust
时间:
2014-08-16 16:21
回复
3#
beyondfly
感谢大神,成功了,但是没有输出,下面是新代码的过程:
[oracle@localhost ~]$ su -
密码:
上一次登录:六 8月 16 16:13:07 CST 2014pts/0 上
[root@localhost ~]# cd /home/oracle/my_kernel_iptables/
[root@localhost my_kernel_iptables]# cat aaa.c
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
static int hello_init(void)
{
printk("<1>aaaaa!\n");
return 0;
}
static void hello_exit(void)
{
printk("<1>hello\n");
}
module_init(hello_init);
module_exit(hello_exit);
[root@localhost my_kernel_iptables]# 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
[root@localhost my_kernel_iptables]# make
make -C /lib/modules/3.15.8-200.fc20.x86_64/build M=/home/oracle/my_kernel_iptables modules
make[1]: 进入目录“/usr/src/kernels/3.15.8-200.fc20.x86_64”
Building modules, stage 2.
MODPOST 1 modules
make[1]: 离开目录“/usr/src/kernels/3.15.8-200.fc20.x86_64”
[root@localhost my_kernel_iptables]# insmod aaa.ko
[root@localhost my_kernel_iptables]# lsmod |grep aaa
aaa 12496 0
[root@localhost my_kernel_iptables]# rmmod aaa
[root@localhost my_kernel_iptables]#
但是insmod rmmod为什么都没有输出那?
作者:
openspace
时间:
2014-08-16 17:24
看你的 dmesg 里面,应该有输出
作者:
beyondfly
时间:
2014-08-16 17:28
回复
4#
wantaugust
看看/var/log/message 或是dmesg,应该是有输出的
作者:
wantaugust
时间:
2014-08-16 18:01
回复
5#
openspace
没有
作者:
wantaugust
时间:
2014-08-16 18:02
回复
6#
beyondfly
messages和dmesg都没有,不知道怎么才能把hellow输出到终端
作者:
openspace
时间:
2014-08-16 18:58
printk 前面可以用 KERN_INFO 之类的来修饰要打印的字符串
可以看看 ldd3 ,里面有章节介绍 printk 和 console 字符串的打印级别
作者:
Tinnal
时间:
2014-08-16 21:09
回复
8#
wantaugust
你把dmesg的内容拷上来。
作者:
wantaugust
时间:
2014-08-17 08:25
回复
9#
openspace
加了KERN_INFO,message看见了,谢谢
作者:
wantaugust
时间:
2014-08-17 08:26
回复
10#
Tinnal
加了KERN_INFO就好了,谢谢
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2