Linux 内核编译详解

来源:百度文库 编辑:神马文学网 时间:2024/04/27 17:25:26

Linux 内核编译详解

Linux,我回来了。
两台老旧机器都不能装rh9.0.没办法,还是找原来的rh5.1版本用吧。
公司里面拿了台旧货顺利安装,局域网也没有问题。测试环境apache,php,perl,mysql,samba这些就只有慢慢弄了。先要重新编译一下内核。5.1版本的默认内核是2.0.xx。现在release的稳定kernel是2.6.1先重新编译吧。
上google找了篇相关文章,其他陆续增加。
供自己参考备忘,不然下次用又要忘记了。
有BLOG真是好啊。
linux5.1版本kernel是2.0.34,在升级到2.6.1的时候遇到大量的错误。缺少了很多的支持工具的新版本,会造成无法编译。
这里ZT的几篇文章,暂时没有做整理。先堆着吧
http://www.linuxfocus.org/ChineseGB/July2002/article252.shtml

>http://www.linuxaid.com.cn/articles/9/3/936638314.shtml

升级到2.4内核

摘要

  Linux 2.4.x有完全新的网络内核代码并支持很多新的技术。在本文中我们首先讨论新内核的特性,然后讨论如何从2.2.x升级到2.4.x新内核。
(2002-09-02 12:36:50)

--------------------------------------------------------------------------------
By Wing, 出处:ideal


  Linux 2.4.x有完全新的网络内核代码并支持很多新的技术。在本文中我们首先讨论新内核的特性,然后讨论如何从2.2.x升级到2.4.x新内核。
  Linux内核是操作系统的核心部分,它集成了2.3系列内核开发过程中的各种经验和功能。当年从2.0.x内核升级到2.2.x内核是一个棘手的过程(这种话对我最重要,我的redhat5.1就是2.0.x的kernel。现在想升级到2.4.24。真是问题多多阿。一大堆工具需要升级。我已经开始吐血了。),因为需要升级很多相关的支持工具。而幸运的是从2.2.x升级到2.2.4则要简单很多。假设你的系统良好的运行着2.2.x内核,首先需要现在多达23M的2.4.x内核,在正式编译安装新内核以前需要仔细阅读新内核有哪些新的改进和特色来决定自己是否需要更新到新内核。
  有哪些新特色?
  新内核的最大特色是对intel的64位处理器Itanium的支持,而Itanium处理器将在今年下半年推出。Linux提前对Itanium的支持是为了使用户可以平滑地过渡到新处理器。同时2.4.x添加了对IBM S/390系统的支持。

  对ISA设备的PNP支持基本上比较稳定,对USB设备的支持也得到了加强,PCMCIA/PC卡的支持也更加成熟。有很多新特性值得升级到2.4.x内核。对于文件系统来说对UDP的支持将有利于DVD和CD-RW用户。但是DVD视频回播的支持仍然不够成熟。2.4.1内核中对ReiserFS的支持也有些稳定性的问题。

  另外一个升级到2.4.x的一个重要原因是完全重写的,功能大大增强的网络内核。NFS代码已经被加强,且有更少的bug,同时提供对NFSv3的支持。另外一个值得注意的地方是包括了设备文件系统(DecFS,Device Filesystem),不象以前在/dev目录下包含指向设备的大量的设备节点,DevFS在一个设备被加载时自动创建相应的节点。并且/dev目录下将不同设备的节点进行了分类存放在不同的子目录下。

  可以看到大部分的改进都是针对非i386系统的。若你的系统需要使用增强的ISA PNP,USB和更快的网络内核,或新的sound/video/video4linux驱动,你可能就需要更新内核,否则你最好不要更新内核。

  编译安装新内核的条件

  您可以从http://www.kernel.org/下载最新版本的内核,得到新内核的以后将其搬移到/usr/src目录下,并且需要确保满足以下条件:

