分享

在Debian和Gentoo下编译内核步骤详解之2.6.30.2

 昵称1155848 2010-04-11
在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新手能有所帮助。编译内核蛮麻烦的,不过一旦搞定,就会很有成就感,毕竟是真正对自己机器定制的内核,没有多余的代码,用起来就是爽,哈哈。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多