Linux编译内核:

编译内核:
首先是安装必要的工具
sudoapt-get install fakeroot build-essential kernel-package libncurses5libncurses5-dev
apt-get install libncurses5-dev  (meke menuconfig要调用的)


接下来是kernelsource code。
你可以选择ubuntu来源的源码:
sudoapt-get installlinux-source
这会安装与你现在正在使用内核,相同版本的源码。这对新手来说,是最好入手,最容易成功的方法。


使用Linux,要养成良好习惯,不要动不动就使用root权限或身份去处理事情。包括编译源码。所以之后过程,除了最后的安装之外,你不应该使用root权限。


在你个人的家目录下,新建一个目录,你可以自己决定名称,我暂定为temp。
mkdirtemp


以ubuntu为例,编译过程中所产生的文件,会多达8GB。假如你担心过程中,会有空间不足的情形,你也可以在其他挂载空间中编译。(我不确认这是否能在FAT或NTFS下完成,毕竟这过程中,有牵扯到权限属性问题)


复制下载的压缩档到目录中:
cdtemp
cp /usr/src/linux-source-3.11.0.tar.bz2
请自行修改文件名称


假如你是自行下载的,同样也把那个压缩档复制进来
cp ~/Downloads/linux-source-3.11.0.tar.bz2


解压缩:
tarxvjflinux-source-3.11.0.tar.bz2
你的目录下,应该会多出一个目录:linux-source-3.11.0,进入这个目录:
cdlinux-source-3.11.0
可以直接在拷贝到/usr/src,并直接解压。


复制设置档:
这个步骤并非必须,假如你对内核很熟悉,你可以跳过这一步;假如你是初学,修改已经设置好的设定,会比较容易些。
系统在安装内核时,会同时把当初编译的设定,同时安装在/boot下。以vmlinuz-3.11.0-17-generic这个内核为例,他的设置档为config-3.11.0-17-generic。你可以把他复制过来:
cp /boot/config-3.11.0-17-generic./.config
请自行修改其中的版本号。此外,你应该可以注意到我在复制的过程中,也把他改名为.config了,因为这是默认的设定档档名。




修改设置档:
makemenuconfig
这个是在你复制过来的config文件的基础上进行再次修改。会出现选单,你可以用”y”选择编译入内核,”m”选择以模组化,”n”选择排除。
我个人原则,现在正在使用的,或未来一定会使用的,尽量编译入内核;未来可能会使用的用模组,确定不会使用的用排除,不确定的选项不更动。当然,你也可以用”?”来看这个选项是什麼意思。
$sudo make menuconfig


配置用到的键只有几个,esc退出菜单;空格改变选项状态;光标键上下左右移动,回车选定。


选项意义:M是编译成可以随时加入的模块,*是编译进入内核,空就是不要。


配置选项非常多,具体配置可以参考金步国先生翻译的资料:Linux 2.6.19.x 内核编译配置选项。


参考网址:http://lamp.linux.gov.cn/Linux/kernel_options.html


为了一次成功,请大家遵循一个原则,如果你自己使用的内核已经选用了某个选项,如果你没用充分的理由,不要随便改动。这样虽然内核不那么精简,但是不容易出现问题。


我们可以精简的部分是硬件模块部分,对于自己没有的硬件要毫不犹豫的清除。


如果你很执着,或者你有洁癖,你也可以一项项对过去,按照金步国先生的资料描述去选择基本上没有问题。


五、必须强调的几个选项:


1、在“General setup”里面的“Prompt for development and/or incomplete code/drivers”金步国认为是不需要。但是如果你的硬件比较新,那几乎是必须选的,这样,我们才可以找到4965无线网


卡,alsa声音驱动等等。


Kernel log buffer size 我选15,双核。如果你用ia64,要选16。


Control Group support 集群支持?可以不要


Choose SLAB allocator (SLUB (Unqueued Allocator)) 内存管理模式slab和slub选择slub。


2、在“Block layer”里,假如没有2TB的硬盘,就去掉:Support for Large Block Devices 。Support for Large Single Files 也不需要,谁有2TB的文件?


3、Processor type and features中是关于cpu的,要认真选。


