Linux 的简短历史

Linux 还是 GNU/Linux?

您可能已经注意到 Linux 作为一个操作系统来说,有时会称为 “Linux”,有时却称为 “GNU/Linux”。这背后的原因在于 Linux 实际上是操作系统的内核。使这个操作系统变得非常有用的大量应用程序是 GNU 软件。例如,窗口系统、编译器、各种 shell、开发工具、编辑器、实用工具以及内核之外的其他应用程序,其中很多都是 GNU 软件。由于这个原因,很多人都认为 “GNU/Linux” 更适合作为操作系统的名字,而 “Linux” 则适合作为内核的名字。
尽管 Linux 绝对是最流行的开源操作系统,但是相对于其他操作系统的漫长历史来说,Linux 的历史非常短暂。在计算机出现早期,程序员是使用硬件语言在裸硬件上进行开发的。缺少操作系统就意味着在某个时间只有一个应用程序(和一个用户)可以使用这些庞大而又昂贵的设备。早期的操作系统是在 20 世纪 50 年代开发的,用来提供简单的开发体验。包括为 IBM 701 开发的 General Motors Operating System(GMOS)和 North American Aviation 为 IBM 709 开发的 FORTRAN Monitor System(FMS)。
在 20 世纪 60 年代,MIT(Massachusetts Institute of Technology)和一些公司为 GE-645 开发了一个名为 Multics(Multiplexed Information and Computing Service)的实验性的操作系统。这个操作系统的开发者之一 AT&T 后来退出了 Multics,并在 1970 年开发了自己的名为 Unics 的操作系统。与这个操作系统一同诞生的是 C 语言,C 语言就是为此而开发的,然后它们使用 C 语言对操作系统进行了重写,使操作系统开发具有可移植性。
二十年后,Andrew Tanenbaum 创建了一个微内核版本的 UNIX®,名为 MINIX(代表 minimal UNIX),它可以在小型的个人计算机上运行。这个开源操作系统在 20 世纪 90 年代激发了 Linus Torvalds 开发 Linux 的灵感(请参看图 1 所示)。
图 1. 主要 Linux 内核发行版简史


Linux 快速从一个个人项目进化成为一个全球数千人参与的开发项目。对于 Linux 来说,最为重要的决策之一是采用 GPL(GNU General Public License)。在 GPL 保护之下,Linux 内核可以防止商业使用,并且它还从 GNU 项目(Richard Stallman 开发,其源代码要比 Linux 内核大得多)的用户空间开发受益。这允许使用一些非常有用的应用程序,例如 GCC(GNU Compiler Collection)和各种 shell 支持。




Linux 内核简介
现在让我们从一个比较高的高度来审视一下 GNU/Linux 操作系统的体系结构。您可以从两个层次上来考虑操作系统,如图 2 所示。
图 2. GNU/Linux 操作系统的基本体系结构



系统调用接口(SCI)的方法
实际上,体系结构可能并不像图 2 所示的一样清晰。例如,处理系统调用(从用户空间切换到内核空间)的机制可能在各个体系结构上都不相同。提供了对虚拟化指令支持的新型 x86 中央处理单元(CPU)在这方面要比使用传统 int 80h 方法的老式 x86 处理器更加高效。
最上面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux 内核正是位于这里。
GNU C Library (glibc)也在这里。它提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制。这点非常重要,因为内核和用户空间的应用程序使用的是不同的保护地址空间。每个用户空间的进程都使用自己的虚拟地址空间,而内核则占用单独的地址空间。 更多信息,请参看
参考资料
一节中的链接。
Linux 内核可以进一步划分成 3 层。最上面是系统调用接口,它实现了一些基本的功能,例如 read 和 write。系统调用接口之下是内核代码,可以更精确地定义为独立于体系结构的内核代码。这些代码是 Linux 所支持的所有处理器体系结构所通用的。在这些代码之下是依赖于体系结构的代码,构成了通常称为 BSP(Board Support Package)的部分。这些代码用作给定体系结构的处理器和特定于平台的代码。




