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后
$ 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

终端信息贴错了,应该是:
$ 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
感谢大神,成功了,但是没有输出,下面是新代码的过程:
$ 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为什么都没有输出那?
   

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的内容拷上来。


   
页: [1] 2
查看完整版本: 本人小白,刚学内核入门,一个小问题,希望大家看看