linux简单的模块编写,LINUX 内核模块编写

#include int test(void)

{

printk("test here.\n");

return 0;

}

//extern_app.h

#ifndef __EXTERN_APP_H

#define __EXTERN_APP_H

extern int test(void);

#endif

//Makefile

#ifneq ($(KERNELRELEASE),)

obj-m := my_module.o

my_module-objs := test_module.o extern_app.o

#else

KERNELDIR ?= /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

default:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

clean:

rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

rm -rf Module.* modules.*

.PHONY: default clean

#endif

make,如果执行成功则生成my_module.ko

//执行insmod 后并调用dmesg,正常情况如下显示:

[root@localhost module_kernel]# insmod my_module.ko who=Coding many=5

[root@localhost module_kernel]# dmesg

test here.

Hello, Coding!

Hello, Coding!

Hello, Coding!

Hello, Coding!

Hello, Coding!

[root@localhost module_kernel]#

//rmmod从内核移除模块

[root@localhost module_kernel]# insmod my_module.ko

insmod: error inserting 'my_module.ko': -1 File exists

[root@localhost module_kernel]# rmmod  my_module

二、出错原因解决方法

在插入模块时常遇到的错误:

[root@panlimin module_study]# insmod my_module.ko

insmod: error inserting 'my_module.ko': -1 Invalid module format

dmesg查看内核报错消息:

[root@panlimin module_study]# dmesg

my_module: no symbol version for module_layout

[root@panlimin module_study]#

一般出这个错在make时会有类似这样的警告:

WARNING: Symbol version dump /root/study/kernel/linux-2.6.34/Module.symvers

is missing; modules will have no dependencies and modversions.

这是应该Linux内核版本依赖出现了问题,这种情况一般出现在自行编译内核后没有链接到正确的内核源码目录树情况,或者

内核目录树顶层的Module.symvers文件丢失。因为模块代码必须针对要链接的内核版本重新编译。

如果没有此警告,但在insmod时还是报此错误,就需要查看Module.symvers文件是否正确,比如这个文件可能是0字节,

Module.symvers在编译内核时会生成,如果发行版本在/lib/module/目录下对应的内核目录树中会有,此时只要确保该文件正确

再重新make,insmod应该就没问题了。

除了insmod可以将模块插入内核外,modprobe也可以,它们的区别在于后者会考虑要插入的模块是否引用了一些当前内核不存在的符号,

如果有这类引用,modprobe会在查找相应模块并尝试插入到内核。所以有时使用insmod插入无效时还可以使用modprobe.

如果由于模块依赖导致符号表出现问题,比如,~/.viminfo被破坏,甚至无法加载网络接口等,可以在/lib/module/对应的内核目录下

执行depmod -a重新生成正确的符号表,执行过程需要点时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值