编译的ko模块很大、initrd.img太大

编译的ko模块很大、initrd.img太大,第1张

在生产initrd.img的时候,如果发现initrd.img非常大,比如原来的40M,现在的有300M,网上有提到memory hole remap相关,没找说法的出处,反正我在bios是没找到。

ubuntu下生存initrd.img的命令:

update-initramfs -c -k <kernel_ ver>

它是将lib/modules/<kernel_ver>下的ko打包到initrd.img里。配置文件/etc/initramfs-tools/。所以先查看自己编译的ko模块是不是比轿扒原系统的ko模块大很多。

自己编译的ko模块如果比发行版的大很多,比如人家的事10K,你的ko文件是20M。这是由于编译过程中有雪的信息,比如调试的信息、段、附加信息,在运行中并不需要。

使闭核昌用binuitls包的strip命令

strip -S name.ko

然后再比较大小,如果相差不氏李多甚至相差小于1K,那就找到了问题原因。

如果还是不行,继续努力找问题吧。

1、配置中有很多调试选项(绝姿兄不一定带“debug”字样并袭),而且位置也很分散;

2、发行版自带内核往往经过长期、仔细的配置,会比个人十几分钟的配置更全面。

这两个原因对内核及模块的大小有影响,但不大。

编译出的册局内核模块中包含多个运行时用不到的段(编译连接时可能要用,不是错误),发行版中一般会删掉,这很有可能是原因所在。

可以考虑用 [strip -S mod_name.ko] 来处理一下内核模块(注意:这里选项要用大写S,小写s或不写会连符号表一起删掉,导致模块无法加载),看看文件有没有变小(别对内核本身这么干)。

如果以上命令明显减小了文件,可以考虑在编译内核前定义环境变量INSTALL_MOD_STRIP为1(数字),这样make modules_install后的内核模块都是经 strip 处理过的了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12139131.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存