Linux 内核的属性
在讨论大型而复杂的系统的体系结构时,可以从很多角度来审视系统。体系结构分析的一个目标是提供一种方法更好地理解源代码,这正是本文的目的。
Linux 内核实现了很多重要的体系结构属性。在或高或低的层次上,内核被划分为多个子系统。Linux 也可以看作是一个整体,因为它会将所有这些基本服务都集成到内核中。这与微内核的体系结构不同,后者会提供一些基本的服务,例如通信、I/O、内存和进程管理,更具体的服务都是插入到微内核层中的。每种内核都有自己的优点,不过这里并不对此进行讨论。
随着时间的流逝,Linux 内核在内存和 CPU 使用方面具有较高的效率,并且非常稳定。但是对于 Linux 来说,最为有趣的是在这种大小和复杂性的前提下,依然具有良好的可移植性。Linux 编译后可在大量处理器和具有不同体系结构约束和需求的平台上运行。一个例子是 Linux 可以在一个具有内存管理单元(MMU)的处理器上运行,也可以在那些不提供 MMU 的处理器上运行。Linux 内核的 uClinux 移植提供了对非 MMU 的支持。更详细信息请参看
参考资料
一节的内容。




Linux 内核的主要子系统
现在使用图 3 中的分类说明 Linux 内核的主要组件。
图 3. Linux 内核的一个体系结构透视图


系统调用接口
SCI 层提供了某些机制执行从用户空间到内核的函数调用。正如前面讨论的一样,这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。有关这个组件的更详细信息可以在
参考资料
一节中找到。
进程管理



内核是什么?

图 3
所示,内核实际上仅仅是一个资源管理器。不管被管理的资源是进程、内存还是硬件设备,内核负责管理并裁定多个竞争用户对资源的访问(既包括内核空间也包括用户空间)。
进程管理的重点是进程的执行。在内核中,这些进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和 CPU 寄存器)。在用户空间,通常使用进程 这个术语,不过 Linux 实现并没有区分这两个概念(进程和线程)。内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface [POSIX] 函数),停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSIX 机制)。
进程管理还包括处理活动进程之间共享 CPU 的需求。内核实现了一种新型的调度算法,不管有多少个线程在竞争 CPU,这种算法都可以在固定时间内进行操作。这种算法就称为 O(1) 调度程序,这个名字就表示它调度多个线程所使用的时间和调度一个线程所使用的时间是相同的。 O(1) 调度程序也可以支持多处理器(称为对称多处理器或 SMP)。您可以在 ./linux/kernel 中找到进程管理的源代码,在 ./linux/arch 中可以找到依赖于体系结构的源代码。在
参考资料
一节中可以了解有关这个算法的更多内容。
内存管理
内核所管理的另外一个重要资源是内存。为了提高效率,如果由硬件管理虚拟内存,内存是按照所谓的内存页 方式进行管理的(对于大部分体系结构来说都是 4KB)。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。
不过内存管理要管理的可不止 4KB 缓冲区。Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。
为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。由于这个原因,页面可以移出内存并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。内存管理的源代码可以在 ./linux/mm 中找到。
虚拟文件系统
虚拟文件系统(VFS)是 Linux 内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。VFS 在 SCI 和内核所支持的文件系统之间提供了一个交换层(请参看图 4)。
图 4. VFS 在用户和文件系统之间提供了一个交换层


