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