首页 > 为什么要编译linux内核?

为什么要编译linux内核?

鄙人新手,对一些概念不能很理解,总有人说自己编译了一下linux内核,这个具体什么意思呢?有什么好处?还有模块编译又是个啥?编译会不会导致原来的linux炸掉?原来的内核是不是就是被卸载了?或者推荐一些关于这方面的网站博客之类……我实在搜不到自己想要的……谢谢了


编译内核可能是出于某种需求,比如对内核大小有要求,去掉内核中某些用不到的部分,这种场景往往是嵌入式系统。
或者自己修改了某部分内核代码,需要编译后验证功能。

模块编译时将某些功能模块编译成 .ko 可以在不重新编译内核的情况下,insmod xxx.ko 到系统中使用编写的代码功能。

编译内核后不会替换当前内核,编译后的新内核往往在类似下面的目录下,名字大都是 bzImage
/usr/src/kernels/3.xx.x-.x86_64/arch/x86/boot/

然后可以编辑系统的 grub list 添加最新的内核来用它


无需编译,1分钟安装Ubuntu官方构建的最新版Linux内核
新内核集成了新驱动,比如Intel核显:

/lib/modules/`uname -r`/kernel/drivers/gpu/drm/i915/i915.ko

一个系统可以安装多个内核,比如启动文件,新内核不会覆盖旧内核:

/boot/vmlinuz-VERSION
/boot/initrd.img-VERSION

安装新内核过程中,一些内核模块需要重新编译,比如VirtualBox:

/lib/modules/`uname -r`/updates/dkms/vboxdrv.ko

如果新内核运行不正常,可以在开机GRUB引导里选择旧内核启动。
也可以这样改回原来使用的内核:

ln -sf /boot/vmlinuz-VERSION /vmlinuz
ln -sf /boot/initrd.img-VERSION /initrd.img

其中VERSION是原来内核的版本。


这类编译的目的主要是通过编译来了解Linux内核编译的过程,熟悉内核的工作原理,甚至还可以尝试进行一些修改。

编译只是将源码编译成程序,不会替换当前的系统,也不会影响当前系统的运行。


他改了点东西于是感觉很好于是就说..我编译了一下Linux内核
推荐《深入理解linux内核》


编译内核和编译其他软件没什么本质区别。都是code到binary的过程。编译内核稍微复杂一点而已。
编译完成后你可以使用新内核启动也可以选择之前的内核启动。
一般情况没必要重新编译内核,除非你需要对内核进行定制,比如:裁剪内核,或者打了新的patch,又或者你自己写了个内核模块。

【热门文章】
【热门文章】