鸟哥 Linux 私房菜刚出版的时候,好像人人会手动编译内核。我虽然用 Arch Linux 好多年了,但一直从来没有试过手动编译内核并替换掉原来的。

今天由于需要用 SystemTap/FlameGraph 做 profile, 得用上定制的内核,终于要到手动编译内核的时候了;此外我记得有些定制的内核还能更节电,节约硬碟空间什么的。


有次搞个测试(比较久了,记得大约跟iptable有关),当时的通用几个linux发行商的版本还没有用到3.0.0以上版本的内核,但这测试需要3.0.0以上版本的内核,于是就从http://kernel.org下载了一个达到要求的内核版本(没敢使用最新的),编译并引导,居然成功了,进入登录提示符时有个提示,但不严重,系通也正常运行。


1. 需要用到新特性的时候。比如你是 Ryzen 用户,但农企 Ryzen 处理器不支持你的 4.8 内核,而发行版官方并没有提供更新版本的内核安装包,那么你需要自己编译内核。

2. 嫌原来内核太臃肿的。发行商编译内核时为了保证兼容性,往往会在 config 时加入不少东西,这些东西你可能不需要,那么就可以通过重新编译内核来去掉这些多余的玩意。

3. 自己 DIY GNU/Linux,这个不用多说,比如 LFS、Gentoo 。

题外话:题主既然是 arch 用户,那么个人认为就没必要编译内核了—— 反正 pacman -Syu 就能尝到新东西 —— 而且 arch 内核也没那么臃肿。


就问题回答问题的话,基本很少情况下需要手动编译内核了,因为内核大半驱动代码是可以以模块的方式载入和卸载的,即使不是驱动的代码也不一定需要重新编译内核比如可以使用 Oracle Ksplice 打热补丁,可以看他相关的论文,实验中很长一段时间内的内核补丁80%都可以打上,所以内核基本上就不需要重启就很长时间都能更新了....

基本上就是题主的这种情况,需要改预编译参数换一些feature.

PS: 整个业界都在想办法不去编译内核来换内核,手动编译内核就看起来像钻木取火了.

买了张二手阵列卡, 新版系统装不上旧驱动, 发行版内核默认没有这个阵列卡的驱动

自己编译内核把驱动选上就能识别了


一般用户可能不需要,但是像我们这些做 Linux 内核开发的,编译内核是家常便饭。此外,像 BAT 这样的大厂通常也会根据自己的需求定制大量的私有 patch,也需要自己编译内核。
1.想用一些内核的新特性的时候2.通过编译去掉一些不需要的特性,使内核更精简,为自己所用3.有些时候一些不必要的特性也会导致安全问题,所以要去掉
工作需要的时候,比如改个协议栈。


推荐阅读:
相关文章