* Gnu C至少应该是2.91.66或以上版本,可通过执行“gcc --version”命令检查。
* Gnu make至少应该是3.77或以上版本,可通过执行“ make --version”命令检查。
* binutils至少应该是2.9.1.0.25或以上版本,可通过执行“ ld -V”命令检查。
* util-linux 至少应该是2.10o或以上版本,可通过执行“ fdformat --version”命令检查。
* modutils至少应该是2.4.0或以上版本,可通过执行“insmod -V”命令检查。
* e2fsprogs至少应该是1.19或以上版本,可通过执行“tune2fs --version”命令检查。
* pcmcia-cs至少应该是3.1.21或以上版本,可通过执行“cardmgr -V”命令检查。
* PPP至少应该是.4.0或以上版本,可通过执行“pppd --version”命令检查。
* isdn4k-utils至少应该是3.1beta7或以上版本,可通过执行“isdnctrl 2>&1|grep version”
命令检查。
  若发现任何一个软件是低于要求的版本,就需要到http://www.freshmeat.net下载新版本进行安装,一般情况下若当前系统是2.2.x,则除了modutils以外都可以满足需求。

  在编译新内核以前首先删除/usr/src/linux这个符号链接,然后再解压源代码,并创建新的linux符号链接指向新的内核源码目录:


# rm /usr/src/linux
# tar xzpvf linux-2.4.3.tar.gz
# mv linux linux-2.4.3(以后的一些版本tar解开以后,可能直接就是有版本好的文件夹名称)
# ln -s/usr/src/linux-2.4.3 linux

  确保"/usr/include/asm"、\"/usr/include/linux"和\"/usr/include/scsi"等子目录是指向内核源代码的链接。子目录asm、linux和scsi都是链向源代码目录下的真正的、该计算机体系结构所需要的真正的include子目录。如:asm指向"/usr/src/linux/include/asm-i386"等。若没有这些链接,就需要手工创建,按照下面的步骤进行 [root@deep]# cd /usr/include/


[root@deep]# rm -rf asm linux scsi
[root@deep]# ln -s /usr/src/linux/include/asm-i386 asm
[root@deep]# ln -s /usr/src/linux/include/linux linux
[root@deep]# ln -s /usr/src/linux/include/scsi scsi

  这是配置非常重要的一部分。删除掉"/usr/include"下的asm、linux和scsi目录后,再创建新的链接指向新内核源代码目录下的同名的目录。这些头文件目录包含着保证内核在系统上正确编译所需要的重要的头文件。

  下一步就需要编译内核:


# make dep clean modules modules_install bzImage

  拷贝新内核文件\"/usr/src/linux/arch/i386/boot/bzImage"到启动目录,并改为合适的名字:


[root@deep]# cp /usr/src/linux/arch/i386/boot/bzImage
/boot/vmlinuz-2.4.3

  拷贝"/usr/src/linux/System.map"到启动目录下,并设定合适的名字:


[root@deep]# cp /usr/src/linux/System.map /boot/System.map-2.4.3

  进入启动目录下,将目录下的链接文件\"vmlinuz"及\"System.map"指向新的内核:


[root@deep]# cd /boot
[root@deep]# ln -fs vmlinuz-kernel.version.number vmlinuz
[root@deep]# ln -fs System.map-kernel.2.4.3

  必须将链接文件vmlinuz及System.map指向新内核的相关文件,因为如果没有新的链接,LILO程序将缺省地自动使用老内核。

  删除启动目录下无用过期的文件:


[root@deep]# rm -f module-info
[root@deep]# rm -f initrd-2.2.12-20.img

  "module-info"链接指向系统的旧内核的模块目录。由于现在安装了新内核,我们就无需保持这个文件。文件\"initrd-2.2.12-2"包含在可以使用磁盘之前初始化系统所需的RAM盘映像。这个文件只有在系统有scsi设备的情况下才会在安装系统时生成。由于这里生成编译的是一个单块(非模块化)的新内核。所以即使系统有scsi设备,这里仍然可以安全的删除该文件。

  最后,编辑"/etc/lilo.conf"加入新内核作为引导选项:

  第一步: 编辑文件"lilo.conf "文件(vi /etc/lilo.conf)对"image=/boot/"一行做适当的修改:


[root@deep]# vi /etc/lilo.conf

  例:


boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=00
restricted
password=somepasswd
image=/boot/vmlinuz-2.4.3
label=linux
root=/dev/sda6
read-only

  第二步:更新对lilo.conf作的修改。


