对于内核模块来说,strip(1)-ing 多少合适?

对于内核模块来说,strip(1)-ing 多少合适?

我定期为 Slackware Linux 创建软件包,该过程的一部分是剥离二进制文件,以便它们占用更少的空间。我发现如果我strip --strip-all(或strip没有选项)内核模块,它们通常无法插入:

致命:插入 cloop 时出错(/lib/modules/2.6.38.7-smp/kernel/fs/cloop/cloop.ko):模块格式无效

建议对内核模块进行什么级别的剥离?如果我使用--strip-debug,我是否会删除会对系统性能和/或错误日志记录产生负面影响的调试符号?

答案1

剥离所有符号会删除模块调用的符号的名称。这是行不通的。

strip --strip-debug *.ko使用(= )剥离调试符号strip -g *.ko是安全的。如果您运行,内核 makefile 会为您完成此操作make INSTALL_MOD_STRIP=1 modules_install

CONFIG_DEBUG_INFO您可以通过将内核配置为未定义来防止调试符号被插入。

也可以看看如何从 Linux 内核模块中删除本地符号而不破坏它?

答案2

我相信最安全的方法是strip --strip-unneeded

相关内容