在 VFS 上面,是对诸如 open、close、read 和 write 之类的函数的一个通用 API 抽象。在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。它们是给定文件系统(超过 50 个)的插件。文件系统的源代码可以在 ./linux/fs 中找到。
文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。
网络堆栈
网络堆栈在设计上遵循模拟协议本身的分层体系结构。回想一下,Internet Protocol (IP) 是传输协议(通常称为传输控制协议或 TCP)下面的核心网络层协议。TCP 上面是 socket 层,它是通过 SCI 进行调用的。
socket 层是网络子系统的标准 API,它为各种网络协议提供了一个用户接口。从原始帧访问到 IP 协议数据单元(PDU),再到 TCP 和 User Datagram Protocol (UDP),socket 层提供了一种标准化的方法来管理连接,并在各个终点之间移动数据。内核中网络源代码可以在 ./linux/net 中找到。
设备驱动程序
Linux 内核中有大量代码都在设备驱动程序中,它们能够运转特定的硬件设备。Linux 源码树提供了一个驱动程序子目录,这个目录又进一步划分为各种支持设备,例如 Bluetooth、I2C、serial 等。设备驱动程序的代码可以在 ./linux/drivers 中找到。
依赖体系结构的代码
尽管 Linux 很大程度上独立于所运行的体系结构,但是有些元素则必须考虑体系结构才能正常操作并实现更高效率。./linux/arch 子目录定义了内核源代码中依赖于体系结构的部分,其中包含了各种特定于体系结构的子目录(共同组成了 BSP)。对于一个典型的桌面系统来说,使用的是 i386 目录。每个体系结构子目录都包含了很多其他子目录,每个子目录都关注内核中的一个特定方面,例如引导、内核、内存管理等。这些依赖体系结构的代码可以在 ./linux/arch 中找到。




Linux 内核的一些有用特性
如果 Linux 内核的可移植性和效率还不够好,Linux 还提供了其他一些特性,它们无法划分到上面的分类中。
作为一个生产操作系统和开源软件,Linux 是测试新协议及其增强的良好平台。Linux 支持大量网络协议,包括典型的 TCP/IP,以及高速网络的扩展(大于 1 Gigabit Ethernet [GbE] 和 10 GbE)。Linux 也可以支持诸如流控制传输协议(SCTP)之类的协议,它提供了很多比 TCP 更高级的特性(是传输层协议的接替者)。
Linux 还是一个动态内核,支持动态添加或删除软件组件。被称为动态可加载内核模块,它们可以在引导时根据需要(当前特定设备需要这个模块)或在任何时候由用户插入。
Linux 最新的一个增强是可以用作其他操作系统的操作系统(称为系统管理程序)。最近,对内核进行了修改,称为基于内核的虚拟机(KVM)。这个修改为用户空间启用了一个新的接口,它可以允许其他操作系统在启用了 KVM 的内核之上运行。除了运行 Linux 的其他实例之外, Microsoft® Windows® 也可以进行虚拟化。惟一的限制是底层处理器必须支持新的虚拟化指令。更多信息请参看
~~~~~~~~~~~~~~~
1)安装module-init-tools-3.0.tar.gz:
    # tar -zxvf module-init-tools-3.0.tar.gz
  # cd module-init-tools-3.0
  # ./configure --prefix=/sbin
  # make
  # make install
  # ./generate-modprobe.conf /etc/modprobe.conf
  不知道为什么,我用module-init-tools-3.1时make出错。如果改用3.0的就没事了。
  (2)安装modutils-2.4.25-8.9.i386.rpm:
  # rpm -Uvih modutils-2.4.25-8.9.i386.rpm
  对modutils进行升级。
  (3)安装新内核:
  将新内核copy到/usr/src下,
  #tar xzvf linux-2.6.11.tar.gz -----解压缩.
  II. 将名为linux的符号链接删掉,这时旧版本内核的符号链接.
  #ln -s linux-2.6.11 linux ------建立linux-2.6.11的符号链接linux.
  设置内核.
  # cd /usr/src/linux
  # make mrproper -----删除不必要的文件和目录.
  #make config(基于文本的最为传统的配置界面,不推荐使用)
  #make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)
  #make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)
  #make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)
  它们的目的是一样的,那就是生成一个.config文件
  这三个命令中,make xconfig的界面最为友好,如果你可以使用Xwindow,你就用这个好了,这个比较方便,也好设置。如果你不能使用Xwindow,那么就使用make menuconfig好了。界面虽然比上面一个差点,总比make config的要好多了。
选择相应的配置时,有三种选择,它们分别代表的含义如下:
    Y--将该功能编译进内核
    N--不将该功能编译进内核
    M--将该功能编译成可以在需要时动态插入到内核中的模块
