linux内核配置模块编译安装

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux内核配置编译和加载

Linux内核模块

Linux内核结构非常庞大,包含的组件也非常多,想要把我们需要的部分添加到内核中,有两个方法:直接编译进内核和模块机制

由于直接编译进内核有两个缺点,一是生成的内核过大,二是每次修改内核中功能,就必须重新编译内核,浪费时间。因此我们一般采用模块机制,模块本身不被编译进内核映像,只有在加载之后才会成为内核的一部分,方便了修改调试,节省了编译时间。

配置内核

(1)在drivers目录下创建hello目录存放hello.c源文件

(2)在hello目录下新建Makefile文件和Kconfig文件

Makefile文件内容:

obj-y += hello.o //要将hello.c编译得到的hello.o连接进内核

Kconfig文件内容:

允许编译成模块,因此使用了tristate

(3)在hello目录的上级目录的Kconfig文件中增加关于新源代码对应项目的编译配置选项

修改即driver目录下的Kconfig文件,添加

source "drivers/hello/Kconfig" //使hello目录下的Kconfig起作用

(4)在hello目录的上级目录的Makefile文件中增加对新源代码的编译条目

修改driver目录下的Makefile文件,添加

obj-$(CONFIG_HELLO_FOR_TEST) += hello/ //使能够被编译命令作用到

(5)命令行输入“make menuconfig”,找到driver device,选择select,发现test menu

已经在配置菜单界面显示出来

(6)选择test menu进入具体的配置,可以选择Y/N/M,这里我选择编译为M,即模块化

(7)保存退出后出现

(8)进入kernels目录中使用“ls -a”查看隐藏文件,发现多出.config隐藏文件,查看.config

文件

模块方式动态编译进内核

一:模块编译

(1)编写Makefile文件,对已有的Makefile文件进行修改

KVERS = /usr/src/kernels/2.6.18-8.el5-xen-i686

# Kernel modules

obj-m += hello.o //指定要添加的模块

# Specify flags for the module compilation. //优化选项,调试阶段先注销

#EXTRA_CFLAGS=-g -O0

build: kernel_modules

kernel_modules:

make -C $(KVERS) M=$(CURDIR) modules //使用-C目录下的Makefile对M=后变的目录中的模块(即当前目录中的模块)进行编译

clean:

make -C $(KVERS) M=$(CURDIR) clean

(2) 在当前目录下执行“make”命令,发现多出.ko文件,这就是形成的模块

二:模块加载

(1) 在终端输入:“insmod hello.o”进行加载,再用“lsmod”查看当前系统中使用的模块

(2) 在终端输入:dmesg | tail -4 这是查看内核输出信息的意思。tail -12 显示最后12条

三:模块卸载

日志文件中输出printk的内容!

加载成功

Hello模块已不在当前系统中

相关文档
最新文档