手动编译内核
一般来说,内核的核心功是直接在内核里,要想让内核支持其他功能,通常具有以下三种选择:
1、不使用该功能
2、将这些功能编译成模块的形式
3、将这些功能直接编译进内核当中
手动编译的方式
使用make gconfig命令,不过使用该命令适用于Gnome桌面环境,且需要安装图形开发库
使用make kconfig命令,该命令适用于KDE桌面环境,且需要安装图形开发库
不过最常见的方式是使用make menuconfig命令来编译,使用该命令会产生一个窗口界面
在该窗口下有许多参数可以选择。
然后执行make命令进行编译即可。
接着执行make modules_install来安装编译的模块。
最后执行make install来完成整个编译过程。
在二次编译前,最好先执行make clean命令来清理上次编译过程中产生的一些二进制模块,核心文件(.config)不会被清理掉。
如果是第一次编译,也最好执行make mrproper命令来清理一些残留文件,不过该命令也会将核心配置文件(.config)删除掉,所以建议在执行该命令前,如果有.config文件,最好将 .config文件备份一下。
内核编译步骤
1、将某个内核解压缩到/usr/src/目录下
2、使用cd命令切换到/usr/src目录下
3、在/usr/src目录下有一个内核目录,为这个内核目录创建链接文件
4、切换到这个链接目录下,里面存放里许多和内核有关的文件
5、使用命令make menuconfig来打开一个文本窗口(如果使用该命令打不开的话,把终端窗口最大化)
在这个文本窗口下:
[*]:表示将该功能直接编译到内核,按Y键表示编译进内核
[M]:表示将该功能做出模块,按M键表示编译成模块
[]:表示不启用该功能,按N键表示不启用此功能
在每个选项后面如果出现箭头,表示该选项还有其子选项,按Enter键可进入子选项界面
如果选择完所有功能后,按两次ESC键,即可回到退出界面,在按YES键即可保存之前的选择配置
6、保存配置完成之后,会在当前目录下生产一个.config文件
7、在使用make进行编译
8、使用make modules_install安装内核模块
9、使用make install命令安装内核即可
不过使用这种方式编译的内核花费时间长,可能在系统启动过程中出现许多的错误,或者是某些功能没有编译到内核中而需要重新编译。因此,为了提高编译的成功率,我们可以将当前系统内核所使用的config配置文件,直接复制到链接目录下,并重命名为.config,之后的步骤和之前一下,不再详述。
例如:编译linux-2.6.28.10.tar.gz这个内核文件
1、将linux-2.6.28.10.tar.gz解压缩到/usr/src/目录下
2、切换到/usr/src目录下,为linux-2.6.28.10创建一个符合链接,叫linux
3、切换到linux目录下去,复制/boot/config-2.6.18-308.el5到当前目录下,并重命名为.config文件
4、在当前目录linux目录下,使用make menuconfig命令来打开一个文本菜单选项,里面是内核所有的功能和参数
5、使用make命令编译
6、在安装内核之前,先使用命令make modules_install来安装之前选择的模块。
这些安装的模块放在/lib/modules/`uname -r`/目录下
7、使用make install来安装内核
如果安装一切顺利的话,那么在/boot/grub/grup.conf文件中,会出现一个title,因此在下一次启动时,如果选择这个title,那么系统会去加载这个title中的内核,系统也可以顺利开机。
部分编译
有时候我们需要的功能或者模块没有编译进来,如果重新编译的话就会比较麻烦,因此,一般情况下,我们可以实现部分编译
对于部分编译我们可以分为以下几种状况:
1、只编译某个目录下的相关代码
make dir/ :只需指定某个目录即可,就会对指定目录下的代码重新进行编译
例如:重新编译arch目录,该目录是kernel的核心功能
make arch/
2、只编译部分模块
make M=dir/
例如:只编译驱动程序中关于网络的模块
make M=drivers/net/
3、只编译某一个模块
make /dir/Modules_name
例如:只编译驱动程序中的网卡模块
make drivers/net/pcnet32.ko
4、将编译完成的结果放在指定目录下
make o=/path/to/directory
编译内核时注意事项
当我们使用ssh远程登入到某个主机上去的时候,在编译内核的时候,如果ssh远程登入突然中断了,那么此时编译也跟着中断,那么我们就需要重新编译。为了解决这个问题,我们可以使用screen命令来打开一个界面(屏幕),在这个界面下编译内核时,如果ssh远程登入中断了,当再次远程登入screen界面的时候,我们可以返回到当时编译内核的界面,这样就可以继续编译内核了。
有关screen命令介绍如下:
screen命令:
screen -ls: 显示已经建立的屏幕
screen -S NAME: 直接打开一个新的屏幕。-S选项可以建议一个名为NAME的窗口。
screen -r ID: 还原回某屏幕(ID使用screen -ls命令可以查看的到)
screen -d ID:暂停某个屏幕。
Ctrl+a, d: 拆除屏幕(就是暂停这个屏幕)
exit: 退出某个屏幕
有时候我们在编译kernel时,要编译某个驱动程序,但是又不知道自己本机的硬件是否支持,这样就容易将那些不用的驱动程序编译进内核或者模块,而我们本机硬件所对应的驱动程序没有编译进内核或模块。因此为了方面我们自己关于如何查看本机硬件设备信息,这里提供了几个常用命令可供我们查看。
查看本机硬件设备信息
cat /proc/cpuinfo:查看CPU硬件信息
cat /proc/meminfo:查看内存信息
cat /proc/interrupt:查看中断信息
lsusb:显示所有USB设备信息
lspci:显示所有连接PCI总线设备信息
hal-device:Hardware Abstract Layer显示所有设备的详细信息