face=Verdana>  如果使用的是make xconfig,使用鼠标就可以选择对应的选项。如果使用的是 make menuconfig,则需要使用空格键进行选取。你会发现在每一个选项前都有个括号, 但有的是中括号有的是尖括号,还有一种圆括号。用空格键选择时可以发现,中括号里要么是空,要么是"*",而尖括号里可以是空,"*"和"M"。这表示前者对应的项要么不要,要么编译到内核里;后者则多一样选择,可以编译成模块。而圆括号的内容是要你在所提供的几个选项中选择一项。
 
 
make mrproper
make menuconfig
make dep
make bzImage
make modules
make modules_install
make install

 
 
 

附内核配置选项说明(这是我在网上找到的,还可以,有些也是不一样的,给你一个参考)
  代码成熟度选项:
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
[*] Select only drivers expected to compile cleanly
  打开使用开发中、不完全的代码/驱动会让内核配置多出很多选项,由于我们需要使用一些正在开发中的功能,因此必需打开这一选项。
通用设置选项,
General setup --->
() Local version - append to kernel release
这里填入的是64字符以内的字符串,你在这里填上的字符口串可以用uname -a命令看到。
[*] Support for paging of anonymous memory (swap)
这是使用交换分区或者交换文件来做为虚拟内存的,当然要选上了。
[*] System V IPC
表示系统5的Inter Process Communication,它用于处理器在程序之间同步和交换信息,如果不选这项,很多程序运行不起来
[*] POSIX Message Queues
这是POSIX的消息队列,它同样是一种IPC。建议你最好将它选上
[*] BSD Process Accounting
这是充许用户进程访问内核将账户信息写入文件中的。这通常被认为是个好主意,建议你最好将它选上。
[*] BSD Process Accounting version 3 file format
[*] Sysctl support
这个选项能不重新编译内核修改内核的某些参数和变量,如果你也选择了支持/proc,将能从/proc/sys存取可以影响内核的参数或变量。建议你最好将它选上
[ ] Auditing support
审记支持,用于和内核的某些子模块同时工作,例如SELinux。只有选择此项及它的子项,才能调用有关审记的系统调用
(15) Kernel log buffer size (16 => 64KB, 17 => 128KB)
内核日志缓存的大小,12 => 4 KB,13 => 8 KB,14 => 16 KB单处理器,15 => 32 KB多处理器,16 => 64 KB for x86 NUMAQ or IA-64,17 => 128 KB for S/390
[*] Support for hot-pluggable devices
是否支持热插拔的选项,肯定要选上
[*] Kernel Userspace Events
内核中分为系统区和用户区,这里系统区和用户区进行通讯的一种方式,选上。
[*] Kernel .config support
将.config配置信息保存在内核中,选上它及它的子项使得其它用户能从/proc中得到内核的配置
[*] Enable access to .config through /proc/config.gz
[ ] Configure standard kernel features (for small systems) --->
这是为了编译某些特殊的内核使用的,通常你可以不选择这一选项,你也不用对它下面的子项操心了。
--- Configure standard kernel features (for small systems)
[ ] Load all symbols for debugging/kksymoops
是否装载所有的调试符号表信息,如果你不需要对内核调试,不需要选择此项。
[*] Enable futex support
不选这个内核不一定能正确的运行使用glibc的程序,当然要选上
[*] Enable eventpoll support
不选这个内核将不支持事件轮循的系统调用,最好选上
[*] Optimize for size
这个选项使gcc使用-Os的参数而不是-O2的参数来优化编译,以获得更小尺寸的内核,建议选上。
[*] Use full shmem filesystem
除非你在很少的内存且不使用交换内存时,才不要选择这项
(0) Function alignment
(0) Label alignment
(0) Loop alignment
(0) Jump alignment
可加载模块:
Loadable module support --->
[*] Enable loadable module support
[*] Module unloading
不选这个功能,加载的模块就不能卸载
[ ] Forced module unloading
[ ] Module versioning support (EXPERIMENTAL)
[ ] Source checksum for all modules
[*] Automatic kernel module loading
处理器类型及特性:
Processor type and features --->
Subarchitecture Type (PC-compatible) --->
Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon) --->
[ ] Generic x86 support
这一选项针对x86系列的CPU使用更多的常规优化。如果你在上面一项选的是i386、i586之类的才选这个
[*] HPET Timer Support
HPET是替代8254芯片的下一代时钟处理器。这里你可以安全的选上这一选项。如果硬件不支持的话,将仍使用8254时钟处理器
[*] Symmetric multi-processing support
对称多处理器支持,在单CPU的机器上,不选这个选项会更快一些。由于超线程技术,看起来是两颗CPU,因些要选上这个选项
(1) Maximum number of CPUs (2-255) 支持的最大CPU数
[ ] SMT (Hyperthreading) scheduler support
[*] Preemptible Kernel
这个选项能使应用程序即使内核在高负载时也很可靠,建议最好选上
[*] Machine Check Exception
这个选项能让CPU检测到系统故障时通知内核,一般我用组装的台式机会选这项。
< > Toshiba Laptop support
< > Dell laptop support
< > /dev/cpu/microcode - Intel IA32 CPU microcode support
< > /dev/cpu/*/msr - Model-specific register support
< > /dev/cpu/*/cpuid - CPU information support
Firmware Drivers --->
< > BIOS Enhanced Disk Drive calls determine boot disk (EXPERIMENTAL)
High Memory Support (4GB) --->
[ ] Allocate 3rd-level pagetables from highmem
[ ] Math emulation
[*] MTRR (Memory Type Range Register) support
[ ] Boot from EFI support (EXPERIMENTAL)
[*] Enable kernel irq balancing
[ ] Use register arguments (EXPERIMENTAL)
电源管理:
Power management options (ACPI, APM) --->
[*] Power Management support
[ ] Power Management Debug Support
[ ] Software Suspend (EXPERIMENTAL)
ACPI (Advanced Configuration and Power Interface) Support --->
APM (Advanced Power Management) BIOS Support --->
CPU Frequency scaling --->
ACPI (Advanced Configuration and Power Interface) Support --->
[*] ACPI Support
这是一种电源管理方式,你可以看看你的BIOS是否支持。如果支持的话建议你选上这项
[ ] Sleep States (EXPERIMENTAL)
< > AC Adapter
< > Battery
<*> Button 捕获Power、Sleep、Lid(我也不知道这是什么按钮)等按钮是否按下,并做相应的动作
<*> Video 集成在板上的显卡的ACPI支持,对有些板卡可能不起作用
< > Fan
<*> Processor
<*> Thermal Zone
< > ASUS/Medion Laptop Extras
< > IBM ThinkPad Laptop Extras
< > Toshiba Laptop Extras
(0) Disable ACPI for systems before Jan 1st this year
[ ] Debug Statements
[*] Power Management Timer Support
APM (Advanced Power Management) BIOS Support --->
< > APM (Advanced Power Management) BIOS support
高级电源管理的支持,一般来说笔记本应该选上,台式机可以不选。
[ ] Ignore USER SUSPEND
[*] Enable PM at boot time
[ ] Make CPU Idle calls when idle
[ ] Enable console blanking using APM
[ ] RTC stores time in GMT 按Unix的标准,硬件的时钟应该设为格林威治时间
[ ] Allow interrupts during APM BIOS calls
[*] Use real mode APM BIOS call to power off
[*] CPU Frequency scaling
这一选项允许改变CPU的主频,使CPU在低负荷或使用电池时降低主频,达到省电的目的。
[ ] Enable CPUfreq debugging
< > /proc/cpufreq interface (deprecated)
Default CPUFreq governor (performance) --->
--- 'performance' governor
<*> 'powersave' governor
<*> 'userspace' governor for userspace frequency scaling
[ ] /proc/sys/cpu/ interface (2.4. / OLD)
<*> 'ondemand' cpufreq policy governor自动调节主频
<*> CPU frequency table helpers 多数的CPU需要这一项来调节主频
<*> ACPI Processor P-States driver 报告处理器的状态
< > AMD Mobile K6-2/K6-3 PowerNow!
< > AMD Mobile Athlon/Duron PowerNow!
< > AMD Opteron/Athlon64 PowerNow!
< > Cyrix MediaGX/NatSemi Geode Suspend Modulation
<*> Intel Enhanced SpeedStep Intel的变频技术支持
[ ] Use ACPI tables to decode valid frequency/voltage pairs
--- Built-in tables for Banias CPUs
< > Intel Speedstep on ICH-M chipsets (ioport interface)
< > Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)
< > Intel Pentium 4 clock modulation
< > nVidia nForce2 FSB changing
< > Transmeta LongRun
< > VIA Cyrix III Longhaul
--- shared options
[ ] /proc/acpi/processor/../performance interface (deprecated)
[ ] Relaxed speedstep capability checks
总线类型:
[*] PCI support
PCI access mode (Any) --->强列建议选Any,系统将优先使用MMConfig,然后使用BIOS,最后使用Direct检测PCI设备。
[ ] Message Signaled Interrupts (MSI and MSI-X)
[ ] Legacy /proc/pci interface
[ ] PCI device name database
[ ] ISA support
[*] EISA support
[*] Vesa Local Bus priming
[*] Generic PCI/EISA bridge
[*] EISA virtual root device
[ ] EISA device name database
[ ] MCA support
< > NatSemi SCx200 support
PCCARD (PCMCIA/CardBus) support --->
PCI Hotplug Support --->
PCCARD (PCMCIA/CardBus) support --->一般只有笔记本电脑上才会有PCMCIA插槽,如果你是台式机的话,可以不选这一项,然后跳过这一部份。
PCI Hotplug Support --->
< > Support for PCI Hotplug (EXPERIMENTAL)
一般来讲只有服务器上会有热插拔的设备,如果你使用的是台式机,你可以不选择此项并跳过这一部份。
可执行文件格式,
[*] Kernel support for ELF binaries
ELF是开放平台下最常用的二进制文件,它支持不同的硬件平台
< > Kernel support for a.out and ECOFF binaries
<*> Kernel support for MISC binaries
  此选项允许插入二进制的封装层到内核中,当使用Java、.NET、Python、Lisp等语言编写的程序时非常有用
  硬件设备相当复杂,看得偶头晕,大家针对自己的设备慎重选择(手边最好准备一本汉英字典:)如果想使用adsl,记得网络部分除了TCP/IP协议还得把ppp部分编译进内核,想当初偶就是把这个给忘了,郁闷了许久。
