Dmi*_*ank 6 linux compiling linux-kernel
我正在使用 Linux Mint 13 MATE 32 位,我正在尝试构建内核(主要是为了体验和乐趣)。
现在,我喜欢使用与预编译内核相同的配置来构建它,所以首先我从kernel.ubuntu.com安装了预编译内核3.16.0-031600rc6,并成功引导到它。
然后我从kernel.org下载了 3.16.rc6 内核,解压它,将其配置为使用来自现有预编译内核的配置:
$ make oldconfig
Run Code Online (Sandbox Code Playgroud)
它没有问我任何问题,因此,预编译的内核包含所有必要的信息。然后我构建了它(大约花了 6 个小时):
$ make
Run Code Online (Sandbox Code Playgroud)
然后安装:
$ sudo make modules_install install
Run Code Online (Sandbox Code Playgroud)
然后我启动到我手动编译的内核,它可以工作,但启动过程有点慢。但是后来我发现所有的二进制文件(/boot/initrd.img-3.16.0-rc6
以及其中的所有*.ko
模块/lib/modules/3.16.0-rc6/kernel
都比预编译版本大 10 倍左右!说,initrd.img-3.16.0-rc6
是160 658 665
字节,但预编译initrd.img-3.16.0-031600rc6-generic
是16 819 611
字节。每个*.ko
模块都同样大。
为什么是这样?我没有为构建指定任何特殊选项(我输入的命令与我上面提到的完全相同)。如何“正确”构建它?
不管怎么说file
,它毕竟是调试符号。 LKML 上的一个线程让我尝试:
make INSTALL_MOD_STRIP=1 modules_install
Run Code Online (Sandbox Code Playgroud)
瞧,从/lib/modules/x.x.x
目录中进行比较;前:
> ls -hs kernel/crypto/anubis.ko
112K kernel/crypto/anubis.ko
Run Code Online (Sandbox Code Playgroud)
之后:
> ls -hs kernel/crypto/anubis.ko
16K kernel/crypto/anubis.ko
Run Code Online (Sandbox Code Playgroud)
此外,报告的目录总大小(使用相同的.config
)du -h
从 185 MB 增加到 13 MB。
请记住,除了使用磁盘空间之外,这并不像看起来那么重要。调试符号不会在正常运行时加载,因此无论.ko
文件大小如何,内存中每个模块的实际大小可能都相同。我认为它会产生的唯一显着差异在于initramfs
文件的大小,而它会产生的唯一区别在于解压缩 fs 所需的时间。即,如果您使用未压缩的initramfs,则无关紧要。
strip --strip-all
也可以工作,并file
以stripped
任何一种方式正确报告它们。为什么它说not stripped
的是发行版仍然是个谜。
归档时间: |
|
查看次数: |
2887 次 |
最近记录: |