Symmetric multi-processing support是打开多核的开关,我的cpu是双核的,选中。


Processor family (Core 2/newer Xeon) 我的是Core 2/newer Xeon。找到自己的cpu后,把Generic x86 support选项取消。


Subarchitecture Type 选(PC-compatible)


Maximum number of CPUs 输入自己的核心数目,我输入2。


SMT (Hyperthreading) scheduler support说的是超线程技术,P4有支持的,我的t8100不支持,目前大部分市场上的家用cpu都不支持。


High Memory Support (4GB) 1G以下选1G;我是3G,选4G;4G以上的选16G


在“ Timer frequency ”里,默认是250Hz,较新的cpu都可以选择了1000Hz,性能更好。


4、Power management options中把APM (Advanced Power Management) BIOS support关闭。现在的电脑都用acpi了。


CPU Frequency scaling 是笔记本cpu节电技术


Default CPUFreq governor (conservative) cpu节电模式有四个,笔记本默认选conservative比较好。


ACPI Processor P-States driver 必须选,不然CPU Frequency就不能用。


后面的可选自己硬件相关的,我选的是Intel Enhanced SpeedStep和 Intel Speedstep on ICH-M chipsets,其他的统统消灭。


5、Bus options的选择:


Bus options (PCI, PCMCIA, EISA, MCA, ISA)


PCI support


PCI Express support 现在新买的机器基本上都是PCI Express了


ISA support 较新的新机器没有ISA设备,可以去掉


MCA support 去掉


NatSemi SCx200 support 去掉


PCI Hotplug Support


Support for PCI Hotplug (EXPERIMENTAL) 如果没有PCI热插拔设备,去掉


这里的选项可以考虑全部编译进内核,而不是以模块形式存在。


6、Device Drivers是重点,由于linux不但面向个人工作站,更多的是面向服务器的应用,所以可以把自己机器上没有的硬件全部去掉,而不用面面俱到。但是通用型的选项要慎重。


比如在网卡的部分,除了我的千兆网卡 Broadcom Tigon3 support和4965无线网卡Intel Wireless WiFi 4965AGN,其余的硬件支持统统去掉。


再比如声卡部分,我的是hd声卡,我只是在PCI devices中,选intel hd 声卡,再选Build IDT/Sigmatel HD-audio codec support,除此之外的硬件支持全部去掉。


声卡还有一个细节,在ubuntu7.10里面, 需要在/etc/modprobe.d/alsa-base后面添加options snd-hda-intel probe_mask=1 model=3stack,这样我的笔记本喇叭才可以发声,不然只有外接耳机或者音


箱。这次编译以后,这个动作就不必了,但是两个耳机插口只有一个可以用了。


再比如我的电脑中没有agp,就可以直接把agp相关的选项全部取消。


要注意的:


ATA/ATAPI/MFM/RLL support


Include IDE/ATA-2 DISK support 如果你的/boot是放在IDE硬盘上,那么这里一定要选*,选M都不行。否则启动时会出现“waiting for root file system”的提示而停滞不前。


SCSI emulation support 要用刻录机,必须选。


SCSI device support 现在都是SATA硬盘,一定要选*


SCSI disk support 如果你的/boot放在SATA硬盘上,一定要选*。


SCSI CDROM support 虽然康宝刻录机是ide接口的,但是必须把它当成scsi接口的,这是老问题了。用刻录机,必须选。


Graphics support


Support for frame buffer devices 选中,进入选择


VESA VGA graphics support 选上,不然字符界面启动会有问题,


后面的显卡选择:由于我的显卡是nvidia 8400gs,要自己安装nvidia公司的驱动,所以一个都没有选。这样导致ubuntu开机动画会出问题,我索性在grub中的splash字符全部删除,把开机动画关闭。字


符界面很正常。


Console display driver support 有人开机后字符控制台错误,就是这部分选项没有选,出问题了。


Framebuffer Console support 需要打开。


Bootup logo 开机图标,会在自检的画面上加上个性图标。需要在grub上添加“vga=”的选项,可以参考http://dotimes.com/articles /t23-slackware-framebuffer.html


7、File systems


Filesystem in Userspace support 简称fuse。是必选的,如果你要用windows分区。