[root@deep]# /sbin/lilo -v
LILO version 21, [Copyright 1992-1998 Werner Almesberger
Reading boot sector from /dev/sda
Merging with /boot/boot.b
Boot image: /boot/vmlinuz-2.4.3
Added linux *
/boot/boot.0800 exits ?no backup copy made.
Writing boot sector.

  然后重新启动机器就可以享受2.4.x内核的新感受。

  资源链接

  Kernel.org

  Linux software/tools at Freshmeat

  Compiling the Linux kernel

  Other articles by Amit Chattopadhyay


-----------------------------------------------------------------------------------------
基本编译情况说明

我目前Linux的版本是: RedHat linux Advance Server 2.1, 内核版本是2.4.9-e3。现在下载最新的稳定内核是2.4.22。机器有双操作系统:linux和windows 2003 Server。使用GURB多重启动管理程序。
在编译开始前,建议先在windows下用相关软件对硬件做一个详细统计,包括硬件类型,厂家,芯片版本等等,特别是笔记本和品牌机,因为二者很多部件都是OEM其它厂家的,建议把它记录下来以供配置内核时使用。
先到www.kernel.org下载个内核文件,现在最新稳定的版本是2.4.22

1.将内核源码包linux-2.4.22.tar.bz2 copy至/usr/src目录下:
#cp linux-2.4.22.tar.bz2 /usr/src
#cd /usr/src

2.用以下命令解开压缩包
#bzip2 -d linux-2.4.22.tar.bz2
#tar -xvf linux-2.4.22.tar

3.进入到以后编译时用的工作目录下:
#cd /usr/src/linux-2.4.22

当然可以在Xwindows下用GZIP等解压缩软件解开,用起来和winzip或winrar差不多的。这是dos没有学就直接学windows的悲哀。
6. #make mrproper

该命令保证源代码目录下没有不正确的.o文件(即object文件,编译c语
言时生成的,目的是下一步编译成可执行码时link之用)以及文件的相互
倚赖关系.第一次编译刚下载的源码包不用此命令,但如果多次使用这
些源码编译内核,那么一定要先运行本命令.
7. 开始编译内核
7.1. 在X Window下编译内核:

7.1.1 #make xconfig

假如在在文本模式下编译:
#make menuconfig

接下去就可以看到一个图形界面了,不过我用起来感觉还是在xwindows下舒服,至少不会使你按n次空格键而晕倒。

以下是内核的主要配置文件的详细说明:

1.Code maturity level options:代码成熟等级。

1.1.prompt for development and/or incomplete code/drivers.
在Linux的世界里,每天都有许多人为它发展支持的driver和加强它的核心。但是有些driver还没进入稳定的阶段。但其作者很欢迎其他人去测试这些driver并提出一些bugs。很多参考书上说这是那些开发人员认为还不是很稳定的功能。但是我个人认为,这个是应该选的一个选项,系统默认是N,我建议还是选择Y,因为会使性能有所提高。
2.Loadable module support:对模块的支持。

2.1.Enable loadable module support.
启动动态载入额外模块的功能,系统默认为Y,建议选择该功能。
2.2.Set version information on all module symbols.
通常,我们更新核心版本之后,模块要重新的编译。这个选项可以为某个版本的内核编译的模块在另一个内核下使用,但通常用不到,可以不选,系统默认为Y。

2.3.Kernel module loader.
让内核在启动时有自己装入必需模块的能力,建议选上。注意:在开机就会 mount 上来的 partition 的 FS 、device driver 记得要 compiler 进 kernel,不能把它弄成 modules。请不要夸张到为了完全模组化而忘了把ext2fs和IDE dirver compiler 进 kernel 里。通常的建议是如果可能,将内核代码编译成可加载模块,因为这样可以使内核更小,而且更稳定。警告!千万不要将文件系统(File System)部分的代码编译为可加载模块,如果你犯了这个错误,将文件系统(File System)部分的代码编译为可加载模块,结果将是内核无法读取它自己的文件系统。 然后内核无法加载它自己的配置文件——一些很明显是在正常启动Linux时所必需的东西。我很少使用可加载模块:虽然会使内核文件变大,但我喜欢我的内核能够直接和硬件对话,这只是我自己的偏好。

3.Processor type and features:处理器类型和特色

3.1.Processor family.
它会对每种CPU做最佳化,所以要选择正确的CPU否则会对该机的性能有一定的影响。不过,如果您的gCC编译器是2.7.0版以前的。那么只能选择386或是486。通常“/dev/cpu”选项更高级,多数用户并不需要选择它。需要注意的是不能选择比你的CPU类型还高级的CPU,否则可能不能正常工作。
3.2.High Memory Support.
只有当你的计算机有超过1GB内存时才是必须的。因此“High Memory Support”通常并不使用。
3.3.Math emulation.
这项询问是否需L1nux核心模拟数学浮点运算器。如果有486Dx、AMD以及Pentium机器的话,这个选项就不必选了,因为它们都有内建的浮点运算器。系统默认为N。
3.4.MTTR (memory type range register)support.
这项允许在PCI或者AGP总线众进行更快速的通讯。 由于现在所有系统都将它们的显卡接在PCI或AGP总线上,你通常需要选择“MTRR”:无论如何,打开这个选项通常都是安全的——即使你的机器没有使用PCI或AGP总线的显卡
3.5.Symmetric multi-processing support.
同步处理器支持该选项保证内核能够以最佳方式加载多处理器。假如被编译的计算机上有多个CPU。一般用户选择N。
3.6.Mutiquad NUMA system.
通常也需要多处理器,但它通常是关闭的。
4.General setup:常规内核选项。
4.1. Networking support.
Linux网络支持,建议选上,否则可能导致内核无法编译。
4.2. PCI support.
现在的所有系统都使用PCI总线,系统默认为Y。
4.3. PCI access mode.
PCI存取模式。可供选择的有BIOS、Direct和Any,选Any吧。
4.4. Support for hot-pluggabel devices.
热插拔设备支持。支持的不是太好,可不选。
4.5. PCMCIA/CardBus support------>PCMCIA/CardBus support.
有PCMCIA就必选了。\n4.6. System V IPC.
如果将来想编译dosemu(DOS模拟器),它是一个让各个程序(process)同步且能彼此交换数据的函数库和一些系统的调用,建议选择Y。
4.7. BSD Process Accounting.
4.8. Sysctl support.
除非你的内存少的可怜,否则你应该启动这个功能,启用该选项后内核会大8K,但能让你直接改变内核的参数而不必重新开机。以上三项是有关进程处理/IPC调用的,主要就是System V和BSD两种风格。如果你不是使用BSD,就按照缺省吧。
4.9. Kernel core (/proc/kcore/) format.
现在的Linux发行版以ELF格式作为它们的“内核核心格式”。
4.10. Kernel support for A.OUT binaries.
a.out的执行文件是比较古老的可执行码,用在比较早期的UNIX系统上。Linux最初也是使用这种码来执行程序,一直到ELF格式的可执行码出来后,有愈来俞多的程序码随着ELF格式的优点而变成了ELF的可执码。将来势必完全取代a.out格式的可执行码。但目前由于沿有许多的程序还没有取代过来,所以只好选择Y,等将来有一天,全部的程序都变成了ELF的天下时,那时再disable掉。
4.11. Power Management support.
电源管理支持。
4.12. Advanced Power Management BIOS support.
高级电源管理BIOS支持。这通常是用在笔记本电脑上的东西,如果您有APM的BIOS,支持省电的设备的(有电池的那种),那么您可以选上这项,一般人这一项是选n,以避免一些可能会发生的问题。后有8个选项。ATX主板需要这两个选项来自动关闭计算机(turn off the computer,包括关闭电源)。
5.Memory Technology Devices (MTD):配置存储设备。
5.1. Memory Technology Devices (MTD) support.
你需要这个选项来使Linux可以读取闪存卡(Flash Card)之类的存储器。 闪存卡通常用于数码相机。 通过这个选项,Linux可以读取闪存卡(从特殊的设备中,比如读卡机),并且将图片保存为.jpg格式。除非你确定你需要它,否则不必打开它:如果你发现自己需要,你可以在以后加上。
6.Parallel port support:配置并口。
6.1. Parallel port support.
如果不打算使用,就别选了。

7.Plug and Play configuration:即插即用支持。
7.1. Plug and Playsupport.
几乎所有人都有即插即用设备,因此需要这个选项的支持。 打开这个选项使内核能够自动配置即插即用设备并且使它们在系统中能够使用。 有时需要在BIOS中打开“Plug & Play OS”,否则Linux(当然Windows也一样)无法配置即插即用设备。
7.2. ISA Plug & Play support.
选项需要以即插即用模式运行的ISA卡(ISA Card)。 例如AWE64声卡。假如有这个设备的话可以选择Y。
8.Block devices:块设备支持。
8.1. Normal PC floppy disk support.
普通PC软盘支持。大部分人都要使用软盘(floppy),所以这个选项要选择Y

8.2. XT hard disk support.
支持XT的古董硬盘,这是IBM电脑时代的东西,如果您还有这种很旧很旧的硬盘。那么,您可以把它编进核心或是编成一个模块。大部分的人这个选项都是选择N的。
8.3. Loopback device support.
这个选项的意思是说,可以将一个文件挂成一个文件系统。如果要烧光盘片的,那么您很有可能在把一个文件烧进去之前,看看这个文件是否符合IS09660的文件系统的内容,是否符合您的需求。而且,可以对这个文件系统加以保护。不过,如果您想做到这点的话,您必须有最新的mount程序,版本是在2.5X版以上的。而且如果您希望对这个文件系统加上保护,则您必须有des.1.tar.gz这个程序。
9.Multiple devices driver support:多设备驱动支持。
9.1. Multiple devices driver support.
普通Linux用户通常不需要RAID(廉价冗余磁盘阵列)或者LVM支持。 普通用户选择Y。

10.Networking options:网络选项。
10.1. Packet Socket.
选择“Y”,你需要这个选项来与网卡进行通信而不需要在内核中实现网络协议。 在这里我可以简捷一些:一般情况下,打开这个选项。 大多数选项是关闭的,除非你需要特殊的支持。
10.2. TCP/IP networking.
选择“Y”,内核将支持TCP/IP协议。建议用户选择Y。
10.3. IP:multicasting.
所谓的multicasting是群组广播,它是用在视频会议上的协议,如果想送一个网络封包(网络的数据),同样的一份数据将送往十部机器上。您可以连续送十次给十台机器(点对点的传送),也可以同时送一次,然后让十台机器同时接收到。当然后者比前者好,由于视频会议要求是最好每个人都能同时收到同一份信息,所以如果您有类似的需要,这个选项就要打开。同时您还必须去找相关的软件。

11.Telephony Support:电话支持。
11.1.Linux Telephony Support.
这个选项只有当你在计算机中使用电话卡的时候才有用,比如在Internet上打电话。 大多数普通用户没有电话卡,因此不需要这个选项。
12.ATA/IDE/MFM/RLL support:配置对ATA,IDE,MFM和RLL的支持。
12.1. ATA/IDE/MFM/RLL support.
几乎每个人都需要这些协议,除非你的机器只有SCSI硬盘而没有其他任何类型的硬盘。 因此,大多数用户都应该把它打开。 点击它下面的那一栏将会出现一个有更详细配置选项的菜单。仔细填写它们:它们极为重要!
12.2.Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support.
选项是每个使用IDE/ATAPI界面的人都需要的。 包括硬盘,磁带机,ZIP盘,光驱(CDROM)和刻录机(CD-R(W))。 基本上现在的所有计算机(译者注:这里指的是PC)都使用IDE/ATAPI界面,因此这个选项必须打开。
12.3. Include IDE/ATA-2 DISK support.
选项在支持硬盘的时候需要。 因此这个选项也必须打开,除非你的机器是一个纯粹的SCSI系统。
其它的就使用缺省的选项吧,如果你使用了比较特殊的设备,比如PCMCIA等,就到里面找相应的选项吧。

13.SCSI support:SCSI设备的支持。
13.1. SCSI support.
如果你有一块SCSI卡,你当然需要打开相关选项。这张截图只显示了当你为你的CD-R(W)选择“SCSI emulation support” 13.2. SCSI disk support.
指硬盘而言,如果有SCSI硬盘,那么就要选这个选项。
13.3. SCSI tape support.
指磁带机而言,如果您有SCSI的磁带机,那么就要选这个选项。
13.4. SCSI CDROM support.
指CDROM,如果您有SCSI光驱,这一项一定要选。
13.5. SCSI generic support.
指其他有关SCSI的东西,也许您有一台SCSI的扫描器或是烧录机,或是其他有关SCSI的配备,您就要选这一项。而且,除此之外,您还必须准备关于这些配备的软件。
13.6. Probe a11 LUNs on each SCSI device.
通常这个选项大部分的人都不会选。我们举个例子来说,如果您的SCSI光驱是那种多片装的,就是一台光驱,但可以一次放好几片光盘片的那种。这种我们叫做Lun。I2O Device Support:配置I2O设备支持。
13.7. Verbose SCSI error reporting(kernel size+=12K).
如果认为您的SCSI硬件配备有些问题,想了解一下它出现的错误信息。那么您可以把这个选项选y,Linux核心会告诉您有关于您的SCSI配备的问题(如果有的话)。不过,它会增加核心约 12KB左右。
13.8. SCSI low—level drivers.
下面总共有接近30张的SCSI卡,您可以依需求做选择SCSI卡牌子。
14.I2O Device Support:I20设备支持。
14.1. I2O Device Support.
如果你有I2O界面,你必须选择这个选项。大多数人没有,如果你也没有的话,可以直接将它关闭。\n15.Network Device Support:网络设备支持。\n15.1. Network Device Support.
网络设备支持。上面选好协议了,现在该选设备了,可想而知,内容肯定多得很。还好还好,里面大概分类了,有ARCnet设备、Ethernet(10 or 100 Mbit)、Ethernet(1000Mbit)、Wireless LAN(non-hamradio)、Token Ring device、Wan interfaces、PCMCIA network device support几大类。我用的是10/100M的以太网,看来只需要选则这个了。还是10/100M的以太网设备熟悉,内容虽然多,一眼就可以看到我所用的RealTeck RTL-8139 PCI Fast Ethernet Adapter support,为了免得麻烦,编译到内核里面好了,不选M了,选Y。耐心点,一般说来你都能找到自己用的网卡。如果没有,你只好自己到厂商那里去要驱动了。
15.2. Dummy net driver support.
如果有SLIP或PPP的传输协议,那么要把这一项打开。
15.3. PPP(point-to-point)support.
点对点协议。
15.4. SLIP(serial line) support.
这是MODEM族常用的一种通讯协议,必须通过一台Server(叫ISP)获取一个IP地址,然后利用这个IP地址,可以模拟以太网络,使用有关TCP/IP的程序。\n15.5.1. Ethernet(10 or 100Mbit).
如果您使用网络卡,那么这个选项一定要选y,否则以下对网络卡的选择将不会出现。或是您有网络卡,这时您同样的也要选y。像我们平常用的都是NE2000相容卡。\n15.5.2. EISA, VLB, PCI and on board controllers.
选择网络卡,包括直接附在主机板上的那种。如果选择y,则底下会列出其他的网络卡让您做选择,这些卡对于一般人来说很少会去用到。所以大部分的人这项是选N的。\n15.5.3. Pocket and portable adaptors.
通常用在可携式的电脑上,这类型的网络卡(口袋型的),由于体积很小在安装和取下方面很方便,因此笔记本相关电脑上便常常采用这种网络卡。
15.5.4. Token Ring driver support.
Token Ring是 IBM电脑上的网络。它叫令牌环网络,和以太网络是很类似的东西。如果您希望使用的Token Ring网络卡以便连接到这种网络,那么选Y,一般人都选N。 15.5.5. ARCnet support.
这也是一种网络卡,通常一般人用不到,所以选n。
16.Amateur Radio support:配置业余广播支持。
16.1. Amateur Radio support.
如果你希望使用业余广播支持,应该打开这个选项,并且打开相应的驱动。 多数人不需要这个选项。

17.IrDA(infrared)support:配置红外线(无线)通讯支持。
17.1. IrDA(infrared)support.
如果你有无线设备,比如无线鼠标或无线键盘,你应该打开这个选项。 多数桌面机器不需要这个选项。

18.ISDN subsystem:配置ISDN。
18.1. ISDN support.
如果使用ISDN上网,这个就必不可少了。
19.Old CD-ROM drivers(not SCSI、not IDE):配置老CDROM。
在486和386机器中,CDROM并不是通过硬盘IDE(ATAPI)控制器连接的,而是通过声卡或一块特殊的板卡。 使用这些老CDROM需要选择对应的驱动。这个选项在现在的系统中显得多余。

20.Input Core Support:
这个选项提供了2.4.x内核中最重要的特性之一的USB支持。 Input core support是处于内核与一些USB设备之间的层(Layer)。如果你拥有其中一种USB设备,你必须打开“input core support”选项。 现在所有的主板都有USB接口,所以,原则上你应该打开它。

21.Character devices:字符设备。
21.1. Virtual terminal.
选择“y”,内核将支持虚拟终端。
21.2. Support for console on virtual terminal.
选择“y”,内核可将一个虚拟终端用作系统控制台。
21.3. Standard/generic (dumb) serial support.
选择“y”,内核将支持串行口。标准序列接口的选定。如果您是用serial的鼠标(大部分的人都是用这个),或是MODEM的话,则这一项一定要选。大部分的人这一项都选y。
21.4. Support for console on serial port.
选择“y”,内核可将一个串行口用作系统控制台。
21.5. I2C support.
I2C是Philips极力推动的微控制应用中使用的低速串行总线协议。如果你要选择下面的Video For Linux,该项必选。
21.6. Mice.
鼠标。现在可以支持总线、串口、PS/2、C&T 82C710 mouse port、PC110 digitizer pad------根据需要选择。
21.6.1. PS/2 mouse (aka "auxiliary device") support.
如果用户使用的是PS/2鼠标,则该选项应该选择“y”。\n21.7. Joysticks.
手柄。即使在Linux下把手柄驱动起来意义也不是太大,游戏太少了。\n21.8. Watchdog Cards.
虽然称为Cards,这个可以用纯软件来实现,当然也有硬件的。如果你把这个选中,那么就会在你的/dev下创建一个名为watchdog的文件,它可以记录你的系统的运行情况,一直到系统重新启动的1分钟左右。有了这个文件,你就可以恢复系统到重启前的状态了。\n24.Console drivers:配置控制台驱动。
24.1. VGA text console.
选项在VGA模式下启动字符模式。 多数人都需要它,因此这个玄学爱你跟通常是开着的。 只有一些386计算机没有VGA兼容显卡,选择这个选项对于现在的多数计算机来说都没有问题。
24.2. video mode selection support.
使启动的时候能够使用字符模式的分辨率。 如果你希望一行能够有更多的字的话,这通常会给你提供方便,不过通常你不必打开它们。 下面两个选项是试验性质的,我建议你关闭它们。
25.Sound sound:声卡驱动。
在这部分,你可以配置声卡。如果你的发行版使用的是内核的标准声卡驱动,你必须正确选择你使用的声卡。
26.USB support:配置USB支持。
27.kernel hacking:配置“kernel hacking”选项.这很简单:不要打开!

make dep
make bzImage(I要大写的)
make clean
make modules
make modules_install //生成了/lib/modules/2.4.22

depmod –a 检查内核中有没有未解析的symbol,它是生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块。假如输入这个命令后你看不到没有任何返回信息的话,那说明你在编译过程是已经成功了。
把bzImage拷贝到boot
cp /usr/src/linux/arch/i386/bzImage /boot

在/boot下生成 initrd img文件:\ncd /boot
mkinitrd initrd-2.4.22.img 2.4.22

然后配置grub.conf文件

default=0

timeout=10

splashimage=(hd0,6)/grub/splash.xpm.gz

password #$%$43&*fsklfs4$

title Red Hat Linux Adance sever 2.1 (2.4.9-e3)

root (hd0,6)

kernel /vmlinuz-2.4.9-e3 ro root=/dev/hda8
initrd /initrd-2.4.9-e3
title DOS
rootnoverify (hd0,0)

//红色部分是我添加的内容\n
title Red Hat Linux Adance sever 2.1 (2.4.22)
root (hd0,6)
kernel /vmlinuz-2.4.22 ro root=/dev/hda8
initrd /initrd-2.4.22.img
chainloader +1

重2.6开始,多了make install命令,可以减少make dep,make clean等很多步骤。具体参考。

 其实现在编译内核最关键的地方就是配置内核。我一般用make menuconfig配置内核。\n配置2.6.0内核时如果你的主板是Intel芯片的话,你用默认配制也许就可以得到一个满意的内核哦。做法是make menuconfig后离开时选择保存。\n   这里的难点是pci,如果你硬盘是IDE的那一定要选择好你主板上南桥芯片。SCSI的话就是要选择上你的SCSI卡型号。\n  还有就是网卡,声卡芯片的型号了,他们的型号你都可以用lspci 查找到比如我的是。\n

sh-2.05a# /sbin/lspci
00:00.0 Host bridge: ServerWorks CNB20LE Host Bridge (rev 05)
00:00.1 Host bridge: ServerWorks CNB20LE Host Bridge (rev 05)
00:02.0 PCI bridge: Intel Corp. 80960RP [i960 RP Microprocessor/Bridge] (rev 01)
00:02.1 I2O: Intel Corp. 80960RP [i960RP Microprocessor] (rev 01)
00:04.0 Ethernet controller: 3Com Corporation 3c985 1000BaseSX (SX/TX) (rev 01)
00:08.0 PCI bridge: Digital Equipment Corporation DECchip 21152 (rev 03)
00:0e.0 VGA compatible controller: ATI Technologies Inc 3D Rage IIC (rev 7a)
00:0f.0 ISA bridge: ServerWorks OSB4 South Bridge (rev 4f)
00:0f.1 IDE interface: ServerWorks OSB4 IDE Controller
02:04.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 05)
02:05.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 05)
03:02.0 PCI bridge: Intel Corp. 80960RM [i960RM Bridge] (rev 01)
03:08.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 08)

  你只要把你pci上的东西全部选择对了。 剩下就用默认的就可以了\n
  配制内核完毕后make install 还要说一句make install也是最近的从2.5.69内核(按照内核发布时间算)开始才有的选项他可以帮你完成很多东西。方便大大的 。\n  2.4.21你可以用make install

  现在这些步骤就是没有make install时要做的

