我目前正在尝试手动用自定义内核替换嵌入式设备上 ubuntu-core 中的内核。但是当我尝试更新 initrd 时,我的 initrd 变得大得多。
这是我所做的:
- 提取 ubuntu 附带的 initrd
- 列出旧 initrd 中的所有模块
- 从新模块主管处获取相同的模块
/lib/modules/new_kernel_version
- 将这些模块添加到 initrd 并删除旧模块
如果我这样做,我的 initrd 会变得比原来的大很多,所以我检查了各个模块。我选择了btrfs.ko
文件系统驱动程序作为示例。因此,通过比较这两个模块,我注意到我刚刚选入 initrd 的那个模块要大得多,这导致了大小差异。
-rw-r--r-- 1 root root 999K Nov 14 15:06 btrfs.ko
对于btrfs.ko
已发货的 initrd。
-rw-r--r-- 1 root root 7.2M Nov 14 15:08 btrfs.ko
对于新的btrfs.ko
。
这两个模块之间有什么不同?这可能是由于新内核的一些错误设置造成的吗?在生成内核时,我复制/proc/config.gz
并用于make oldconfig
更新它,因此两个内核的所有优化都应该相同。
或者在将模块放入 initrd 之前是否还做了其他事情?也许有更好的方法可以在 ubuntu 中为新内核构建新的 initrd。
更新:
我刚刚还使用 ubuntu 中的命令从头创建的 initrd 进行了测试mkinitrfs
,它与我手动更新的 initrd 具有相同的大小差异。
答案1
您的模块有很多符号和调试信息。您需要的命令是
strip --strip-unneeded
。