在Debian和Gentoo下配置内核步骤详解之2.6.30.2
吕头注:本文配置完全适用于内核2.6.30.2。
Linus Torvalds在2008年的圣诞前夜放出了2.6.28内核,虽然说没有啥突破性的改进,但是还是有足够的理由让我不畏艰难的去升级:首先,我刚买的笔记本,反正要新装系统。其次,正式加入了对ext4文件系统的支持,之前虽然已经都支持了,但一直是ext4-dev。再次,2.6.28内核直接加入了对Intel 5100无线网卡的支持。以上特性还是很让我期待的,所以就有了下面的升级过程。虽说编译内核不是那么容易,但只要胆大心细,再加上google,基本上还是没有问题的,最后编译出的内核大小为1.6M,还是挺有满足感的,哈哈。 首先是准备工作,安装一些编译内核所必要的包,只对Debian,Gentoo则不需要,stage3应该都已经包括这些包了:
# apt-get install kernel-package libncurses5-dev
然后从www.上下载最新的内核源代码,保存到/usr/src目录下面:
# cd /usr/src
# wget http://www./pub/linux/kernel/v2.6/linux-2.6.28.6.tar.bz2 解压,然后给解压后得到的源代码文件夹设置一个软链接:
# tar -xvjf linux-2.6.28.6.tar.bz2
# ln -s linux-2.6.28.6 linux 下面进入文件夹linux,就可以运行make menuconfig开始配置内核选项了。可以选择的其他工具还有make config(文本对话模式,比较麻烦),make xconfig(GUI模式),我一般都用make menuconfig(菜单模式),习惯了:
# make menuconfig
这时候就会出现一个菜单,里面有无数的选项等着你决定。这是编译内核最麻烦也是最容易出错的一步,稍有不慎,不是不能启动,就是没法进X,或者没法使用某项硬件等等等等。总之我在这步是跌过不少跟头,经过多次摸索和google,才找到了(基本上)最适合我的电脑的配置。鉴于里面的选项实在是太多,下面我只强调一些最最重要的部分,具体配置可以点击这里下载。
首先是常规设置General setup,我选的有这些:
[*] Prompt for development and/or incomplete code/drivers
[*] Support for paging of anonymous memory (swap) [*] System V IPC [*] POSIX Message Queues [*] BSD Process Accounting [*] BSD Process Accounting version 3 file format [*] Group CPU scheduler [*] Group scheduling for SCHED_OTHER [ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support [*] Optimize for size [*] Profiling support (EXPERIMENTAL) 然后是Enable loadable module support(可加载模块支持),基本上只要选可以卸载模块就可以了,其他功能基本用不上,特别是强制装载(卸载)模块,官方都不推荐,我们选它干什么呢:
[*] Module unloading
Enable the block layer(块设备层),本身该选项是必选的,里面的小项我一个也没选,用不着。
接下来Processor type and features(中央处理器(CPU)类型及特性),这里你可以选择你的cpu类型,如果是多核的话还有相应的选项。还有一个比较重要的是MTRR(Memory Type Range Register) support,如果你有nvidia显卡的话,必须得选上。
[*] Tickless System (Dynamic Ticks)
[*] High Resolution Timer Support [*] Symmetric multi-processing support Subarchitecture Type (PC-compatible) Processor family (Core 2/newer Xeon) [*] Multi-core scheduler support Preemption Model (Voluntary Kernel Preemption (Desktop)) [*] Sparse Memory virtual memmap [*] MTRR (Memory Type Range Register) support [*] MTRR cleanup support [*] Enable seccomp to safely compute untrusted bytecode 再下来是电源管理选项Power management and ACPI options,这里基本上默认就可以了,在子选项ACPI Support的子选项里面,因为我用笔记本,所以一般选择AC Adapter,Battery,Processor,Thermal Zone,把它们编译成模块,其他无视。
然后是总线选项Bus options (PCI etc.),PCI和PCIE当然是要选的喽,其他的看着办吧根据你的硬件。比如如果你有PCMCIA卡的在这里就可以选上,我没有所以就不选了:
[*] PCI support
[*] Support mmconfig PCI config space access [*] PCI Express support [*] Message Signaled Interrupts (MSI and MSI-X) [*] Interrupts on hypertransport devices 下面是Executable file formats / Emulations(可执行文件格式),默认就行,记住如果你的系统是64位的,而你又有可能某天会运行32位程序,则IA32 Emulation选项必须打开,除非你百分之百保证你再也不需要32位程序了。这个好像目前还搞不定,所以还是老实的选上吧
接下来是Networking support(网络支持),注意,这里不是具体硬件,而是各种与网络相关的协议,除非你不想上网,否则就得选上。不过子选项里面有很多什么蓝牙,红外,广播等等之类的东西,除非你有,否则都可以去掉。我选的主要就是里面关于网络(Networking options)和无线(Wireless)相关的了。前者当然要把TCP/IP选上,IPv6我也编译成模块了,虽然现在用的也不多。后者则一定要把Generic IEEE 802.11 Networking Stack (mac80211)选上,如果你想无线上网的话:
Networking options --->
<*> Packet socket [*] Packet socket: mmapped IO <*> Unix domain sockets [*] TCP/IP networking <M> Large Receive Offload (ipv4/tcp) <M> The IPv6 protocol [*] Wireless ---> {M} Improved wireless configuration API [*] nl80211 new netlink interface support [*] Old wireless static regulatory definitions <M> Generic IEEE 802.11 Networking Stack (mac80211) 下面终于到了Device Drivers(设备驱动程序)这一块,这里的选项多如牛毛,想要让你的硬件完美的为你工作,就得在这里下功夫了。切记,这里要根据你自己的硬件仔细的选择,否则等待你的就是各式各样的怪毛病。我把当中容易导致死机或者无法启动的选项在下面写出来。
首先是SCSI device support,只要你在用SATA硬盘(大多数人目前),就必须把SCSI硬盘支持编译进内核,注意,不能编译成模块。这里是经常导致新手无法启动机器的地方:
<*> SCSI disk support
<*> SCSI CDROM support [*] Asynchronous SCSI scanning 接下来的Serial ATA (prod) and Parallel ATA (experimental) drivers当然也要选上,如果你的硬盘是SATA的话。
下面讲一下无线网卡,在2.6.28内核里,Intel WiFi 5000系列已经可以被直接支持了(对应的模块叫iwlagn),只要选中下面的选项就可以:
<M> Intel Wireless WiFi Next Gen AGN
[*] Enable Spectrum Measurement in iwlagn driver [*] Enable LEDS features in iwlagn driver [*] Intel Wireless WiFi 5000AGN 当然为了使用该无线网卡驱动,还必须去http://下载对应的microcode(uCode),并安装在/lib/firmware下面。Gentoo的源里面就有,直接emerge net-wireless/iwl5000-ucode就可以了。
如果你有其他无线网卡,自行选择相应的驱动。 下面再讲讲鼠标键盘。和它们相关的主要集中在2处,一个是Input device support,另一个是HID Devices。在前者把鼠标键盘选上就好了,下面的子选项鼠标就选个PS/2,键盘啥都不用。值得注意的是Event interface必须得选上,否则笔记本的触摸板不能用。
如果你有USB鼠标键盘的话,则必须在后者也就是HID Devices那里把Generic HID support以及USB Human Interface Device (full HID) support给选上。 Input device support --->
<M> Event interface -*- Keyboards [*] Mice ---> <M> PS/2 mouse [*] HID Devices {M} Generic HID support <M> USB Human Interface Device (full HID) support 如果你像我一样,有摄像头,那么就得在Multimedia devices的下面把Video For Linux给选上,然后再选上相应的驱动。基本上USB Video Class (UVC)包含了大部分常用摄像头的驱动,如果你有特殊需要的话就得再仔细看看了,据说GSPCA驱动支持更多的摄像头。
Multimedia devices --->
<M> Video For Linux [*] Enable Video For Linux API 1 compatible Layer [*] Video capture adapters ---> [*] Autoselect pertinent encoders/decoders and other helper chips [*] V4L USB devices ---> <M> USB Video Class (UVC) [*] UVC input events device support 下面讲讲图形设备/显卡支持(Graphics support),要想能正常显示,全靠这里了。这里可以选择的硬件种类极多,但其实要选的没几个。frame buffer支持必须得选上,否则开机一片黑色,然后该项下面基本上只要选择VESA VGA graphics support就行了,千万别选nVidia Framebuffer Support,因为内核自带的这个驱动和nvidia提供的驱动冲突。我们之后会装nvidia的官方驱动,所以这里别选。其他类型的显卡类似。当然别忘了Console display driver support,要不然开机还是黑色一片(没法显示纯文本模式)。最后要选的就那么几项:
-*- /dev/agpgart (AGP Support)
<*> Support for frame buffer devices ---> [*] VESA VGA graphics support Console display driver support ---> -*- VGA text console <*> Framebuffer Console support 声卡没什么好说的了,ALSA是唯一的选择,在下面把你自己的声卡勾上就编译成模块就好了。
最后是USB支持(USB support),在这里要把USB device filesystem,USB 1.1(UHCI或者OHCI),USB 2.0(EHCI)选上,如果你用外置硬盘的话,还要把USB Mass Storage support选上。其他设备自己另选,下面是我的:
<M> Support for Host-side USB
[*] USB device filesystem <M> EHCI HCD (USB 2.0) support [*] Root Hub Transaction Translators [*] Improved Transaction Translator scheduling (EXPERIMENTAL) <M> UHCI HCD (most Intel and VIA) support <M> USB Mass Storage support 还有一些各种各样的杂七八拉的各种驱动,自己看情况选吧。这样最烦人的设备驱动这块就搞定了。
下面到Firmware Drivers(固件驱动)这块,我啥也没选。
然后是File systems(文件系统)这块,又是一个相当重要的地方。原则就是选择你用到的文件系统,并且编译进内核,而不是模块,否则无法启动!比如我就选择了ext2,ext3,ext4的支持。如果你用光驱的话,ISO 9660 CDROM file system support必须得选上,如果你想访问windows分区的话,DOS/FAT/NT Filesystems的支持也得选上。还有一个重要的地方,Pseudo filesystems必须的选上,这个提供了对/proc文件系统的支持,没有它也没法开机!
下面到Kernel hacking(内核hack选项),基本上去掉能去掉的就可以了,呵呵,反正我是这样。
然后是Security options(安全选项),我还是去掉能去掉的,但是切记,Enable different security models必须得选上,要不然虽然能正常进系统,但是重启的时候会死机,真是妖了(至少在我这是这样,原因不明)。
[*] Enable different security models
下面是Cryptographic API(加密选项),去掉能去掉的就好了。
最后是Virtualization(虚拟),我就用了默认值,也基本没啥好选的。
经过漫长而痛苦的选择,终于把所以该选的都选了,不该选了都去了,退出保存,下面就可以编译安装内核了,这个倒很简单。
在Debian下: # make-kpkg clean
# make-kpkg --initrd kernel_image kernel_headers 上诉第2个命令会在/usr/src目录下面生成2个debian的二进制包,分别对应内核和相应的头文件。用dpkg命令安装一下,就彻底装好了。
# dpkg -i linux-image-2.6.28.6_2.6.28.6-10.00.Custom_i386.deb
# dpkg -i linux-headers-2.6.28.6_2.6.28.6-10.00.Custom_i386.deb 在Gentoo下面更简单,直接:
# make && make modules_install
# cp /usr/src/linux/arch/x86_64/boot/bzImage /boot/ 就一切搞定了!当然最后别忘了修改grub的菜单。
写的累死了,希望对linux新手能有所帮助。编译内核蛮麻烦的,不过一旦搞定,就会很有成就感,毕竟是真正对自己机器定制的内核,没有多余的代码,用起来就是爽,哈哈。
|
|