钢制展柜厂家
免费服务热线

Free service

hotline

010-00000000
钢制展柜厂家
热门搜索:
行业资讯
当前位置:首页 > 行业资讯

Linux操作系统内核模块编译和加载

发布时间:2021-01-20 19:24:48 阅读: 来源:钢制展柜厂家

编译模块

如下书写你的 makefile:

# If KERNELRELEASE is defined, we've been invoked from the

# kernel build system and can use its language.

ifneq ($(KERNELRELEASE),)

obj-m := hello.o

# Otherwise we were called directly from the command

# line; invoke the kernel build system.

else

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

PWD := $(shell pwd)

default:

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

endif

我们看到了扩展的 GNU make 语法在起作用。 这个 makefile 在一次典型的建立中要被读 2 次。 当从命令行中调用这个 makefile , 它注意到 KERNELRELEASE 变量没有设置。 它利用这样一个事实来定位内核源码目录, 即已安装模块目录中的符号连接指回内核建立树。 如果你实际上没有运行你在为其而建立的内核, 你可以在命令行提供一个 KERNELDIR= 选项, 设置 KERNELDIR 环境变量, 或者重写 makefile 中设置 KERNELDIR 的那一行。 一旦发现内核源码树, makefile 调用 default: 目标, 来运行第 2 个 make 命令( 在 makefile 里参数化成 $(MAKE))象前面描述过的一样来调用内核建立系统。 在第 2 次读, makefile 设置 obj-m, 并且内核的 makefile 文件完成实际的建立模块工作。

这种建立模块的机制你可能感觉笨拙模糊。 一旦你习惯了它, 但是, 你很可能会欣赏这种已经编排进内核建立系统的能力。 注意, 上面的不是一个完整的 makefile; 一个真正的 makefile 包含通常的目标类型来清除不要的文件, 安装模块等等。 一个完整的例子可以参考例子代码目录的 makefile.

加载和卸载模块

加载到内核: insmod

从内核去除模块:rmmod

模块的列表:lsmod

版本依赖

内核不只是认为一个给定模块是针对一个正确的内核版本建立的。 建立过程的其中一步是对一个当前内核树中的文件(称为 vermagic.o)连接你的模块; 这个东东含有相当多的有关要为其建立模块的内核的信息, 包括目标内核版本, 编译器版本, 以及许多重要配置变量的设置。 当尝试加载一个模块, 这些信息被检查与运行内核的兼容性。 如果不匹配, 模块不会加载; 代之的是你见到如下内容:

# insmod Error inserting './': -1 Invalid module format

看一下系统日志文件(/var/log/message 或者任何你的系统被配置来用的)将发现导致模块无法加载特定的问题。

6合宝典

一统天下雪鹰归来破解版

火线精英外卦无限钻石点卷版