文件系统,
<*> Second extended fs support
[*] Ext2 extended attributes
[*] Ext2 POSIX Access Control Lists
[*] Ext2 Security Labels
<*> Ext3 journalling file system support
[*] Ext3 extended attributes
[*] Ext3 POSIX Access Control Lists
[*] Ext3 Security Labels
[ ] JBD (ext3) debugging support
<*> Reiserfs support
[ ] Enable reiserfs debug mode
[ ] Stats in /proc/fs/reiserfs
[*] ReiserFS extended attributes
[*] ReiserFS POSIX Access Control Lists
[*] ReiserFS Security Labels
JFS filesystem support
[*] JFS POSIX Access Control Lists
[ ] JFS debugging
[ ] JFS statistics
XFS filesystem support
[*] Realtime support (EXPERIMENTAL)
[*] Quota support
[*] Security Label support
[*] POSIX ACL support
< > Minix fs support
< > ROM file system support
[*] Quota support
< > Old quota format support
Quota format v2 support
[*] Dnotify support
< > Kernel automounter support
< > Kernel automounter version 4 support (also supports v3)
CD-ROM/DVD Filesystems --->
DOS/FAT/NT Filesystems --->
Pseudo filesystems --->
Miscellaneous filesystems --->
Network File Systems --->
Partition Types --->
Native Language Support --->
Profiling support --->
Kernel hacking --->
Security options --->
Cryptographic options --->
Library routines --->
  这个东东你要是搞不来就不要搞,默认的也可以的。先学习一下怎么样编译内核,等成功了,有了经验了在改也没有事的!
