内核模块加载 及模块Makefile编写


(2010-09-19 13:34:31)

 

 

module-init(hello-init)

内核加载模块

module-exit(hello-exit)

内核卸载模块

static int hello-init(void)

static int hello-exit(void)

编译:

 

2.6 内核下用  Makefile编写;只有一个文件

 ifneq  ($ (kernelrelease),)  //如果不空

 obj-m := hello.o (编写时要变)

 else

 KDIR := /lib/modeles/2.6.18-53.e15/build(要变)//内核源代码路径

 all :

      make -C  $(KDIR) M=$(PWD) modeles     “< -c 后为kdir 目录  >"

 clean:

       rm -f  * .ko  *.o *.mod.o *.mod.c *.symvers

 endif

 

多文件makefile  编写

ifneq  ($ (kernelrelease),)  //如果不空

 obj-m := hello.o (最总目标)

 hello-objs := main.o  add.o

 else

 KDIR := /lib/modeles/2.6.18-53.e15/build(要变)//内核源代码路径

 all :

      make -C  $(KDIR) M=$(PWD) modeles     “< -c 后为kdir 目录  >"

 clean:

       rm -f  * .ko  *.o *.mod.o *.mod.c *.symvers

endif

 

 

模块的安装与卸载

insmod hello.ko  安装

lsmod   查看

rmmod  hello.ko    卸载

modprobe  hello.ko

加载 更加有权利  如同insmod ,也是加载一个木块到内核

它的不同之处在于它会根据文件

/lib/modules/<$version>/modules.dep

先查看依赖的模块 先加载 在安装

比较强大.

 

模块可选信息:

modules 可选信息;

module-license(”GPL“);遵守gpl协议

module-author(”david xie“);作者

modele-description(‘hello world module”);描述

modeles-alias("a simplest module");biemign

modeles-version(“2.36-45”)

 

注意: 模块参数

module-param指定模块参数,模块参数用于在加载模块时传递参数给模块

   modele-param(name,type,perm)

   name 是模块参数的名称,type 是这个参数类型(bool ,int, charp字符串型)

   perm访问权限

 

例如:

 int a = 3;

 char *st;

 module-param(a,int,S-IRUGO);任何用户都对sys/modules/中出现的参数用读权限

 module-param(st,charp,S-IRUGO);允许root用户修改sys/module中的该参数

 

在加载时候用insmod param.ko  age=12等;

改变参数值

 

 

内核符合导出

/proc/kallsyms记录了内核全部符号

 

假如有两个模块(1,2) 实现了一些函数   假如2 依赖于 1  但在 

加载1 在加载2 还是不行 unknown symbol in module

原因很简单你要导出 函数

export-symbol(usb-init)

导出后面模块才可以用

 

常见问题 版本不匹配

解决办法:

1:modprobe强行加载

2:找到匹配模块 重新编译 加载!

 

 

printk 里面有优先级输出 ;

总共有8个

0 最高

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值