linux kernel怎么编译单独某个模块

本文介绍了如何使用make命令来编译指定的Linux Kernel模块,并提供了几个常用的模块管理命令,如insmod、rmmod等。此外,还特别强调了SUBDIRS参数的正确使用方法。

举个栗子:

cd     kernel

make   SUBDIRS=./samples/kprobes  modules

 

SUBDIRS=./ 后面加你要编译的kernel模块的路径

SUBDIRS 这个关键字一定要大写

本人实际调试的时候,SUBDIRS写出小写的时候,结果是编译所有模块

 

随便记录下模块相关的几个命令:

insmod

rmmod

lsmod

modprobe (能够处理 module 载入的依赖问题)

 

 

Linux 系统中单独编译一个内核模块(`.ko` 文件)常涉及使用内核的构建系统来仅编译特定模块,而不是整个内核。以下是一个用的步骤指南,帮助您完成此任务。 ### 准备工作 确保系统中安装了以下内容: - 完整的内核源码(或至少是当前运行内核的开发包,如 `linux-headers` 或 `kernel-devel`)[^1]。 - `make` `gcc` 等编译工具。 - 内核配置文件(常是 `.config` 文件),它定义了内核的配置选项。 如果使用的是基于发行版的系统(如 Ubuntu 或 CentOS),可以安装与当前运行内核版本匹配的头文件包: ```bash sudo apt install linux-headers-$(uname -r) # Debian/Ubuntu sudo yum install kernel-devel # CentOS/RHEL ``` ### 编译单个内核模块 假设你已经有一个模块的源代码(例如 `my_module.c`),并且你希望仅编译模块为 `.ko` 文件。 #### 方法一:使用 `make` 单独编译模块 创建一个 `Makefile`,内容如下: ```makefile obj-m += my_module.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean ``` 然后运行: ```bash make ``` 这将使用当前运行内核的构建系统来仅编译 `my_module.c`,并生成 `my_module.ko` 模块文件。 #### 方法二:指定模块路径并使用 `make modules_prepare`(适用于内核源码树) 如果你已经拥有完整的内核源码树,并希望编译其中的某个模块(例如 `drivers/net/my_driver.c`),可以这样做: ```bash cd /path/to/kernel/source make modules_prepare make CONFIG_MY_DRIVER=m drivers/net/my_driver.ko ``` 这将仅编译 `my_driver.ko` 模块,并忽略其余模块的构建。 ### 加载测试模块 一旦 `.ko` 文件生成,可以使用 `insmod` 或 `modprobe` 加载模块: ```bash sudo insmod my_module.ko ``` 或使用 `modprobe`(如果模块有依赖项): ```bash sudo modprobe my_module ``` 查看模块是否加载成功: ```bash lsmod | grep my_module ``` ### 清理构建文件 完成测试后,可以使用以下命令清理中间文件: ```bash make clean ``` 这将删除所有中间构建文件,包括 `.o`、`.mod.c`、`Module.symvers` 等[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值