#make dep (确保关键文件在正确的位置) 2.5.*-2.6.0都不需要了。其实2.4.*某些内核也不需要了。\n
  #make clean (确保所有有关文件都处于最新版本状态)

  #make zImage (编译压缩形式的内核)

  在需要内核支持较多的外设和功能时,内核可能变得很大,此时可以编译大内核:

  #make bzImage

  编译的时间与机器的硬件条件及内核的配置等因素有关,以笔者的64MB内存的赛扬300为例,编译内核一次大致需要20多分钟。所获得的内核的位置在/usr/src/linux/arch/i386/boot目录下,当然这里假设用户的CPU是x86型的。\n
  如果选择了可加载模块,编译完内核后,要对选择的模块进行编译:

  #make module (编译选择的模块)

  #make module-install (将编译后的模块转移到系统标准位置)

  模块在系统中的标准目录位于/lib/modules/x.y.z,后面的x.y.z是版本号,为安全起见,在运行#make modules-install之前最好对/lib/modules进行备份。模块通常是带有扩展名.o的文件,使用命令#lsmod可以对当前内核的模块进行列表。\n
  我一般是 make dep ;make bzImage;make module ;make module-install

cp /usr/src/linux2.6.0-test2/arch/i386/boot/bzImage /boot/vmlinuz-2.6.0-test2

cp /usr/src/linux-2.6.0-test2/System.map /boot/System.map-2.6.0-test2

  这些make install都可以办到的

  剩下就是修改 /etc/lilo.conf

vi /etc/lilo.conf

  添加新内核。有时make install连这个都给你修改好了。\n  下面是我的lilo.conf
prompt
timeout=50
default=linux
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
message=/boot/message
linear

image=/boot/vmlinuz-2.4.18-3smp
label=linux
initrd=/boot/initrd-2.4.18-3smp.img
read-only
root=/dev/sda6

image=/boot/vmlinuz-2.6.0-test2
label=linux-2.6.0-test2
initrd=/boot/initrd-2.6.0-test2.img
read-only
root=/dev/sda6

  再运行\nsh-2.05a# lilo
  重新生成lilo