SeedLabs防火墙实验:实现简单内核模块时make编译生成hello.ko失败
编译报错原因
报错日志中明确给出错误原因:ERROR: modpost: missing MODULE_LICENSE() in /home/seed/Downloads/Labsetup/Files/kernel_module/hello.o
Linux 2.4及以上版本的内核强制要求所有内核模块必须声明许可证,否则会在编译的modpost阶段直接终止流程,不会生成最终的.ko内核模块文件,你遇到的就是因为漏加这个必填宏导致的编译失败。
修复步骤
- 打开内核模块源代码文件
hello.c,在所有代码的末尾(module_exit宏定义之后的位置)添加如下代码:
MODULE_LICENSE("GPL");
这行是内核编译的必填项,SeedLabs官方示例代码可能没有标注这个强制要求,手动补上即可。
- 保存文件后,先执行
make clean命令清理之前编译生成的临时文件,避免旧缓存影响后续编译 - 重新执行
make命令,即可正常生成hello.ko内核模块文件
可选补充
你还可以根据需要添加其他非必填的内核模块描述宏:
MODULE_AUTHOR("作者名称")标注模块作者MODULE_DESCRIPTION("模块功能描述")说明模块的作用MODULE_VERSION("1.0")标注模块版本号
内容的提问来源于stack exchange,提问作者noob123
相关产品推荐
相关产品推荐

