内核编译
今天下午跟马哥学习了内核的编译,从重新编译内核的目的来看,就是根据自己的硬件设备参照自己的实际需要来编译内核,根据情况是把某些功能模块直接编译进内核,还是做成模块,来定制自己功能和内核大小可以兼得的内核。下面来看一下内核的编译主要步骤。
今天下午跟马哥学习了内核的编译,从重新编译内核的目的来看,就是根据自己的硬件设备参照自己的实际需要来编译内核,根据情况是把某些功能模块直接编译进内核,还是做成模块,来定制自己功能和内核大小可以兼得的内核。下面来看一下内核的编译主要步骤。
内核编译的原则: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。
命令编译内核 此过程大概需要几十分钟到一个多小时的时间,最好不要在终端内进行,任何断开连接 都会造成编译失败,一切工作将前功尽弃,所以大家最好在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 就使用了新编译的内核