initrd中模块的大小

我目前正在尝试用一个定制的内核在embedded式设备上手动replaceubuntu-core内核。 但是,当我尝试更新initrd我的initrd变得更大。

这是我做的:

  • 解压ubuntu发货的initrd
  • 列出旧的initrd中的所有模块
  • /lib/modules/new_kernel_version的新模块导向器获取相同的模块
  • 将这些模块添加到initrd并删除旧的

如果我这样做,我的initrd变得比原来的更大,所以我检查了各个模块。 我select了btrfs.ko文件系统驱动程序作为例子。 所以通过比较这两个模块,我注意到我刚刚选入initrd的那个模块要大得多,这就造成了大小的差异。

 -rw-r--r-- 1 root root 999K Nov 14 15:06 btrfs.ko 

对于发货的initrd内的btrfs.ko

 -rw-r--r-- 1 root root 7.2M Nov 14 15:08 btrfs.ko 

对于新的btrfs.ko

这两个模块有什么不同? 这可能是由于新内核的一些错误设置造成的? 当生产内核时,我复制/proc/config.gz并使用make oldconfig来更新它,所以两个内核的所有优化都应该是一样的。

或者,在将模块放入initrd之前,还有其他一些模块正在做什么? 也许还有更好的方法来为Ubuntu中的新内核完全构build一个新的initrd。

更新:

我也用一个initrdtesting了mkinitrfs ,它是在ubuntu下使用mkinitrfs命令从头开始创build的,而且它与我手动更新的initrd发现的大小相同。

你的模块有很多符号和debugging信息。 你想要的命令是
strip --strip-unneeded