编译内核:
# cd /usr/src/linux
# make dep -----链接程序代码与函数库.
# make clean -----删除不必要的模块和文件.
# make bzImage -----开始编译系统内核.
# make modules -----开始编译外挂模块.
# make modules_install -----安装编译完成的模块.
25. Kernel hacking
配置了这个,即使在系统崩溃时,你也可以进行一定的工作了。普通用户是用不着这个功能的。
总算配置完了,现在存盘退出,当然你也可以把现在的配置文件保存起来,这样下次再配置的时候就省力气了。编译 在繁杂的配置工作完成以后,下面你就可以自己到杯茶耐心等候了。与编译有关的命令有如下几个:
#make dep 
#make clean 
#make zImage 
#make bzImage 
#make modules 
#make modules_install 
#depmod -a
第一个命令make dep实际上读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要;第二命令make clean完成删除前面步骤留下的文件,以避免出现一些错误;第三个命令make zImage和第四个命令make bzImage实现完全编译内核,二者生成的内核都是使用gzip压缩的,只要使用一个就够了,它们的区别在于使用make bzImage可以生成大一点的内核,比如在编译2.4.0版本的内核时如果使用make zImage命令,那么就会出现system too big的错误提示。建议大家使用make bzImage命令。 后面三个命令只有在你进行配置的过程中,在回答Enable loadable module support (CONFIG_MODULES)时选了"Yes"才是必要的,make modules和make modules_install分别生成相应的模块和把模块拷贝到需要的目录中。 严格说来,第七个命令和编译过程并没有关系,它是生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块。
更新
经过以上的步骤,我们终于得到了新版本的内核。为了能够使用新版本的内核,我们还需要做一些改动:
#cp /usr/src/linux/System.map /boot/System.map-2.4.0test8 
#cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.4.0test8
~~~~~~~~~~~~~~~~~~
http://www.51cto.com/art/200511/10515.htm
~~~~~~~~~~~~~~~~~~

