是日,课余之余研究了一下Linux的Kernel的编译。曾经都是在Windows平台工作,几乎无机会用Linux,于是也想凑热闹玩一下。平台是最新的Ubuntu10.04LTS,Kernel也是最新下载的2.6.35.2版本。虽然如今Kernel的编译比过去便捷的多,用menuconfig的话几乎不用人工配置,命令也不用敲多少行。编译内核算是学LinuxKernel最开始的部份。
编译步骤:
1.到上下载最新的内核源代码linux-2.6.35.2.tar.bz2(目前最新的版本),之后置于/usr/src目录下。
2.为了使编译过程便捷linux内核编译步骤,建议步入root帐户进行操作,这样做使你不用每次都用sudo命令。(我还不太了解这样做安全性是否可靠)
步入Terminal,执行:suroot之后输入你的Password,这样就在root帐户权限下进行剩下的操作了。
3.下载的Linux源码是压缩包,须要解压到目录下:tar-jxvflinux-2.6.35.2.tar.bz2-C/usr/src
4.步入解压后的目录:cd/usr/src/linux-2.6.35.2
5.检测有无不正确的.o文件和依赖关系:makemrproper(虽然这一步可以省略,由于是刚下载好的源码,一定是干净的;假如使用的是早已编译过的code,则须要做这一步)
6.配置Kernal选项:makemenuconfig(这一步很重要,它决定了你可以个人多样化你的Kernel。当你使用menuconfig时,会有一些选择列下来)主列表如下:
GeneralSetup:常规的配置,例如Kernelconfig,CPUGroup,Aduiting等等
Loadablemodulesupport:订制你要加载什么modules
Enabletheblocklayer:主要是块设备和大文件的设置
Processortypeandfeatures:处理器配置和多样化
Powermanagementoptions:电源管理的多样化,例如Hibernate这样的
Busoptions:PCI总线的订制
Executablefileformats:主要是设置ELF的配置
Networkingsupport:订制网路选项,包括Wireless,Bluetooth和Network选项
DeviceDrivers:订制你须要加载的设备驱动
FirewareDrivers:BIOS和EFI这样的固件驱动设置
FileSystem:文件系统的设置linux内核编译步骤,包括EXT3,EXT4,FAT,CD/DVD...等等N种
Kernelhacking:主要是设置Kerneldebugging的linux安装,做内核调试会有用
Securityoptions:安全选项
CryptographicAPI:加密设置,包括MD5,SHA1,CRC等等N种加密算法的配置
Virtualization:虚拟化设置
Libraryroutines:主要订制CRC校准的function
里面是16大项,每一项都有N多小项,说真的这个上面每一项都够研究一阵子的。不过对内核编译而言,你可以全部采用默认选项(会延长编译时间)。设置好了menuconfig,保存退出。
7.构建Modules依赖关系:makedep
8.删掉配置后剩下的不适用的文件:makeclean
9.编译内核:makebzImage(这个会花些时间,看机器情况和menuconfig的定义而言。我采用默认的设置,编译时间花了20分钟左右。假如Kernel大于512K,可以用makezImage命令)
10.编译内核模块:makemodules(这个也会花点时间,要看你订制的modules数目而言。采用默认设置,花了大概25分钟。你可以用make-j推进编译速率,n代表你CPU的数目)
11.安装内核模块:makemodules_install
12.安装内核:makeinstall
13.创建initrd文件:(1)cd/(2)输入:mkinitramfs2.6.35.2-o/boot/initrd.img-2.6.35.2-generic
14.拷贝编译好的内核image:cp/usr/src/linux-2.6.35.2/arch/i386/boot/bzImage/boot/vmlinuz-2.6.35.2-generic
15.最后一步,更改Grub虚拟主机 linux,更新启动列表:update-grub(如需自动编辑grub.cfg,则在root帐户下使用gedit就可以了)
(注:Ubuntu10.04早已使用了Grub2来管理启动设置,而不是Grub,所以在往年的/boot/grub路径下你是找不到menu.lst的,由于Grub2早已使用了/boot/grub/grub.cfg来管理配置启动设置,不过最好不要自动编译这个文件,具体的方法是编辑/etc/default/grub和/etc/grub.d下的脚本文件。有关Grub2的详尽教程,请参考)
16.Reboot机器,之后Enjoyit!