理解Makefile中PWD=$(shell pwd):Linux驱动模块Makefile示例与内核源码树
需积分: 14 132 浏览量
更新于2024-09-17
1
收藏 278KB DOCX 举报
在IT领域,特别是驱动模块的Makefile编写中,理解pwd命令和Makefile中使用shell函数的重要性至关重要。`pwd`(Print Working Directory)是一个Linux命令,用于显示当前工作目录的绝对路径。在Makefile中,`PWD=$(shell pwd)`这样的语句被用来动态获取并设置变量`PWD`,确保在执行过程中得到正确的当前目录。这里的关键在于:
1. `$(pwd)`是一个变量引用,表示调用系统的pwd命令并获取其输出。然而,在Makefile中直接使用`$(pwd)`可能不会自动执行该命令,因为它不是预定义的Makefile命令。通过添加`shell`关键字,Makefile指示shell去执行该命令并将其结果赋值给变量。
2. Makefile中的shell函数与反引号`"`功能类似,允许在函数内部执行外部命令。例如,`contents:=$(shell cat foo)`或`files:=$(shell echo *.c)`,这些语句会创建一个新的Shell进程来执行指定的命令,然后将输出作为函数的结果。这在生成变量时非常有用,但需要注意性能问题,因为频繁的shell函数调用可能导致性能下降。
3. 当涉及到Linux设备驱动程序的构建时,针对2.6.x内核,特别是较新的版本,构建模块不再仅仅依赖于内核头文件。由于模块需要与内核源代码中的目标文件进行链接,这就意味着开发者需要在本地环境中配置和构建完整的内核源代码树。内核源代码树(通常称为`kernel source tree`)包含了所有必要的源代码文件,包括内核模块开发所需的组件。
4. 在实际操作中,编译驱动模块时,如在Fedora 14中,Makefile可能会引导你进入特定的内核源码目录,如`/usr/src/kernels/2.6.35.12-88.fc14.i686.PAE`,这是因为编译器需要找到内核源代码才能完成模块的编译和链接过程。
掌握Makefile中使用shell函数获取环境变量如`PWD`,理解shell函数的工作原理以及如何与内核源代码树配合,对于编写驱动模块的Makefile来说是必不可少的技能。同时,理解不同内核版本对驱动模块构建的要求变化也十分重要,确保开发者能正确配置并构建出符合规范的模块。
2021-01-09 上传
2013-11-24 上传
2011-05-26 上传
2009-02-06 上传
2023-05-27 上传
2021-11-08 上传
2009-10-06 上传
2013-11-24 上传
god_yca
- 粉丝: 0
- 资源: 17
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