内核编译
今天下午跟马哥学习了内核的编译,从重新编译内核的目的来看,就是根据自己的硬件设备参照自己的实际需要来编译内核,根据情况是把某些功能模块直接编译进内核,还是做成模块,来定制自己功能和内核大小可以兼得的内核。下面来看一下内核的编译主要步骤。
内核编译的原则:1.编译时需要一个新版本,漏洞少一点
2.尽可能选择和自己硬件对应的驱动模块,兼容性好
3.服务器一般不用过新的内核,因为它没有发现一些bug,有可能不稳定
首先检查编译环境
yum groupinstall "Development Libraries"
和 yum groupinstall "Developmnet Tools "
同时确保ncurses-devel 也以安装在您的电脑上。
下载新版内核 tar xf linux-2.6.28.10 -C /usr/src //解压下载的内核到/usr/src 大约有几百M 解压比较慢
cd /usr/src
给linux-2.6.28.10 创建一个软连接
ln -sv linux-2.6.28.10 linux
cd linux
cp /boot/config-2.6.18-164.e15 ./.config //复制boot下的内核文件, 因为第一次编译内核,对其中的各个功能选项不够了解,所以第一次内核编译应该以 redhat提供的版本的基础上进行配置,在保证了内核能正常运行的基础上定制自己的 内核。 执行make menuconfig 进去编译配置界面 如果是利用终端连接的linux , 请注意终端界面要足够 大,界面不要太小,否则 编译配置界面无法显示
*号表示编译进内核, M表示编译成模块,按空格键选择
,回车键进入选择分支,我们已经使用了.config文件,所以可以直接编译,你可以选择自己想要的功能。选择完成后 结果将保存在.config中
make
命令编译内核 此过程大概需要几十分钟到一个多小时的时间,最好不要在终端内进行,任何断开连接 都会造成编译失败,一切工作将前功尽弃,所以大家最好在linux系统界面内进行 如果断开了连接或 者编译出现错误,必须重新进行编译,执行 make mkproper 将保持干净的源代码,不过这个操作 也将以前进行的内核编译功能选择文件也删除掉,所以只有第一次内核编译时才进行这个操作,所 以可以使用make clean 不过最好吧.config文件先进行备份在执行make clean。
(扩展一点知识 如果在终端中执行make 此时可以执行screen 命令 此命令可以将make在后台运行,即使终端断开连接,也不会影响make的执行 screen -ls 可以显示打开了几个screen 然后可以执行screen -r screenID 连接 ;
make O=/path/to/somewhere 可以把编译的结果保存在另一个目录中;
make -j 2(cpu 的倍数) 如果您有多块cpu 可以实现并行编译,加快编译速度;
make ARCH =x86_64 实现交叉编译,将编译好的结果直接运行在x86_64平台;
make M=drivers/net 可以特定编译某个目录 ,此处只编译net目录中的模块;
make drivers/net/pcnet32 只编译一个模块,此处只编译pcnet32设备模块;)
make modules_install
编译结束后就可以安装模块
make install 这一步会将内核信息写入到你的grub里,在/boot目录下的grup.conf 里我们将可以看到我们新编译的内核信息,
在/boot目录下也可以看到内核文件,
但是一旦内核出错会在启动时显示kernel panic!内核恐慌,可能是选择的模块没有对应的依赖关系,只能重新编译。
编译成功
出现www的原因是在执行make mnueconfig时添加的,这就是自己编译内核的效果,此时启动linux 就使用了新编译的内核