CD-ROM/DVD Filesystems


ISO 9660 CDROM file system support 一般选*


DOS/FAT/NT Filesystems


VFAT (Windows-95) fs support 有FAT32分区就选*吧


NTFS file system support 有NTFS分区就选*吧


NTFS write support 如果想对 NTFS分区进行写操作,选*


必须将启动盘的文件系统编译进内核,默认是编译成模块,这样无法启动系统。ubuntu采用的文件系统是ext3,请把ext2,ext3相关的必要选项都编译进入内核。


8、Virtualization这个大类是我多花几百元买t8100的主要原因,因为t8100支持intel vt技术


使linux上的虚拟机的性能大幅度提高。这里的选项我除了amd的,其他都编译成模块。


9、全部设置完成,最后一项是保存设置。


按照我的习惯,先在上一层目录保存一个备份,文件名类似 ../config20080630


然后再保存到当起目录,文件名 .config


退出设置程序。
修改完成后,储存退出。记住,储存名称是.config。


假如你使用了ubuntu的源码,并直接复制了设置档,但没有进行makemenuconfig去更改设定,理论上,你会在编译后得到一个跟你现在使用中,一模一样的内核。


清除之前编译的遗留的各式文件
make-kpkgclean(需要sudo apt-get install fakeroot build-essential kernel-package libncurses5 libncurses5-dev)
编译的过程中,会产生许多文件。假如你之前编译有错误,需要重新编译,你必须使用这个指令,清除之前所有生成的文件。


说到这个,就不得不提:
网路上,许多编译内核的步骤,会提到makemrproper, make clean, makedistclean这几个指令,同样都是清除之前编译遗留文件的指令。这几个指令是有差异的:
makeclean: Remove most generated files but keep the config and enoughbuild support to build external modules
make mrproper: Remove allgenerated files + config + various backup files
make distclean: mrproper + remove editor backup and patch files


而make-kpkgclean类似makedistclean,但不删除设置档。




接下来,开始正式编译内核:
fakerootmake-kpkg --initrd kernel_image kernel_headers-j4
1. --initrd: 生成initramfs


2. --revision: deb文件的版本信息,需要数字开头,如10.04.dlrc


3. --append-to-version: 内核版本附加信息


4. kernel_image:内核和模块的安装包


5. kernel_headers,生成内核头文件的安装包。
make-kpkg  --initrd --revision 10.04.dlrc --append-to-version -20130121 kernel_image  
make-kpkg  --initrd --revision 10.04.dlrc --append-to-version -20130121 kernel_image kernel_headers
apt-get install kernel-package(make-kpkg对应的安装包)
这个指令会编译出内核、模组、还有initramfs,并且把他打包成.deb安装包。
-j4表示用4个cpu核心进行编译,可以加快编译的速度。你必须依你的实际状况去修改数值。此外网路上流传,这个数值要使用"cpu核心数+1",这是错误的作法,还会延缓速度,你可以自行试试看能获得多少效能。我猜测,这种说法是来自於当年单核编译时,用-j2可以加快编译速度的作法衍生而来。


因为这个安装包中的文件,必须为root所有,所以必须要sudo去打包,但是我们又不希望动用系统root权限去作,因此出现了fakeroot这个程式。
他可以在fakeroot中创造出一个模拟root的shell,在内部赋予root权限。
你不需要输入任何密码,不需要root权限,去执行这个程式。编译完,就可以获得内部文件所有者是root的安装包。
你可能需要等上一个小时,这要看你的系统配备而定。




cd..
ls
这应该会看到有两个.deb文件,一个是kernel-image,一个是kernel-headers。




编译完成后,安装:
sudo dpkg -i*.deb
安装完会自动更新grub,重开机选择新内核即可。若开机失败,可选择旧内核开机。移除新内核,并重新编译与安装。
还是必须修改/boot/grub里的grub.cfg 使 set default="0",改为一个你需要的内核,要么是个错的系统。之后才可以进入选择系统界面。
之后开机时要狂按esc键,选择adcance 之后进入选择要进入的系统。
没有桌面,我们可以进入tty,通过ctrl+alt+fn进入控制台,就可以操作了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值