首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

为什么Linux驱动程序模块的C文件末尾要加上`MODULE_LICENSE(“GPL“);`

  • 25-03-05 04:42
  • 3532
  • 9763
blog.csdn.net

MODULE_LICENSE("GPL") 的作用

在 Linux 内核模块中,MODULE_LICENSE 是用于声明模块许可证的宏。它告诉内核该模块使用的许可证类型,从而决定是否允许加载该模块。


语法

MODULE_LICENSE("license_name");
  • 1
  • license_name: 一个字符串,用于指定模块的许可证类型。

MODULE_LICENSE 的具体作用

  1. 与内核 GPL 合规性检查相关:

    • Linux 内核是基于 GPL(GNU General Public License)许可证发布的。
    • 如果模块声明使用的是兼容 GPL 的许可证,模块将被视为“开放源代码”,可以自由使用内核提供的符号和接口。
    • 如果声明的许可证不兼容(或未声明),内核会将该模块视为闭源模块,某些内核的核心符号将无法使用。
  2. 加载时的合法性检查:

    • 当加载模块时,内核会检查 MODULE_LICENSE 声明的许可证。
    • 如果未声明或声明了非 GPL 的许可证,内核会发出警告(通常在 dmesg 中可见),并标记为“Tainted Kernel”(被污染的内核)。
  3. 社区规范和道德约束:

    • Linux 社区鼓励使用 GPL 或兼容许可证开发内核模块。
    • 违反 GPL 可能导致法律和社区问题。

常见的许可证声明

以下是内核模块开发中常见的许可证类型:

  • "GPL": 模块遵循 GPL 协议。
  • "GPL v2": 模块明确遵循 GNU General Public License Version 2。
  • "Dual BSD/GPL": 模块可以在 BSD 和 GPL 协议下分发。
  • "Dual MIT/GPL": 模块可以在 MIT 和 GPL 协议下分发。
  • "Proprietary": 声明为专有闭源模块。

在例子中的作用

MODULE_LICENSE("GPL");
  • 1
  • 声明模块使用的是 GPL 许可证,表明该模块遵循开源协议。
  • 内核会认为该模块是开放源码的,可以使用所有导出的内核符号(包括仅对 GPL 模块开放的符号)。

为什么需要 MODULE_LICENSE?

  1. 确保模块合规性:

    • 内核符号的使用受到 GPL 保护,未声明许可证或声明为非 GPL 的模块无法使用某些重要符号。
  2. 便于社区共享和协作:

    • 开发者可以通过许可证声明明确模块的使用和分发方式,便于他人贡献和改进。
  3. 防止内核污染:

    • 内核通过 MODULE_LICENSE 判断是否加载闭源模块,加载非 GPL 模块时标记为“Tainted”。

示例: 加载闭源模块的警告

如果将许可证声明为非 GPL,例如 "Proprietary",加载模块时可能会看到以下警告:

WARNING: kernel tainted: Proprietary module loaded
  • 1

运行 dmesg 命令查看内核日志可能会输出:

Proprietary module loaded. Tainting the kernel.
  • 1

此时,内核会标记为“污染状态”(Tainted Kernel)。


注意事项

  1. 缺少声明的后果:

    • 如果没有使用 MODULE_LICENSE 声明许可证,内核会默认认为模块为闭源。
    • 无法使用某些仅对 GPL 模块开放的核心符号。
  2. 法律风险:

    • 如果声明为 GPL,但实际并未开源代码,可能违反 GPL 协议,存在法律风险。

总结

MODULE_LICENSE("GPL") 是告诉内核该模块是遵循 GPL 协议的开源模块。它是内核模块开发中的重要组成部分,直接影响模块的加载、符号使用权限以及内核的“污染”状态。开发者应根据模块的实际使用和分发需求正确声明许可证。

昊虹嵌入式技术交流群
QQ群名片
注:本文转载自blog.csdn.net的昊虹AI笔记的文章"https://blog.csdn.net/wenhao_ir/article/details/144902881"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top