要好常时间的,我洗了一件衣服,抽了N根白沙之后,总算完成了,好激动呀!
# su -
# /sbin/depmod -a -----创建模块的链接.
更换内核:
# cd /boot -----切换到引导分区/boot.
# rm System.map vmlinuz -----删除旧的符号链接.
# mv /usr/src/linux/System.map System.map
# mv /usr/src/linux/arch/i386/boot/bzImage vmlinuz
如果你用GRUB来管理开机,简单点就是你装了win还装了linux就要修改/boot/grub下的menu.1st文件:
# vi /boot/grub/menu.1st
键入i进入编辑模式:

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,1)
# kernel /boot/vmlinuz-version ro root=/dev/hda2
# initrd /boot/initrd-version.img
#boot=/dev/hda
default=1
timeout=10
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
title Fedora Core(2.6.11)
root (hd0,1)
kernel /boot/vmlinuz ro root=/dev/hda2 ---你的linux所在的分区
title DOS
rootnoverify (hd0,0)
chainloader +1

title Fedora Core(2.4.22)
root (hd0,1)
kernel /boot/vmlinuz-2.4.22-1.2115.nptl ro root=LABEL=/ hdd=ide-scsi rhgb
initrd /boot/initrd-2.4.22-1.2115.nptl.img
这样还可以保留旧版本的内核以防编译新内核失败进不了系统
  重启电脑,好了,进去了。
rpm没法用了,怎么办?
在/usr/lib/rpm/macros里面寻找代码:
%__dbi_cdb create cdb mpool mp_mmapsize=16Mb mp_size=1Mb
修改成代码:
%__dbi_cdb create cdb mpool mp_mmapsize=16Mb mp_size=1Mb private

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/freedom1013/archive/2006/11/16/1389044.aspx