Linux内核模块开发:Makefile详解与模块管理
需积分: 3 63 浏览量
更新于2024-08-25
收藏 347KB PPT 举报
"内核模块的Makefile-内核模块"
在操作系统课程设计中,专题二是关于内核模块,由褚华主讲。内核模块是Linux系统中一个重要的概念,它允许用户在运行时动态地加载或卸载内核功能,解决了单体内核和微内核各自的问题。Linux内核采用的是单体结构,但通过引入可加载内核模块(LKM)机制,实现了类似微内核的灵活性。
1. 内核模块基础:
内核模块通常以`.o`对象文件的形式存在,未进行最终链接,使其能够在内核空间中运行并与内核共享符号。`hello.o`就是一个简单的内核模块示例。Makefile用于编译和管理这些模块,确保它们能正确地与内核交互。
2. Makefile详解:
- `obj-m := hello.o`:定义模块源文件,这里的`hello.o`表示模块目标文件。
- `KERNELDIR := /lib/modules/$(shell uname –r)/build`:获取当前运行内核版本的构建目录,用于编译模块。
- `PWD := $(shell pwd)`:获取当前工作目录,用于指定模块源码所在位置。
- `modules`、`modules_install`、`clean`是Makefile中的目标,分别对应编译模块、安装模块和清理编译过程中的临时文件。
- `$(MAKE) -C $(KERNELDIR) M=$(PWD) modules`:这条命令告诉Make使用内核的构建系统在当前目录下编译模块。
- `$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install`:安装编译好的模块到系统目录。
- `clean`部分的命令用于删除编译过程产生的中间文件和目标文件。
3. 单体内核与微内核对比:
- 单体内核(Macrokernel):所有组件在同一地址空间运行,高效但更新困难,可能导致系统不稳定。
- 微内核(Microkernel):仅包含基本功能,其余以独立进程形式存在,提供模块化和动态加载,但可能牺牲性能。
4. Linux内核模块的优势:
- 动态扩展:在运行时添加或移除功能,无需重启系统。
- 模块化设计:模块开发者只需关注自己负责的功能,简化维护。
- 资源管理:根据需要启用或禁用模块,节省资源。
5. 解决单体内核缺陷:
Linux通过LKM机制,允许在保持内核稳定性的前提下,实现类似微内核的灵活性,可以动态加载或卸载驱动程序和其他功能模块,从而克服了单体内核的局限性。
总结,内核模块是Linux内核灵活性和可扩展性的重要体现,通过编写和管理Makefile,可以方便地构建、安装和管理这些模块,以适应不断变化的系统需求。
2011-07-23 上传
2022-08-04 上传
2020-07-22 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2022-09-24 上传
2010-11-08 上传
2022-08-08 上传
涟雪沧
- 粉丝: 22
- 资源: 2万+
最新资源
- coderdojo_parade
- MyIRC Admin Bot-开源
- Local-Binary-Patterns.rar_图形图像处理_matlab_
- saitou368.github.io
- matrixTests:R包,用于在矩阵或数据框的行列上计算多个假设检验
- man子手
- python_koans:Python Koans-通过TDD学习Python
- yelpthecamps:用户可以创建和查看露营地的CRUD应用程序
- state10.zip_VHDL/FPGA/Verilog_Others_
- Travelogue-App:最终项目-使用HTML,CSS,BootStrap,JavaScript和Node.js
- react-pdf:using使用React创建PDF文件
- employee-springboot:样例springboot应用程序
- 大脑:大脑的开源生产力助推器
- jms-amqp-demo
- hospital-management-mobile-app:React Native移动应用程序作为JEE项目“医院管理” :man_health_worker_light_skin_tone:的客户端。
- tracking.zip_matlab例程_matlab_