Linux 2.6.19.x内核编译配置选项简介(2)
- 格式:doc
- 大小:61.00 KB
- 文档页数:13
linux内核编译教程Linux内核是开源操作系统Linux的核心部分,负责管理计算机的硬件资源和提供系统调用等基本功能。
编译Linux内核是根据自己的需求定制Linux系统的一个重要步骤。
本文将介绍如何编译Linux内核。
首先,要开始编译Linux内核,需要下载最新的内核源代码。
可以在Linux官网的下载页面找到相应的内核版本。
将源代码下载到本地后,解压缩到一个合适的位置。
接下来,需要安装一些必要的依赖包。
不同的Linux发行版可能有不同的依赖包名称,可以通过包管理器进行安装。
例如,对于Debian/Ubuntu系统,可以使用apt-get命令安装依赖包。
常见的依赖包包括gcc编译器、make工具、flex和bison等。
在安装完依赖包之后,进入解压缩后的内核源码目录。
可以通过cd命令切换到该目录。
在目录中可以找到一个名为.config 的文件,这是内核的配置文件。
可以通过复制现有的配置文件或者使用make menuconfig等命令进行配置。
配置完成后,可以开始编译内核了。
在内核源码目录中运行make命令,编译过程可能需要一些时间。
可以使用make命令的参数来设置编译的选项,例如使用-j参数指定并行编译的进程数,加快编译速度。
编译完成后,可以使用make modules_install命令安装内核模块。
然后,使用make install命令安装编译好的内核。
这些命令可能需要root权限才能执行。
安装完成后,需要更新系统的引导程序以启动新编译的内核。
具体的操作步骤可以根据不同的引导程序进行设置。
一般来说,需要编辑/boot/grub/grub.cfg文件,添加新内核的引导项。
最后,重启计算机,选择新编译的内核启动。
如果一切正常,系统将会以新内核启动。
在编译Linux内核的过程中,可能会遇到各种问题。
可以通过查找相关文档、咨询论坛或者向开发者社区寻求帮助来解决问题。
总之,编译Linux内核是一个复杂的过程,但通过理解以上步骤和不断实践,可以逐渐掌握这一技能,并根据自己的需求定制出适合的Linux系统。
编译Linux 2.6内核2011/06/23 1313 编译内核易如反掌。
让人叹为观止的是,这实际上比编译和安装像glibc这样的系统级组伴还要简单。
2.6内核提供了一套新工具,使编译内核更加容易,比早期发布的内核有了长足的进步。
2.3.1 配置内核因为Linux源码随手可得,那就意味着在编译它之前可以配置和定制。
的确,你可以把自己需要的特定功能和驱动程序编译进内核。
在编译内核之前,首先你必须配置它。
由于内核提供了数不胜数的功能,支持了难以计数的硬件,因而有许多东西需要配置。
可以配置的各种选项,以CONFIG_FEATURE形式表示,其前缀为CONFIG。
例如,对称多处理器(SMP)的配置选项为CONFIG_SMP。
如果设置了该选项,则SMP启用,否则,SMP不起作用。
配置选项既可以用来决定哪些文件编译进内核,也可以通过预处理命令处理代码。
这些配置项要么是二选一,要么是三选一。
二选一就是yes或no。
比如CONFIG_PREEMPT就是二选一,表示内核抢占功能是否开启。
三选一可以是yes、no或module。
module意味着该配置项被选定了,但编译的时候这部分功能的实现代码是以模块(一种可以动态安装的独立代码段)的形式生成。
在三选一的情况下,显然yes选项表示把代码编译进主内核映像中,而不是作为一个模块。
驱动程序一般都用三选一的配置项。
配置选项也可以是字符串或整数。
这些选项并不控制编译过程,而只是指定内核源码可以访问的值,一般以预处理宏的形式表示。
比如,配置选项可以指定静态分配数组的大小。
销售商提供的内核,像Canonical的Ubuntu或者Red Hat的Fedora,他们的发布版中包含了预编译的内核,这样的内核使得所需的功能得以充分地启用,并几乎把所有的驱动程序都编译成模块。
这就为大多数硬件作为独立的模块提供了坚实的内核支持。
但是,话又说回来,如果你是一个内核黑客,你应当编译自己的内核,并按自己的意愿决定包括或不包含哪一模块。
General setup常规设置Local versio n - append to kernel release在内核版本后面加上自定义的版本字符串(小于64字符),可以用"uname -a"命令看到Automatically append version information to the versio n string 自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持Support for paging of anonymous memory (swap)使用交换分区或者交换文件来做为虚拟内存System V IPCSystem V进程间通信(IPC)支持,许多程序需要这个功能.必选,除非你知道自己在做什么POSIX Message QueuesPOSIX消息队列,这是POSIX IPC中的一部分BSD Process Accounting将进程的统计信息写入文件的用户级系统调用,主要包括进程的创建时间/创建者/内存占用等信息Export task/process statistics through netlink通过netlink接口向用户空间导出任务/进程的统计信息,与BSD ProcessAccounting的不同之处在于这些统计信息在整个任务/进程生存期都是可用的UTS NamespacesUTS名字空间支持,不确定可以不选Auditing support审计支持,某些内核模块(例如SELinux)需要它,只有同时选择其子项才能对系统调用进行审计Kernel .config support把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本来提取这些信息Cpuset support只有含有大量CPU(大于16个)的SMP系统或NUMA(非一致内存访问)系统才需要它Kernel->user space relay support (formerly relayfs)在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口Initramfs source file(s)initrd已经被initramfs取代,如果你不明白这是什么意思,请保持空白Optimize for size (Look out for broken compilers!)编译时优化内核尺寸(使用"-Os"而不是"-O2"参数编译),有时会产生错误的二进制代码Enable extended accounting over taskstats收集额外的进程统计信息并通过taskstats接口发送到用户空间Configure standard kernel features (for small systems)配置标准的内核特性(为小型系统)Include all symbols in kallsyms在kallsyms中包含内核知道的所有符号,内核将会增大300KDo an extra kallsyms pass除非你在kallsyms中发现了bug并需要报告这个bug才打开该选项Loadable module support可加载模块支持Enable loadable module support打开可加载模块支持,如果打开它则必须通过"make modules_install"把内核模块安装在/lib/modules/中Module unloading允许卸载已经加载的模块Forced module unloading允许强制卸载正在使用中的模块(比较危险)Module versioning support允许使用其他内核版本的模块(可能会出问题)Source checksum for all modules为所有的模块校验源码,如果你不是自己编写内核模块就不需要它Block layer块设备层Enable the block layer块设备支持,使用硬盘/USB/SCSI设备者必选Support for Large Block Devices仅在使用大于2TB的块设备时需要Support for tracing block io actions块队列IO跟踪支持,它允许用户查看在一个块设备队列上发生的所有事件,可以通过blktrace程序获得磁盘当前的详细统计数据Support for Large Single Files仅在可能使用大于2TB的文件时需要IO SchedulersIO调度器Anticipatory I/O scheduler假设一个块设备只有一个物理查找磁头(例如一个单独的SATA硬盘),将多个随机的小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量.适用于大多数环境,特别是写入较多的环境(比如文件服务器)Deadline I/O scheduler使用轮询的调度器,简洁小巧,提供了最小的读取延迟和尚佳的吞吐量,特别适合于读取较多的环境(比如数据库)CFQ I/O scheduler使用QoS策略为所有任务分配等量的带宽,避免进程被饿死并实现了较低的延迟,可以认为是上述两种调度器的折中.适用于有大量进程的多用户系统Default I/O scheduler默认IO调度器Processor type and features中央处理器(CPU)类型及特性Symmetric multi-processing support对称多处理器支持,如果你有多个CPU或者使用的是多核CPU就选上.此时"Enhanced Real Time Clock Support"选项必须开启,"Advanced PowerManagement"选项必须关闭Subarchitecture Type处理器的子架构,大多数人都应当选择"PC-compatible"Processor family处理器系列,请按照你实际使用的CPU选择Generic x86 support通用x86支持,如果你的CPU能够在上述"Processor family"中找到就别选HPET Timer SupportHPET是替代8254芯片的新一代定时器,i686及以上级别的主板都支持,可以安全的选上Maximum number of CPUs支持的最大CPU数,每增加一个内核将增加8K体积SMT (Hyperthreading) scheduler support支持Intel的超线程(HT)技术Multi-core scheduler support针对多核CPU进行调度策略优化Preemption Model内核抢占模式No Forced Preemption (Server)适合服务器环境的禁止内核抢占Voluntary Kernel Preemption (Desktop)适合普通桌面环境的自愿内核抢占Preemptible Kernel (Low-Latency Desktop)适合运行实时程序的主动内核抢占Preempt The Big Kernel Lock可以抢占大内核锁,应用于实时要求高的场合,不适合服务器环境Machine Check Exception让CPU检测到系统故障时通知内核,以便内核采取相应的措施(如过热关机等) Check for non-fatal errors on AMD Athlon/Duron / IntelPentium 4每5秒检测一次这些cpu的非致命错误并纠正它们,同时记入日志check for P4 thermal throttling interrupt当P4的cpu过热时显示一条警告消息Enable VM86 support虚拟X86支持,在DOSEMU下运行16-bit程序或XFree86通过BIOS初始化某些显卡的时候才需要Toshiba Laptop supportToshiba笔记本模块支持Dell laptop supportDell笔记本模块支持Enable X86 board specific fixups for reboot修正某些旧x86主板的重起bug,这种主板基本绝种了/dev/cpu/microcode - Intel IA32 CPU microcode support使用不随Linux内核发行的IA32微代码,你必需有IA32微代码二进制文件,仅对Intel的CPU有效/dev/cpu/*/msr - Model-specific register support在多cpu系统中让特权CPU访问x86的MSR寄存器/dev/cpu/*/cpuid - CPU informatio n support能从/dev/cpu/x/cpuid获得CPU的唯一标识符(CPUID)Firmware Drivers固件驱动程序BIOS Enhanced Disk Drive calls determine boot disk 有些BIOS支持从某块特定的硬盘启动(如果BIOS不支持则可能无法启动),目前大多数BIOS还不支持BIOS update support for DELL systems via sysfs 仅适用于DELL机器Dell Systems Management Base Driver仅适用于DELL机器High Memory Support最高内存支持,总内存小于等于1G的选"off",大于4G的选"64G"Memory split如果你不是绝对清楚自己在做什么,不要改动这个选项Memory model一般选"Flat Memory",其他选项涉及内存热插拔64 bit Memory and IO resources使用64位的内存和IO资源Allocate 3rd-level pagetables from highmem在内存很多(大于4G)的机器上将用户空间的页表放到高位内存区,以节约宝贵的低端内存Math emulation数学协处理器仿真,486DX以上的cpu就不要选它了MTRR (Memory Type Range Register) support打开它可以提升PCI/AGP总线上的显卡2倍以上的速度,并且可以修正某些BIOS错误Boot from EFI supportEFI是一种可代替传统BIOS的技术(目前的Grub/LILO尚不能识别它),但是现在远未普及Enable kernel irq balancing让内核将irq中断平均分配给多个CPU以进行负载均衡,但是要配合irqbanlance守护进程才行Use register arguments使用"-mregparm=3"参数编译内核,将前3个参数以寄存器方式进行参数调用,可以生成更紧凑和高效的代码Enable seccomp to safely compute untrusted bytecode只有嵌入式系统可以不选Timer frequency内核时钟频率,桌面推荐"1000 HZ",服务器推荐"100 HZ"或"250 HZ"kexec system call提供kexec系统调用,可以不必重启而切换到另一个内核kernel crash dumps被kexec启动后产生内核崩溃转储Physical address where the kernel is loaded内核加载的物理地址,除非你知道自己在做什么,否则不要修改.在提供kexec系统调用的情况下可能要修改它Support for hot-pluggable CPUs对热插拔CPU提供支持Compat VDSO support如果Glibc版本大于等于2.3.3就不选,否则就选上Power management options电源管理选项Power Management support电源管理有APM和ACPI两种标准且不能同时使用.即使关闭该选项,X86上运行的Linux也会在空闲时发出HLT指令将CPU进入睡眠状态Legacy Power Management API传统的电源管理API,比如软关机和系统休眠等接口Power Management Debug Support仅供调试使用Driver model /sys/devices/.../power/state files 内核帮助文档反对使用该选项,即将被废除ACPI (Advanced Configuration and Power Interface) Support必须运行acpid守护程序ACPI才能起作用.ACPI是为了取代APM而设计的,因此应该尽量使用ACPI而不是APMAC Adapter如果你的系统可以在AC和电池之间转换就可以选Battery通过/proc/acpi/battery向用户提供电池状态信息,用电池的笔记本可以选Button守护程序捕获Power,Sleep,Lid按钮事件,并根据/proc/acpi/event做相应的动作,软件控制的poweroff需要它Video仅对集成在主板上的显卡提供ACPI2.0支持,且不是所有集成显卡都支持Generic Hotkey统一的热键驱动,建议不选Fan允许通过用户层的程序来对系统风扇进行控制(开,关,查询状态),支持它的硬件并不多Dock支持由ACPI控制的集线器(docking stations)Processor让ACPI处理空闲状态,并使用ACPI C2和C3处理器状态在空闲时节省电能,同时它还被cpufreq的"Performance-state drivers"选项所依赖Thermal Zone系统温度过高时可以利用ACPI thermal zone及时调整工作状态以避免你的CPU被烧毁ASUS/Medio n Laptop Extras ASUS笔记本专用,以提供额外按钮的支持,用户可以通过/proc/acpi/asus来打开或者关闭LCD的背光/调整亮度/定制LED的闪烁指示等功能IBM ThinkPad Laptop Extras IBM ThinkPad专用Toshiba Laptop Extras Toshiba笔记本专用Disable ACPI for systemsbefore Jan 1st this year 输入四位数的年份,在该年的1月1日前不使用ACPI的功能("0"表示一直使用)Debug Statements 详细的ACPI调试信息,不搞开发就别选Power ManagementTimer Support 这个Timer在所有ACPI兼容的平台上都可用,且不会受PM功能的影响,建议总是启用它.如果你在kernel log中看到了'many lost ticks'那就必须启用它ACPI0004,PNP0A05and PNP0A06Container Driver 支持内存和CPU的热插拔Smart BatterySystem 支持依赖于I2C的"智能电池".这种电池非常老旧且罕见,还与当前的ACPI标准兼容性差APM (Advanced Power Management) BIOS SupportAPM在SMP机器上必须关闭,一般来说当前的笔记本都支持ACPI,所以应尽量关闭该该选项Ignore USER SUSPEND只有NEC Versa M系列的笔记本才需要选择这一项Enable PM at boot time系统启动时即启用APM,选上这个选项能让系统自动的进行电源管理,但常常导致启动时死机Make CPU Idle calls when idle系统空闲时调用空闲指令(halt),只有老式的CPU才需要选它,且对于SMP系统必须关闭Enable console blanking using APM在屏幕空白时关闭LCD背光,事实上对所有的笔记本都无效RTC stores time in GMT将硬件时钟应该设为格林威治时间,否则视为本地时间.建议你使用GMT,这样你无须为时区的改变而担心Allow interrupts during APM BIOS calls 允许APM的BIOS调用时中断,IBM Thinkpad的一些新机器需要这项.如果休眠时挂机(包括睡下去就醒不来),可以试试它Use real mode APM BIOS call to power off 此驱动为某些有Bug的BIOS准备,如果你的系统不能正常关机或关机时崩溃,可以试试它CPU Frequency scaling允许动态改变CPU主频,达到省电和降温的目的,必须同时启用下面的一种governor才行Enable CPUfreq debugging允许对CPUfreq进行调试CPU frequency translation statistics通过sysfs文件系统输出CPU频率变换的统计信息CPU frequency translation statistics details输出详细的CPU频率变换统计信息Default CPUFreq governor默认的CPU频率调节器'performance' governor'性能'优先,静态的将频率设置为cpu支持的最高频率'powersave' governor'节能'优先,静态的将频率设置为cpu支持的最低频率'userspace' governor for userspace frequencyscaling既允许手动调整cpu频率,也允许用户空间的程序动态的调整cpu频率(需要额外的调频软件,比如cpufreqd)'ondemand' cpufreq policy governor '立即响应',周期性的考察CPU负载并自动的动态调整cpu频率(不需要额外的调频软件),适合台式机'conservative' cpufreq governor '保守',和'ondemand'相似,但是频率的升降是渐变式的(幅度不会很大),更适合用于笔记本/PDA/AMD64环境ACPI Processor P-States driver 将ACPI2.0的处理器性能状态报告给CPUFreq processor drivers以决定如何调整频率,该选项依赖于ACPI->Processor{省略的部分请按照自己实际使用的CPU选择}/proc/acpi/processor/../performance interface内核帮助文档反对使用该选项,即将被废除Relaxed speedstep capabilitychecks放松对系统的speedstep兼容性检查,仅在某些老旧的Intel系统上需要打开Bus options (PCI, PCMCIA, EISA, MCA, ISA)总线选项PCI supportPCI支持,如果使用了PCI或PCI Express设备就必选PCI access modePCI访问模式,强列建议选"Any"(系统将优先使用"MMConfig",然后使用"BIOS",最后使用"Direct"检测PCI设备)PCI Express supportPCI Express支持(目前主要用于显卡和千兆网卡)PCI Express Hotplug driver如果你的主板和设备都支持PCI Express热插拔就可以选上Use po lling mechanism for hot-plug events对热插拔事件采用轮询机制,仅用于测试目的Root Port Advanced Error Reporting support由PCI Express AER驱动程序处理发送到Root Port的错误信息Message Signaled Interrupts (MSI and MSI-X) PCI Express支持两类中断:INTx使用传统的IRQ中断,可以与现行的PCI总线的驱动程序和操作系统兼容;MSI则是通过inbound Memory Write触发和发送中断,更适合多CPU系统.可以使用"pci=nomsi"内核引导参数关闭MSIPCI Debugging将PCI调试信息输出到系统日志里Interrupts on hypertransport devices允许本地的hypertransport设备使用中断ISA support现在基本上没有ISA的设备了,如果你有就选吧MCA support微通道总线,老旧的IBM的台式机和笔记本上可能会有这种总线NatSemi SCx200 support在使用AMD Geode处理器的机器上才可能有PCCARD (PCMCIA/CardBus) supportPCMCIA卡(主要用于笔记本)支持Enable PCCARD debugging仅供调试16-bit PCMCIA support一些老的PCMCIA卡使用16位的CardBus32-bit CardBus support当前的PCMCIA卡基本上都是32位的CardBusCardBus yenta-compatible bridge support使用PCMCIA卡的基本上都需要选择这一项,子项请按照自己实际使用的PCMCIA卡选择{省略的部分请按照自己实际使用的PCMCIA卡选择} PCI Hotplug SupportPCI热插拔支持,如果你有这样的设备就到子项中去选吧Executable file formats可执行文件格式Kernel support for ELF binariesELF是开放平台下最常用的二进制文件格式,支持动态连接,支持不同的硬件平台.除非你知道自己在做什么,否则必选Kernel support for a.out and ECOFF binaries早期UNIX系统的可执行文件格式,目前已经被ELF格式取代Kernel support for MISC binaries允许插入二进制的封装层到内核中,使用Java,.NET,Python,Lisp等语言编写的程序时需要它Networking网络Networking options网络选项Network packet debugging在调试不合格的包时加上额外的附加信息,但在遇到Dos攻击时你可能会被日志淹没Packet socket这种Socket可以让应用程序(比如tcpdump,iptables)直接与网络设备通讯,而不通过内核中的其它中介协议Packet socket: mmapped IO让Packet socket驱动程序使用IO映射机制以使连接速度更快Unix domain sockets一种仅运行于本机上的效率高于TCP/IP的Socket,简称Unix socket.许多程序都使用它在操作系统内部进行进程间通信(IPC),比如X Window和syslogTransformatio n user configuratio n interface为IPsec(可在ip层加密)之类的工具提供XFRM用户配置接口支持Transformatio n sub po licy supportXFRM子策略支持,仅供开发者使用PF_KEY sockets用于可信任的密钥管理程序和操作系统内核内部的密钥管理进行通信,IPsec依赖于它TCP/IP networkingTCP/IP协议当然要选IP: multicasting群组广播,似乎与网格计算有关,仅在使用MBONE的时候才需要IP: advanced router高级路由,如果想做一个路由器就选吧IP: policy routing策略路由IP: equal cost multipath用于路由的基于目的地址的负载均衡IP: verbose route monitoring显示冗余的路由监控信息IP: kernel level autoconfiguratio n在内核启动时自动配置ip地址/路由表等,需要从网络启动的无盘工作站才需要这个东西IP: tunnelingIP隧道,将一个IP报文封装在另一个IP报文内的技术IP: GRE tunnels over IP基于IP的GRE(通用路由封装)隧道IP: multicast routing多重传播路由IP: ARP daemon support这东西尚处于试验阶段就已经被废弃了IP: TCP syncookie support抵抗SYN flood攻击的好东西,要启用它必须同时启用/proc文件系统和"Sysctl support",然后在系统启动并挂载了/proc之后执行"echo1 >/proc/sys/net/ipv4/tcp_syncookies"命令IP: AH transformatio nIPsec验证头(AH)实现了数据发送方的验证处理,可确保数据既对于未经验证的站点不可用也不能在路由过程中更改IP: ESP transformationIPsec封闭安全负载(ESP)实现了发送方的验证处理和数据加密处理,用以确保数据不会被拦截/查看或复制IP: IPComp transformationIPComp(IP静荷载压缩协议),用于支持IPsecIP: IPsec transport modeIPsec传输模式,常用于对等通信,用以提供内网安全.数据包经过了加密但IP头没有加密,因此任何标准设备或软件都可查看和使用IP头IP: IPsec tunnel modeIPsec隧道模式,用于提供外网安全(包括虚拟专用网络).整个数据包(数据头和负载)都已经过加密处理且分配有新的ESP头/IP头和验证尾,从而能够隐藏受保护站点的拓扑结构IP: IPsec BEET modeIPsec BEET模式INET: socket monitoring interfacesocket监视接口,一些Linux本地工具(如:包含ss的iproute2)需要使用它TCP: advanced congestio n control高级拥塞控制,如果没有特殊需求(比如无线网络)就别选了,内核会自动将默认的拥塞控制设为"Cubic"并将"Reno"作为候补IP: Virtual Server ConfigurationIP虚拟服务器允许你基于多台物理机器构建一台高性能的虚拟服务器,不玩集群就别选了The IPv6 protocol你要是需要IPv6就选吧NetLabel subsystem supportNetLabel子系统为诸如CIPSO与RIPSO之类能够在分组信息上添加标签的协议提供支持,如果你看不懂就别选了Security Marking对网络包进行安全标记,类似于nfmark,但主要是为安全目的而设计,如果你不明白的话就别选Network packet filtering (replaces ipchains)Netfilter可以对数据包进行过滤和修改,可以作为防火墙("packet filter"或"proxy-based")或网关(NAT)或代理(proxy)或网桥使用.选中此选项后必须将"Fast switching"关闭,否则将前功尽弃Network packet filtering debugging仅供开发者调试Netfilter使用Bridged IP/ARP packets filtering如果你希望使用一个针对桥接的防火墙就打开它Core Netfilter Configuration核心Netfilter配置(当包流过Chain时如果match某个规则那么将由该规则的target来处理,否则将由同一个Chain中的下一个规则进行匹配,若不match所有规则那么最终将由该Chain的policy进行处理)Netfilter netlink interface允许Netfilter在与用户空间通信时使用新的netlink接口.netlink Socket是Linux用户态与内核态交流的主要方法之一,且越来越被重视.Netfilter NFQUEUE over NFNETLINK interface通过NFNETLINK接口对包进行排队Netfilter LOG over NFNETLINK interface通过NFNETLINK接口对包记录.该选项废弃了ipt_ULOG和ebg_ulog机制,并打算在将来废弃基于syslog的ipt_LOG和ip6t_LOG模块Layer 3 Independent Connection tracking独立于第三层的链接跟踪,通过广义化的ip_conntrack支持其它非IP协议的第三层协议Netfilter Xtables support如果你打算使用ip_tables,ip6_tables,arp_tables之一就必须选上"CLASSIFY" target support允许为包设置优先级,一些排队规则(atm,cbq,dsmark,pfifo_fast,htb,prio)需要使用它"CONNMARK" target support类似于"MARK",但影响的是连接标记的值"DSCP" target support允许对ip包头部的DSCP(Differentiated Services Codepoint)字段进行修改,该字段常用于Qos"MARK" target support允许对包进行标记(通常配合ip命令使用),这样就可以改变路由策略或者被其它子系统用来改变其行为"NFQUEUE" target Support用于替代老旧的QUEUE(iptables内建的target之一),因为NFQUEUE能支持最多65535个队列,而QUEUE只能支持一个"NOTRACK" target support允许规则指定哪些包不进入链接跟踪/NAT子系统"SECMARK" target support允许对包进行安全标记,用于安全子系统"CONNSECMARK" target support针对链接进行安全标记,同时还会将连接上的标记还原到包上(如果链接中的包尚未进行安全标记),通常与SECMARK target联合使用"comment" match support允许你在iptables规则集中加入注释"connbytes" per-connection counter match support允许针对单个连接内部每个方向(进/出)匹配已经传送的字节数/包数"connmark" connection mark match support允许针对每个会话匹配先前由"CONNMARK"设置的标记值"conntrack" connection tracking match support连接跟踪匹配,是"state"的超集,它允许额外的链接跟踪信息,在需要设置一些复杂的规则(比如网关)时很有用"DCCP" protocol match supportDCCP是打算取代UDP的新传输协议,它在UDP的基础上增加了流控和拥塞控制机制,面向实时业务"DSCP" match support允许对IP包头的DSCP字段进行匹配"ESP" match support允许对IPSec包中的ESP头进行匹配,使用IPsec的话就选上吧"helper" match support加载特定协议的连接跟踪辅助模块,由该模块过滤所跟踪的连接类型的包,比如ip_conntrack_ftp模块"length" match support允许对包的长度进行匹配"limit" match support允许根据包的进出速率进行规则匹配,常和"LOG target"配合使用以抵抗某些Dos攻击"mac" address match support允许根据以太网的MAC进行匹配,常用于无线网络环境"mark" match support允许对先前由"MARK"标记的特定标记值进行匹配IPsec "policy" match support使用IPsec就选上吧Multiple port match support允许对TCP或UDP包同时匹配多个端口(通常情况下只能匹配一个端口)"physdev" match support允许对到达的或将要离开的物理桥端口进行匹配"pkttype" packet type match support允许对封包目的地址类别(广播/群播/直播)进行匹配"quota" match support允许对总字节数的限额值进行匹配"realm" match support允许对iptables中的路由子系统中的realm值进行匹配"sctp" protocol match support流控制传输协议(SCTP),十年以后也许能够普及的东西"state" match support这是对包进行分类的有力工具,它允许利用连接跟踪信息对连接中处于特定状态的包进行匹配"statistic" match support允许根据一个给定的百分率对包进行周期性的或随机性的匹配"string" match support允许根据包所承载的数据中包含的特定字符串进行匹配"tcpmss" match support允许根据TCP SYN包头中的MSS(最大分段长度)选项的值进行匹配IP: Netfilter Configuration针对IPv4的Netfilter配置Connection tracking (required for masq/NAT)链接跟踪.可用于报文伪装或地址转换,也可用于增强包过滤能力Connection tracking flow accounting允许针对每个连接记录已经传送的字节/包数,常用于connbytes matchConnection mark tracking support允许对连接进行标记,与针对单独的包进行标记的不同之处在于它是针对连接流的.CONNMARK target和connmark match需要它的支持Connection tracking security mark support允许对连接进行安全标记,通常这些标记包(SECMARK)复制到其所属连接(CONNSECMARK),再从连接复制到其关联的包(SECMARK)Connection tracking events连接跟踪事件支持.如果启用这个选项,连接跟踪代码将提供一个notifier链,它可以被其它内核代码用来获知连接跟踪状态的改变Connection tracking netlink interface支持基于netlink的用户空间接口SCTP protocol connection tracking supportSCTP是IP网面向多媒体通信的新一代的流控制传输协议FTP protocol supportFTP协议IRC protocol supportIRC协议是一种用来实时聊天协议,用过mIRC的人应当不陌生NetBIOS name service protocol supportNetBIOS名字服务协议TFTP protocol supportTFTP是基于UDP的比FTP简单的文件传输协议Amanda backup protocol supportAmanda备份协议PPTP protocol support点对点隧道协议(PPTP)是一种支持多协议虚拟专用网络的网络技术,ADSL用户对它应该很熟悉H.323 protocol supportITU-T提出的用于IP电话的协议SIP protocol supportIETE提出的用于IP电话的协议IP Userspace queueing via NETLINK已废弃IP tables support (required for filtering/masq/NAT)要用iptables就肯定要选上IP range match support允许对ip地址的范围进行匹配TOS match support允许对ip包头的TOS(Type Of Service)字段进行匹配recent match support可以创建一个或多个刚刚使用过的ip地址列表,然后根据这些列表进行匹配ECN match support允许对TCP/IP包头的ECN(Explicit Congestion Notification)字段进行匹配.ECN是一种显式拥塞通知技术,它不但要求路由器支持而且要求端到端主机的支持,其基本思想是当路由器发生早期拥塞时不是丢弃包而是尽量对包进行标记,接收方接到带有ECN提示的包时,通知发送方网络即将发生拥塞,也就是它通过对包的标记提示TCP源即将发生拥塞,从而引发拥塞避免算法AH match support允许对IPSec包头的AH字段进行匹配TTL match support允许对ip包头的TTL(生存期)字段进行匹配Owner match support允许对本地生成的包按照其宿主(user,group,process,session)进行匹配address type match support允许对地址类型(单播,本地,广播)进行匹配hashlimit match support是limit的升级,它基于你选择的ip地址与/或端口动态的创建以limit为桶(bucket)的哈希表.它可以创建诸如"为每个特定的目标IP分配10kpps"或"允许每个特定的源IP分配500pps"之类的规则Packet filtering定义filter表以允许对包进行过滤REJECT target support允许返回一个ICMP错误而不是简单的丢弃包LOG target support允许将符合条件的包头信息通过syslog进行记录ULOG target support透过netlink socket将符合条件的封包交给用户空间的ulogd守护进程.反对使用该选项,因为它已经被NETFILTER_NETLINK_LOG代替TCPMSS target support允许修改TCP包头中的MSS(最大分段长度)选项值Full NAT允许进行伪装/端口转发以及其它的NAT功能,仅在你需要使用iptables中的nat 表时才需要选择Packet mangling在iptables中启用mangle表以便对包进行各种修改,常用于改变包的路由raw table support (required for NOTRACK/TRACE)在iptables中添加一个'raw'表,该表在netfilter框架中非常靠前,并在PREROUTING和OUTPUT链上有钩子,从而可以对收到的数据包在连接跟踪前进行处理ARP tables supportARP表支持.只有在局域网中才有ARP欺骗问题,另外路由器也会遭到ARP欺骗ARP packet filteringARP包过滤.对于进入和离开本地的ARP包定义一个filter表,在桥接的情况下还可以应用于被转发ARP包ARP payload mangling允许对ARP包的荷载部分进行修改,比如修改源和目标物理地址IPv6: Netfilter Configuration针对IPv6的Netfilter配置,需要的话可以参考前面IPv4的Netfilter配置进行选择DECnet: Netfilter Configuratio n针对DECnet的Netfilter配置Bridge: Netfilter Configuration针对桥接的Netfilter配置DCCP Configuratio n数据报拥塞控制协议在UDP的基础上增加了流控和拥塞控制机制,使数据报协议能够更好地用于流媒体业务的传输SCTP Configuration流控制传输协议是一种新兴的传输层协议.TCP协议一次只能连接一个IP地址而在SCTP协议一次可以连接多个IP地址且可以自动平衡网络负载,一旦某一个IP 地址失效会自动将网络负载转移到其他IP地址上TIPC Configuration透明内部进程间通信协议,以共享内存为基础实现任务和资源的调度,专门用于内部集群通信Asynchronous Transfer Mode (ATM)异步传输模式(ATM)支持802.1d Ethernet Bridging802.1d以太网桥802.1Q VLAN Support802.1Q虚拟局域网DECnet SupportDECnet是一种很生僻的协议ANSI/IEEE 802.2 LLC type 2 Support看不懂可以不选The IPX protocolIPX协议Appletalk protocol support与Mac机器通信的协议CCITT X.25 Packet Layer大约没人需要这东西LAPB Data Link Driver大约没人需要这东西。
[原创]linux2.6内核的编译步骤及模块的动态加载-内核源码学习-linux论坛05年本科毕业设计做的是Linux下驱动的剖析,当时就买了一本《Linux设备驱动程序(第二版)》,但是没有实现将最简单的helloworld程序编译成模块,加载到kernel里。
不过,现在自己确实打算做一款芯片的Linux的驱动,因此,又开始看了《Linux设备驱动程序》这本书,不过已经是第三版了。
第二版讲的是2.4的内核,第三版讲的是2.6的内核。
两个内核版本之间关于编译内核以及加载模块的方法都有所变化。
本文是基于2.6的内核,也建议各位可以先看一下《Linux内核设计与实现(第二版)》作为一个基础知识的铺垫。
当然,从实践角度来看,只要按着以下的步骤去做也应该可以实现成功编译内核及加载模块。
个人用的Linux版本为:Debian GNU/Linux,内核版本为:2.6.20-1-686.第一步,下载Linux内核的源代码,即构建LDD3(Linux Device Drivers 3rd)上面所说的内核树。
如过安装的Linux系统中已经自带了源代码的话,应该在/usr/src目录下。
如果该目录为空的话,则需要自己手动下载源代码。
下载代码的方法和链接很多,也可以在CU上通过/search/?key=&;q=kernel&a mp;frmid=53去下载。
不过,下载的内核版本最好和所运行的Linux系统的内核版本一致。
当然,也可以比Linux系统内核的版本低,但高的话应该不行(个人尚未实践)。
Debian下可以很方便的通过Debian源下载:首先查找一下可下载的内核源代码:# apt-cache search linux-source其中显示的有:linux-source-2.6.20,没有和我的内核版本完全匹配,不过也没关系,直接下载就可以了:# apt-get install linux-source-2.6.20下载完成后,安装在/usr/src下,文件名为:linux-source-2.6.20.tar.bz2,是一个压缩包,解压缩既可以得到整个内核的源代码:# tar jxvf linux-source-2.6.20.tar.bz2解压后生成一个新的目录/usr/src/linux--source-2.6.20,所有的源代码都在该目录下。
linux内核编译选项详解(一):General setup 空间中有一些有关编译出错的信息[*]Prompt for development and/or incomplete code/drivers显示尚在开发中或尚未完成的代码与驱动.你应该选择它,因为有许多设备可能必需选择这个选项才能进行配置,实际上它是安全的。
这个选项同样会让一些老的驱动的可用。
如果你选了Y,你将会得到更多的阿尔法版本的驱动和代码的配置菜单。
()Local version – append to kernel release在内核版本后面加上自定义的版本字符串(小于64字符),可以用‖uname -a‖命令看到[ ]Automatically append version information to the version string自动生成版本信息。
这个选项会自动探测你的内核并且生成相应的版本,使之不会和原先的重复。
这需要Perl的支持。
由于在编译的命令make-kpkg 中我们会加入- –append-to-version 选项来生成自定义版本,所以这里选N。
Kernel compression mode (Gzip)内核压缩模式选baip2∙gzip用于UNIX系统的文件压缩。
后缀为.gz的文件。
现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。
HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。
大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。
∙bzip2是一个基于Burrows- Wheeler 变换的无损压缩软件,压缩效果比传统的LZ77/LZ78压缩算法来得好。
它是一款免费软件。
bzip2能够进行高质量的数据压缩。
它利用先进的压缩技术,能够把普通的数据文件压缩10%至15%,压缩的速度和解压的效率都非常高!支持现在大多数压缩格式,包括tar、gzip 等等。
现在流行的ODL(only disk linux)中做内核部分,那些文章不介绍此点内容。
我正在做,完工后整理资料。
BY THE WAY ,想成为LINUX高手吗?你需要熟练掌握KERNEL COMPILE 、XCONFIGRATER 、LINUXCONFIG、SAMBA四大利器,你随时可以找到后三者的大量相关资料,但内核编译就只好啃为数不多的英文了。
笔者耗时3月,搜集并整理大量资料,在儿童节前连续工作18个小时后,给小企鹅送了这份礼物。
笔者自信是目前为止KERNEL编译方面最完备的中文资料(将不断翻译补充),这可是毕业论文哪!为什么要放网上呢?首先找这方面资料太难了,文章对各位LINUX爱好者会有所帮助。
其次,取之于网用之于网。
欢迎使用这篇文章,请随便引用,这才符合LINUX自由软件的精神嘛,不过别忘了提提我的名字,就算为我的辛苦付了点稿酬。
介于内核方面资料较少,欢迎在这篇文章中添加和修改内容,但不要过多删除,笔者列表要加入你的名字,让我们为把它变成数百页的资料而努力。
OK,交个朋友吧,我是玉玉安,email :ziboyuyuan@ <ZIBOyuyuan@>目录序言第一章内核编译的基础第一节内核简介第二节内核版本第三节编译原因第四节准备工作第二章内核编译的流程第一节编译开始第二节配置内核{核心内容}1.代码成熟等级2..处理器类型和特色3.对模块的支持4.基本的选择5.即插即用支持6.块设备支持7.网络选项8.电话支持9.SCSI设备的支持10.I2O接口适配器11.网络设备支持12.配置业余无线广播13.红外支持14.ISDN的文件系统15.旧型光驱类型(非IDE界面的光驱)16.字符设备B支持18.文件系统19.控制台驱动20.声卡驱动21.Kernel hacking第三节编译内核第四节启用内核附录:LILO分析第三章内核编译的应用第一节嵌入式Linux技术第二节你的Linux有多大(及实践结果)结束语参考文献序言近几年,linux大行其道,令不满windows蓝屏的使用者跃跃欲试,结果发现linux安装不及windows方便,界面不及windows友好,配置不及windows容易,软件不及windows 丰富,以至浅尝辄止。
linux内核模块编译方法Linux内核模块编译方法引言:Linux内核是操作系统的核心,它负责管理计算机硬件和软件资源,提供用户和应用程序间的接口。
内核模块是一种动态加载的代码,可以在不重新启动系统的情况下添加、删除或修改内核的功能。
本文将介绍Linux内核模块的编译方法,帮助读者快速了解并掌握内核模块的开发和编译过程。
一、准备工作在编译内核模块之前,我们需要准备一些必要的工具和环境。
首先,确保你的系统已经安装了开发工具链,包括GCC编译器、make工具和内核头文件。
你可以使用以下命令检查是否安装了这些工具:```$ gcc -v$ make -v```如果输出结果中显示了版本信息,则说明相应的工具已经安装。
如果没有安装,你可以使用包管理器来安装它们。
例如,在Debian 或Ubuntu系统中,可以使用以下命令安装GCC和make:```$ sudo apt-get install gcc$ sudo apt-get install make```还需要安装内核头文件,以便在编译期间使用内核的符号和数据结构。
你可以使用以下命令安装内核头文件:```$ sudo apt-get install linux-headers-$(uname -r)```这将安装与当前正在运行的内核版本对应的头文件。
二、编写内核模块在开始编写内核模块之前,你需要了解一些基本的内核模块开发知识。
内核模块是一段与内核紧密耦合的代码,因此你需要熟悉内核的API和数据结构。
你可以参考内核源代码中的文档或在线资源来学习这些知识。
编写内核模块的过程类似于编写普通的C程序,你可以使用任何文本编辑器来创建一个源文件,以`.c`为扩展名。
在源文件中,你需要包含一些必要的头文件,并实现模块的入口函数。
下面是一个简单的内核模块示例:```c#include <linux/init.h>#include <linux/module.h>static int __init hello_init(void){printk(KERN_INFO "Hello, World!\n");return 0;}static void __exit hello_exit(void){printk(KERN_INFO "Goodbye, World!\n");}module_init(hello_init);module_exit(hello_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("Your Name");MODULE_DESCRIPTION("A simple example Linux module.");```在上述示例中,我们定义了两个函数`hello_init`和`hello_exit`,分别用于模块的初始化和退出。
linux内核编译选项详解(一):Genera l setup空间中有一些有关编译出错的信息[*]Prompt for develo pment and/or incomp letecode/driver s显示尚在开发中或尚未完成的代码与驱动.你应该选择它,因为有许多设备可能必需选择这个选项才能进行配置,实际上它是安全的。
这个选项同样会让一些老的驱动的可用。
如果你选了Y,你将会得到更多的阿尔法版本的驱动和代码的配置菜单。
()Localversio n – append to kernel releas e在内核版本后面加上自定义的版本字符串(小于64字符),可以用‖uname-a‖命令看到[ ]Automa tical ly append versio n inform ation to the versio n string自动生成版本信息。
这个选项会自动探测你的内核并且生成相应的版本,使之不会和原先的重复。
这需要Per l的支持。
由于在编译的命令mak e-kpkg 中我们会加入- –append-to-versio n 选项来生成自定义版本,所以这里选N。
Kernel compre ssion mode (Gzip)内核压缩模式选baip2∙gzip用于UNIX系统的文件压缩。
后缀为.gz的文件。
现今已经成为Inter net 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。
HTTP协议上的GZI P编码是一种用来改进WEB应用程序性能的技术。
大流量的WE B站点常常使用GZIP压缩技术来让用户感受更快的速度。
∙bzip2是一个基于B urrow s- Wheele r 变换的无损压缩软件,压缩效果比传统的LZ77/LZ78压缩算法来得好。
Linux配置和编译内核指南Linux配置和编译内核指南配置和编译内核Linux 内核概述下面讨论如何根据自己系统的需求重新编译生成新的内核编译内核是非常简单的工作一般只要根据 /usr/src/linux/ 目录下的README 文件中的指示就都可以完成为了正确地合理地设置内核编译配置选项从而只编译系统需要的功能的代码一般主要有下面四个考虑自己定制编译的内核运行更快具有更少的代码系统将拥有更多的内存内核部分将不会被交换到虚拟内存中不需要的功能编译进入内核可能会增加被系统攻击者利用的屈洞将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些在下面的内核配置和编译示例中我们将编译生成一单块内核monolithic kernel 单块内核指在回答编译配置选项时只回答yes 或no 而不回答M也就是将所有要支持的功能都直接编译到内核中而不编译为模块方式故在编译内核过程中可以忽略ma k e_m o d u l e s和m a ke_mod ules_install两个步骤同样我们这里对编译的内核添加缓冲区溢出防范补丁如S o l a r设计者开发的不可执行性栈补丁non-executable stack patch若需要使用防火墙的IP 伪装及PPP 拨号连接功能则不能采用下面的介绍的单块内核方式因为这些功能必须缺省地被编译为模块方式一个新的编译生成的内核是与特定计算机硬件相关的这些都是在内核编译配置中确定的下面的例子里我们假设计算机有如下的硬件配置• 1 Pentium II 400 MHz (i686) 处理器• 1 SCSI 主板• 1 SCSI 硬盘• 1 Adaptec AIC 7xxx SCSI 控制器• 1 ATAPI IDE CD-ROM• 1 软驱• 2 Intel EtherExpressPro 10/100 网卡• 1 PS/2 鼠标安装说明如下命令为 Unix 兼容源代码位千/usr/src 目录下安装测试是在RedH a t L i nux6.1进行的所有的步骤都是以 root 用户的身份进行的最后的内核版本是 2.2.14最后的内核补丁版本号是 2_2_14-ow1软件包内核源代码下载路径/下载 linux-2_2_14_tar.gz安全 Linux 核补丁主页为/linux/下载 linux-2_2_14-ow1_tar.gz做一张紧急启动盘安装前的准备工作的第一步是创建一个紧急启动软盘使用 mkbootdisk 命令来实现创建启动盘首先查看文件 /etc/lilo.conf 来确定系统当前是使用哪个核启动的例如[root@deep]# cat /etc/lilo.confboot=/dev/sdamap=/boot/mapinstall=/boot/boot.bprompttimeout=50image=/boot/vmlinuz-2.2.12-20label=linuxroot=/dev/sda6initrd=/boot/initrd-2.2.12-20.imgread-only现在需要查看用来启动的内核在标准安装中将是映像标签为li n u x的内核映像在上面的例子显示该系统是使用 /boot/vmlinuz-2.2.12-20 内核来作为启动映像的在软驱中插入一张经过格式化的 1.44 英寸软盘以根用户的身份登录执行如下命令[root@deep]# mkbootdisk --device /dev/fd0 2.2.12-20Insert a disk in /dev/fd0. Any information on the disk will be lost.Press <Enter> to continue or ^C to abort:按照上面的步骤将成功创建一个带有可以正常工作的内核映像的启动软盘以在升级内核出现错误时使用推荐在进行下一步以前首先使用该软盘引导进入系统成功以后在继续进行下面的步骤优化解压内核源代码[root@deep]# cp linux-version_tar.gz /usr/src/[root@deep]# cd /usr/src/[root@deep]# rm -rf linux (这个一般是一个符号链接)[root@deep]# rm -rf linux-old.version.number (这是存放系统内核头文件目录)注意上面删除 Linux 符号链接 rm -rf linux 和 Linux 头文件子目录的做法仅仅适用千以前曾经安装了过 tar 格式的 Linux 内核的情况若这是第一次安装 Linux kernel 内核则应该使用删除在系统中的 kernel-headers-version.i386.rpm,kernel-version.i386.rpm 两个RPM 包的方法删除这两个RPM 包的同时将使目录/usr/src/linux 及目录 /lib/modules/2.2.XX 下的相关的模块文件将自动被去除若系统安装的是一个RPM 格式的内核包而不是 tar 格式的包则说明你以前没有更新安装过 Linux 系统或者是使用RPM 包来更新 Linux 系统则使用下面的方法来删除 Linux 内核可以使用下面的命令来验证你的系统安装了RPM 内核包[root@deep]# rpm -qa | grep kernelkernel-headers-2.2.12-20.i386.rpmkernel-2.2.12-20.i386.rpm使用下面的命令来删除安装的RPM 内核包[root@deep]# rpm -e --nodeps kernel-headers kernel使用rpm —e 命令以后再手工删除空的/usr/src/linux-2.2.12 和/lib/modules/2.2.12 目录RPM 反安装程序并不能完全删除这些目录然后解开内核源代码改变新的Linux 源代码的所有者为根用户然后删除压缩的源代码[root@deep]# rm -rf /usr/src/linux-2.2.12/[root@deep]# rm -rf /lib/modules/2.2.12-20/[root@deep]# tar xzpf linux-version_tar.gz[root@deep]# chown -R 0.0 /usr/src/linux/[root@deep]# rm -f linux-version_tar.gz增加任务数为了增加允许的任务数每个用户的最大进程数需要修改文件/usr/src/linux/include/linux/tasks.h 中如下所示的内容NR_TASKS from 512 to 3072MIN_TASKS_LEFT_FOR_ROOT from 4 to 24注意1.NR_TASKS 指定内核将分配给每个用户的最大数量的任务增加这个数字将允许系统服务器进程处理客户端更多连接请求例如 WEB 服务器将能处理多个客户端的服务请求2.Linux 被设计为避免所有的进程槽被普通用户所占用必须保留至少MIN_TASKS_LEFT_FOR_ROOT 个时间槽给根用户也就实现了避免所有的内存被普通用户所占用优化内核为了优化定制适合系统需要的内核来适应系统的CPU 类型及优化参数需求也许需要编辑/usr/src/linux/Makefile 文件并改变如下的参数部分修改CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer为CFLAGS = -Wall -Wstrict-prototypes -O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions•修改HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer为HOSTCFLAGS = -Wall -Wstrict-prototypes -O9 -funroll-loops -ffast-math-malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer-fno-exceptions上面的修正是一些比较冒进的优化这些优化并不一定适用千所有的情况如果这些优化不适合你的情况请不要勉强使用这些优化增强内核的安全性来自Op e n wa ll工程的安全内核补丁是一个非常好安全增强补丁可以防止如栈溢出等攻击这个补丁集合了一系列针对内核的安全相关特性所有的新增加的安全选项配置将增加内核的安全性除了新增的特性某些版本的补丁还包含了各种其他安全弥补措施这种弥补是随着版本的不同而不同的某些修补已经消失了因为新的内核的发布已经弥补了错误而有些却是针对出现的新的安全屈洞linux-2_2_14-ow1_tar.gz 的新的特性包括•不可执行的用户堆栈区•限制/tmp 目录下的链接•限制/tmp 下的FIFO•受限制的/proc 目录•特殊文件旬柄 0 1 和2•在execve(2)中对RLIMIT_NPROC 进行了加强•将不使用的共享内存段释放归还给系统注意当施用内核补丁 linux-2_2_14-ow1 补丁时将在内核配置的最后添加新的安全选项部分想知道到关千这些新配置选项的意思可以参见该补丁带的自述文件对内核施用补丁如下[root@deep]# cp linux-2_2_14-ow1_tar.gz /usr/src/[root@deep]# cd /usr/src/[root@deep]# tar xzpf linux.2_2_14-ow1_tar.gz[root@deep]# cd linux-2.2.14-ow1/[root@deep]# mv linux-2.2.14-ow1.diff /usr/src/[root@deep]# cd ..[root@deep]# patch -p0 < linux-2.2.14-ow1.diff[root@deep]# rm -rf linux-2.2.14-ow1[root@deep]# rm -f linux-2.2.14-ow1.diff[root@deep]# rm -f linux-2_2_14-ow1_tar.gz注意和linux-2.2.14-ow1 相关的所有的安全信息如非可执行堆栈等将被记录到/var/log/messages 中编译确保 /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 目录后再创建新的链接指向新内核源代码目录下的同名的目录这些头文件目录包含着保证内核在系统上正确编译所需要的重要的头文件使用下面的命令来确保系统没有陈旧的.o 文件及依赖关系[root@deep]# cd /usr/src/linux/[root@deep]# make mrproper注意上面的两个命令把以前无意留下来的垃圾文件清除掉现在已经正确地安装了源代码可以通过三种方式来配置你的内核第一种是使用命令 make config 这个命令提供了一个基千文本的交互式的内核选项配置方式第二种是使用命令 make menuconfig 它提供了一个易千使用的菜单式的配置界面第三种方式是使用命令 make xconfig 它提供了一个完全的图形化的内核配置界面这里我们以make c onfig 为例来说明其他两种方式类似.[root@deep]# cd /usr/src/linux/[root@deep]# make config内核配置Code maturity level optionsPrompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL) [N] Processor type and featuresProcessor family (CONFIG_M386) [Ppro/6x86MX]Maximum physical Memory (CONFIG_1GB) [1GB]Math emulation (CONFIG_MATH_EMULATION) [N]MTRR Memory Type Range Register support (CONFIG_MTRR) [N]Symmetric multi-processing support (CONFIG_SMP) [Y] NLoadable module supportEnable loadable module support (CONFIG_MODULES) [Y] NGeneral setupNetworking support (CONFIG_NET) [Y]PCI support (CONFIG_PCI) [Y]PCI access mode (BIOS, Direct, Any) [Any]PCI quirks (CONFIG_PCI_QUIRKS) [Y] NBackward-compatible /proc/pci (CONFIG_PCI_OLD_PROC) [Y] NMCA support (CONFIG_MCA) [N]SGI Visual Workstation support (CONFIG_VISWS) [N]System V IPC (CONFIG_SYSVIPC) [Y]BSD Process Accounting (CONFIG_BSD_PROCESS_ACCT) [N]Sysctl support (CONFIG_SYSCTL) [Y]Kernel support for a.out binaries (CONFIG_BINFMT_AOUT) [Y]Kernel support for ELF binaries (CONFIG_BINFMT_ELF) [Y]Kernel support for MISC binaries (CONFIG_BINFMT_MISC) [Y]Parallel port support (CONFIG_PARPORT) [N]Advanced Power Management BIOS supports (CONFIG_APM) [N]Plug and Play supportPlug and Play support (CONFIG_PNP) [N]Block devicesNormal PC floppy disk support (CONFIG_BLK_DEV_FD) [Y]Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (CONFIG_BLK_DEV_IDE) [Y] Use old disk-only driver on primary interface (CONFIG_BLK_DEV_HD_IDE) [N] Include IDE/ATA-2 disk support (CONFIG_BLK_DEV_IDEDISK) [Y]Include IDE/ATAPI CDROM support (CONFIG_BLK_DEV_IDECD) [Y]Include IDE/TAPE support (CONFIG_BLK_DEV_IDETAPE) [N]Include IDE/FLOPPY support (CONFIG_BLK_DEV_IDEFLOPPY) [N]SCSI emulation support (CONFIG_BLK_DEV_IDESCSI) [N]CMD640 chipset bugfix/support (CONFIG_BLK_DEV_CMD640) [Y] NRZ1000 chipset bugfix/support (CONFIG_BLK_DEV_RZ10000 [Y] NGeneric PCI IDE chipset support (CONFIG_BLK_DEV_IDEPCI) [Y]Generic PCI bus-master DMA support (CONFIG_BLK_DEV_IDEDMA) [Y]Boot off-board chipsets first support (CONFIG_BLK_DEV_OFFBOARD) [N]Use DMA by default when available (CONFIG_IDEDMA_AUTO) [Y]Other IDE chipset support (CONFIG_IDE_CHIPSETS) [N]Loopback device support (CONFIG_BLK_DEV_LOOP) [N]Network block device driver support (CONFIG_BLK_DEV_NBD) [N]Multiple device driver support (CONFIG_BLK_DEV_MD) [N]RAM disk support (CONFIG_BLK_DEV_RAM) [N]XT hard disk support (CONFIG_BLK_DEV_XD) [N]Mylex DAC960/DAC1100 PCI RAID Controller support (CONFIG_BLK_DEV_DAC960) [N] Parallel port IDE device support (CONFIG_PARIDE) [N]Compaq SMART2 support (CONFIG_BLK_CPQ_DA) [N]Networking optionsPacket socket (CONFIG_PACKET) [Y]Kernel/user netlink socket (CONFIG_NETLINK) [N]Network firewalls (CONFIG_FIREFALL) [N] YSocket filtering (CONFIG_FILTER) [N]Unix domain sockets (CONFIG_UNIX) [Y]TCP/IP networking (CONFIG_INET) [Y]IP:Multicasting (CONFIG_IP_MULTICAST) [N]IP:Advanced router (CONFIG_IP_ADVENCED_ROUTER) [N]IP:Kernel level autoconfiguration (CONFIG_IP_PNP) [N]IP:Firewalling (CONFIG_IP_FIREWALL) [N] YIP:Transparent proxy support (CONFIG_IP_TRANSPARENT_PROXY) [N]IP:Masquerading (CONFIG_IP_MASQUERADE0 [N]IP:ICMP masquerading (CONFIG_IP_MASQUERADE_ICMP) [N]IP:Optimize as router not host (CONFIG_IP_ROUTER) [N]IP:Tunneling (CONFIG_NET_IPIP) [N]IP:GRE tunnels over IP (CONFIG_NET_IPGRE) [N]IP:Aliasing support (CONFIG_IP_ALIAS) [N]IP:TCP syncookie support (CONFIG_SYN_COOKIES) [N] YIP:Reverse ARP (CONFIG_INET_RARP) [N]IP:Allow large windows (CONFIG_SKB_LARGE) [Y]The IPX protocol (CONFIG_IPX) [N]AppleTalk DDP (CONFIG_ATALK) [N]Telephony supportLinux telephony support (CONFIG_PHONE) [N/y/m/?] (NEW)SCSI supportSCSI support (GONFIG_SCSI) [Y]SCSI disk support (CONFIG_BLK_DEV_SD) [Y]SCSI tape support (CONFIG_CHR_DEV_ST) [N]SCSI CD-ROM support (CONFIG_BLK_DEV_SR) [N]SCSI generic support (CONFIG_CHR_DEV_SG) [N]Probe all LUMs on each SCSI device (CONFIG_SCSI_MULTI-LUM) [Y] NVerbose SCSI error reporting (kernel size +=12K) (CONFIG_SCSI_CONSTANTS) [Y] N SCSI logging facility (CONFIG_SCSI_LOGGING) [N]SCSI low-level drivers7000FASST SCSI support (CONFIG_SCSI_7000FASST) [N]ACARD SCSI support (CONFIG_SCSI_ACARD) [N]Adaptec AHA152X/2825 support (CONFIG_SCSI_AHA152X) [N]Adaptec AHA1542 support (CONFIG_SCSI_AHA1542) [N]Adaptec AHA1740 support (CONFIG_SCSI_AHA1740) [N]Adaptec AIC7xxx support (CONFIG_SCSI_AIC7XXX) [N] YEnable Tagged Command Queuering (CONFIG_AIC7XXX_TCQ_ON_BY_DEFAULT) [N] Y Maximum number of TCQ commands per device (CONFIG_AIC7XXX_CMDS_PER_DEVICE) [8]Collect statistics to report in /proc (CONFIG_AIC7XXX_PROC_STATS) [N]Delay in seconds after SCSI bus reset (CONFIG_AIC7XXX_RESET_DELAY) [5]IBM ServeRAID support (CONFIG_SCSI_IPS) [N]AdvanSys SCSI support (CONFIG_SCSI_ADVANSYS) [N]Always IN2000 SCSI support (CONFIG_SCSI_IN2000) [N]AM53/79C974 PCI SCSI support (CONFIG_SCSI_AM53C974) [N]AMI MegaRAID support (CONFIG_SCSI_MEGARAID) [N]BusLogic SCSI support (CONFIG_SCSI_BUSLOGIC) [N]DTC3180/3280 SCSI support (CONFIG_SCSI_DTC3280) [N]EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards) support (CONFIG_SCSI_EATA) [N]EATA-DMA (DPT, NEC, AT&T, SNI, AST, Olivetti, Alphatronix) support(CONFIG_SCSI_EATA_DMA) [N]EATA-PIO (old DPT PM2001, PM2012A) support (CONFIG_SCSI_EATA_PIO) [N]Future Domain 16xx SCSI/AHA-2920A support (CONFIG_SCSI_FUTURE_DOMAIN) [N] GDT SCSI Disk Array Controller support (CONFIG_SCSI_GDTH) [N]Generic NCR5380/53c400 SCSI support (CONFIG_SCSI_GENERIC_NCR5380) [N]Initio 9100U(W) support (CONFIG_SCSI_INITIO) [N]Initio INI-A100U2W support (CONFIG_SCSI_INIA100) [N]NCR53c406a SCSI support (CONFIG_SCSI_NCR53C406A) [N]symbios 53c416 SCSI support (CONFIG_SCSI_SYM53C416) [N]Simple 53c710 SCSI support (Compaq, NCR machines) (CONFIG_SCSI_SIM710) [N] NCR53c7,8xx SCSI support (CONFIG_SCSI_NCR53C7xx) [N]NCR53C8XX SCSI support (CONFIG_SCSI_NCR53C8XX) [N]SYM53C8XX SCSI support (CONFIG-SCSI_SYM53C8XX) [Y] NPAS16 SCSI support (CONFIG_SCSI_PAS16) [N]PCI2000 support (CONFIG_SCSI_PCI2000) [N]PCI2220i support (CONFIG_SCSI_PCI2220I) [N]PSI240i support (CONFIG_SCSI_PSI240I) [N]Qlogic FAS SCSI support (CONFIG_SCSI_QLOGIC_FAS) [N]Qlogic ISP SCSI support (CONFIG_SCSI_QLOGIC_ISP) [N]Qlogic ISP FC SCSI support (CONFIG_SCSI_QLOGIC_FC) [N]Seagate ST-02 and Future Domain TMC-8xx SCSI support (CONFIG_SCSI_SEAGATE) [N] Tekram DC390(T) and Am53/79C974 SCSI support (CONFIG_SCSI_DC390T) [N]Trantor T128/T128F/T228 SCSI support (CONFIG_SCSI_T128) [N]UltraStor 14F/34F support (CONFIG_SCSI_U14_34F) [N]UltraStor SCSI support (CONFIG_SCSI_ULTRASTOR) [N]Network device supportNetwork device support (CONFIG_NETDEVICES) [Y]ARQnet devicesARCnet support (CONFIG_ARCNET) [N]Dummy net driver support (CONFIG_DUMMY) [M] YEQL (serial line load balancing) support (CONFIG_EQUALIZER) [N]General Instruments Surfboard 1000 (CONFIG_NET_SB1000) [N]Ethernet (10 or 100Mbit)Ethernet (10 or 100Mbit) (CONFIG_NET_ETHERNET) [Y]3COM cards (CONFIG_NET_VENDOR_3COM) [N]AMD LANCE and PCnet (AT1500 and NE2100) support (CONFIG_LANCE) [N]Western Digital/SMC cards (CONFIG_NET_VENDOR_SMC) [N]Racal-Interlan (Micom) NI cards (CONFIG_NET_VENDOR_RACAL) [N]Other ISA cards (CONFIG_NET_ISA) [N]EISA, VLB, PCI and on board controllers (CONDIF_NET_EISA) [Y]AMD PCnet32 (VLB and PCI) support (CONFIG_PCNET32) [N]Apricot Xen-II on board Ethernet (CONFIG_APRICOT) [N]CS89x0 support (CONFIG_CS89x0) [N]DM9102 PCI Fast Ethernet Adapter support (EXPERIMENTAL) (CONFIG_DM9102) [N] Generic DECchip & DIGITAL EtherWORKS PCI/EISA (CONFIG_DE4X5) [N]DECchip Tulip (dc21x4x) PCI support (CONFIG_DEC_ELCP) [N]Digi Intl. RightSwitch SE-X support (CONFIG_DGRS) [N]EtherExpressPro/100 support (CONFIG_EEXPRESS_PRO100) [Y]PCI NE2000 support (CONFIG_NE2K_PCI) [N]TI ThunderLAN support (CONFIG_TLAN) [N]VIA Rhine support (CONFIG_VIA_RHINE) [N]SiS 900/7016 PCI Fast Ethernet Adapter support (CONFIG_SIS900) [N/y/m/?] (NEW) Pocket and portable adaptors (CONFIG_NET_POCKET) [N]SysKonnect SK-98xx support (CONFIG_SK98LIN) [N/y/m/?] (NEW)FDDI driver support (CONFIG_FDDI) [N]PPP (point-to-point) support (CONFIG_PPP) [N]SLIP (serial line) support (CONFIG_SLIP) [N]Wireless LAN (non-hamradio) (CONFIG_NET_RADIO) [N]Token ring devicesToken Ring driver support (CONFIG_TR) [N]Fibre Channel driver support (CONFIG_NET_FC) [N]Wan interfacesComtrol Hostess SV-11 support (CONFIG_HOSTESS_SV11) [N]COSA/SRP sync serial boards support (CONFIG_COSA) [N]Sealevel Systems 4021 support (CONFIG_SEALEVEL_4021) [N]MultiGate (COMX) synchronous serial boards support (CONFIG_COMX) [N/y/m/?] (NEW)Frame relay DLCI support (CONFIG_DLCI) [N]WAN drivers (CONFIG_WAN_DRIVERS) [N]SBNI12-xx support (CONFIG_SBNI) [N]Amateur Radio supportAmateur Radio support (CONFIG_HAMRADIO) [N]IrDA subsystem supportIrDA subsystem support (CONFIG_IRDA) [N]ISDN subsystemISDN support (CONFIG_ISDN) [N]Old CD-ROM drivers (not SCSI, not IDE)Support non-SCSI/IDE/ATAPI CDROM drives (CONFIG_CD_NO_IDESCSI) [N] Character devicesVirtual terminal (CONFIG_VT) [Y]Support for console on virtual terminal (CONFIG_VT_CONSOLE) [Y]Standard/generic (dumb) serial support (CONFIG_SERIAL) [Y]Support for console on special port (CONFIG_SERIAL_CONSOLE) [N]Extended dumb serial driver options (CONFIG_SERIAL_EXTENDED) [N]Non-standard serial port support (CONFIG_SERIAL_NONSTANDAR) [N]Unix98 PTY support (CONFIG_UNIX98_PTYS) [Y]Maximum numbers of Unix98 PTYs in use (0-2048) (CONFIG_UNIX98_PTY_COUNT) [256] 128Mouse support (Not serial mice) (CONFIG_MOUSE) [Y]MiceATIXL busmouse support (CONFIG_ATIXL_BUSMOUSE) [N]Logitech busmouse support (CONFIG_BUSMOUSE) [N]Microsoft busmouse support (CONFIG_MS_BUSMOUSE) [N]PS/2 mouse (aka 揆uxiliary device? support (CONFIG_PSMOUSE) [Y]C&T 82C710 mouse port support (CONFIG_82c710_MOUSE) [Y] NPC110 digitizer pad support (CONFIG_PC110_PAD) [N]Joystick supportJoystick support (CONFIG_JOYSTICK) [N]QIC-02 tape support (CONFIG_QIC02_TAPE) [N]Watchdog Timer support (CONFIG_WATCHDOG) [N]/dev/nvram support (CONFIG_NVRAM) [N]Enhanced Real Time Clock support (CONFIG_RTC) [N]Video for LinuxVideo for Linux (CONFIG_VIDEO_DEV) [N]Double Talk PC internal speech controller support (CONFIG_DTLK) [N] Ftape, the floppy tape device driverFtape (QIC-80/Travan) support (CONDFIG_FTAPE) [N]FilesystemsQuota support (CONFIG_QUOTA) [N] YKernel automounter support (CONFIG_AUTOFS_FS) [Y] NAmiga FFS filesystem support (CONFIG_AFFS_FS) [N]Apple Macintosh filesystem support (CONFIG_HFS_FS) [N]DOS FAT fs support (CONFIG_FAT_FS) [N]ISO 9660 CDROM filesystem support (CONFIG_ISO9660FS) [Y]Microsoft Joliet CDROM extensions (CONFIG_JOLIET) [N]Minix fs support (CONFIG_MINIX_FS) [N]NTFS filesystem support (CONFIG_NTFS_FS) [N]OS/2 MPFS filesystem support (CONFIG_HPFS_FS) [N]/proc filesystem support (CONFIG_PROC_FS) [Y]/dev/pts filesystem support (CONFIG_DEVPTS_FS) [Y]ROM filesystem support (CONFIG_ROMFS_FS) [N]Second extended filesystem (CONFIG_EXT2_FS) [Y]System V and coherent filesystem support (CONFIG_SYSV_FS) [N]UFS filesystem support (CONFIG_UFS_FS) [N]Network File SystemsCoda filesystem support (Advanced Network fs) (CONFIG_CODA_FS) [N] NFS filesystem support (CONFIG_NFS_FS) [Y] NSMB filesystem support (CONFIG_SMB_FS) [N]NCP filesystem support (CONFIG_NCP_FS) [N]Partition TypesBSD disklabel (BSD partition tables) support (CONFIG_BSD_DISKLABEL) [N] Macintosh partition map support (CONFIG_MAC_PARTION) [N]SMD disklabel (Sun partition tables) support (CONFIG_SMD_DISKLABEL) [N]Solaris (x86) partition table support (CONFIG_SOLARIS_X86_PARTITION) [N]Console driversVGA text console (CONFIG_VGA_CONSOLE) [Y]Video mode selection support (CONFIG_VIDEO_SELECT) [N]SoundSound card support (CONFIG_SOUND) [N](Security options will appear only if your are patched your kernel with the Openwall Project patch).Security optionsNon-executable user stack area (CONFIG_SECURE_STACK) [Y]Autodetect and emulate GCC trampolines (CONFIG_SECURE_STACK_SMART) [Y] Restricted links in /tmp (CONFIG_SECURE_LINK) [Y]Restricted FIFOs in /tmp (CONFIG_SECURE_FIFO) [Y]Restricted /proc (CONFIG_SECURE_PROC) [N] YSpecial handling of fd 0, 1, and 2 (CONFIG_SECURE_FD_0_1_2) [Y]Enforce RLIMIT_NPROC on execve(2) (CONFIG_SECURE_RLIMIT_NPROC) [Y]Destroy shared memory segments not in use (CONFIG_SECURE_SHM) [N] YKernel hackingMagic SysRq key (CONFIG_MAGIC_SYSRQ) [N]注意各个配置选项的意义可以在查看配置时的帮助现在返回到/usr/src/linux/ 目录下下面开始进行内核编译工作按照下面的命令进行[root@deep]# make dep; make clean; make bzImage这行包含三个命令第一个命令make dep 实际上读取上一步配置过程生成的配置文件来创建对应千配置的依赖关系树从而决定哪些需要编译而哪些不需要第二命令ma k e c l e a n完成删除前面步骤留下的文件以避免出现一些错误第三步make bzImage 实现完全编译内核处理结束以后生成的被压缩的新内核就可以被安装了如果你在回答Enable loadable module support CONFIG_MODULES 选Yes 在安装新内核以前就还需要编译一些模块并且正确地安装通过下面的命令来实现对模块的编译和安装[root@deep]# make modules;make modules_install安装新内核拷贝新内核文件/usr/src/linux/arch/i386/boot/bzImage 到启动目录并改为合适的名字[root@deep]# cp /usr/src/linux/arch/i386/boot/bzImage/boot/vmlinuz-kernel.version.number注意推荐新内核的命名格式为 vmlinuz-2.*.* 给新内核起这样的新名字对千希望用m a k e bootdisk命令来创建一个新的紧急启动盘是有意义的因为m a kebootd i sk 命令对参数有特殊的要求拷贝/usr/src/linux/System.map 到启动目录下并设定合适的名字[root@deep]# cp /usr/src/linux/System.map/boot/System.map-kernel.version.number进入启动目录下将目录下的链接文件vmlinuz 及System.map 指向新的内核[root@deep]# cd /boot[root@deep]# ln -fs vmlinuz-kernel.version.number vmlinuz[root@deep]# ln -fs System.map-kernel.version.number System.map必须将链接文件vmlinuz 及System.map 指向新内核的相关文件因为如果没有新的链接LILO 程序将缺省地自动使用老内核删除启动目录下无用过期的文件[root@deep]# rm -f module-info[root@deep]# rm -f initrd-2.2.12-20.imgmodule-info 链接指向系统的旧内核的模块目录由千现在安装了新内核我们就无需保持这个文件文件i n itr d-2.2.12-2包含在可以使用磁盘之前初始化系统所需的RAM 盘映像这个文件只有在系统有 scsi 设备的情况下才会在安装系统时生成由千这里生成编译的是一个单块非模块化的新内核所以即使系统有 scsi 设备这里仍然可以安全的删除该文件创建一个新Linux 内核目录使以后编译的程序可以到和该内核相关的系统头文件为了编译内核前面在/usr/include/ 目录下创建了三个符号链接由千顺利地进行了新内核的编译所以编译的程序也应该是成功的/usr/indlude 目录是包含所有的系统头文件的目录编译程序时系统会到该目录下寻头文件信息当被编译的程序需要系统当前内核的某些函数信息时就会使用asm linux 及scsi 链接来获取信息[root@deep]# mkdir -p /usr/src/linux-2.2.14/include[root@deep]# cp -r /usr/src/linux/include/asm-generic/usr/src/linux-2.2.14/include[root@deep]# cp -r /usr/src/linux/include/asm-i386/usr/src/linux-2.2.14/include[root@deep]# cp -r /usr/src/linux/include/linux /usr/src/linux-2.2.14/include [root@deep]# cp -r /usr/src/linux/include/net /usr/src/linux-2.2.14/include [root@deep]# cp -r /usr/src/linux/include/video /usr/src/linux-2.2.14/include [root@deep]# cp -r /usr/src/linux/include/scsi /usr/src/linux-2.2.14/include [root@deep]# rm -rf /usr/src/linux[root@deep]# cd /usr/src[root@deep]# ln -s /usr/src/linux-2.2.14 linux首先创建一个新的根据新内核的版本命名的子目录 Linux-2.2.14 然后拷贝/usr/linux/include的子目录as m-gener i c asm-i386linux,net video及sc si到/usr/src/linux-2.2.14/include 然后删除整个编译新内核的子目录创建一个新的符号链接 linux 指向/usr/src/linux-2.2.14/ 从而随后的编译新的程序可以正确地到和新内核相对应的头文件信息最后编辑/etc/lilo.conf 加入新内核作为引导选项第一步编辑文件lilo.conf 文件vi /etc/lilo.conf 对image=/boot/ 一行做适当的修改[root@deep]# vi /etc/lilo.conf例boot=/dev/sdamap=/boot/mapinstall=/boot/boot.bprompttimeout=00restrictedpassword=somepasswdimage=/boot/vmlinuz-kernel.version.number #(add your new kernel name file here). label=linuxroot=/dev/sda6read-only注意记住删除包含i n i t r d=/boo t/i n i trd-2.2.12-20.img一行的内容因为单块非模块化的内核不需要initrd 文件第二步更新对lilo.conf 作的修改[root@deep]# /sbin/lilo -vLILO version 21, [Copyright 1992-1998 Werner AlmesbergerReading boot sector from /dev/sdaMerging with /boot/boot.bBoot image: /boot/vmlinuz-2.2.14Added linux */boot/boot.0800 exits ?no backup copy made.Writing boot sector.注意如果在配置新内核回答Uni x98PTY sup port(C ONFIG_UNIX98_PTY S)为No 时则需要编辑文件/etc/fstab 删除下面一行none /dev/pts devpts gid=5,mode=620 0 0删除和模块相关的程序文件和内容缺省地当你第一次安装RedHat 版本的Linux 时内核是被编译为模块化的方式也就是说需要的每个设备或功能都作为一个模块存在并且由名为ke r n e l d 的内核守护进程在2.2.*版本名为kmod 在需要时自动将功能对应的模块加载到内核里在不需要时自动将其从内核中去除kerneld 守护进程使用 /etc/conf.modules 文件来获取模块信息例如网卡需要特殊的参数时 kerneld 从文件 conf.modules 中取得网卡模块的相关参数但是由千我们这里编译得到的内核是单块非模块化内核所以我们不需要/etc/conf.modules 文件并且可以删除 modutils 程序Modutils 软件包包括程序 kerneld 用千实现自动从内核中加载和删除模块需要加载的模块一般完成设备驱动及文件系统功能为了去除conf.modules 文件使用命令[root@deep]# rm -f /etc/conf.modules为了卸载m odutils 包使用命令[root@deep]# rpm -e --nodeps modutils最后编辑文件rc.sysinit 将所有的有depmod —a 内容的行注释掉通过在相关行前面加#注释掉这些行是因为在启动时系统会缺省的读取 rc.sysinit 脚本文件来查看模块依赖性在rc.sysinit 文件中做如下修改if [ -x /sbin/depmod -a -n "$USEMODULES" ]; then改为#if [ -x /sbin/depmod -a -n "$USEMODULES" ]; thenif [ -L /lib/modules/default ]; thenINITLOG_ARGS= action "Finding module dependencies" depmod -a defaultelseINITLOG_ARGS= action "Finding module dependencies" depmod -afifi改为# if [ -L /lib/modules/default ]; then# INITLOG_ARGS= action "Finding module dependencies" depmod -a default# else# INITLOG_ARGS= action "Finding module dependencies" depmod -a# fi# fi注意再次强调只有在配置内核时对问题Enable loadable module support (C ONFIG_MODULE S)?回答NO时才可以实施删除模块相关内容的步骤现在重新启动机器[root@deep]# reboot系统重新启动以后使用下面的命令来证实使用的是新的内核[root@deep]# uname -aLinux 2.2.14 #1 Mon Jan 10 10:40:35 EDT 2000 i686 unknown 创建新的急救盘如果前面的步骤都很顺利的话应该为新内核创建一个紧急恢复盘以根用户登录使用命令如下[root@deep]# mkbootdisk --device /dev/fd0 2.2.14Insert a disk in /dev/fd0. Any information on the disk will be lost.Press <Enter> to continue or ^C to abort:注意mkbootdisk 程序只能在模块化内核的系统中运行在单块内核系统中是不能使用该命令的什么是拯救Rescue 模式拯救模式Rescue Mode 指从软盘启动一个小型的l inux 系统通过拯救模式使管理员可以在不能从硬盘启动的情况下访问硬盘的数据制作紧急启动软盘由千只能在模块化内核系统中创建紧急恢复盘所以应该寻求另外一种在硬盘上的内核被破坏的情况下启动 linux 系统的方法成功地以根用户身份登录到系统以后按照下面的方法创建一个紧急启动盘将一个软盘格式化[root@deep]# fdformat /dev/fd0H1440Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.Formatting ... doneVerifying ... done拷贝启动目录中的文件vmlinuz 到软盘中[root@deep]# cd /boot[root@deep]# cp vmlinuz /dev/fd0cp: overwrite `/dev/fd0'? y第五亭配置和编译内核这里的的 vmlinuz 是系统启动使用的内核映相使用下面的命令确定内核启动设备[root@deep]# rdev/dev/sda12 /内核的根设备root de v i ce是指根文件系统所在的分区这里的例子根设备为/dev/sda12 你的系统也许会不同设置内核的根设备[root@deep]# rdev /dev/fd0 /dev/sda12第二个参数就是第三步得到的值设置根设备为只读标记[root@deep]# rdev -R /dev/fd0 1这将使 linux 初始将根文件系统以只读模式加载通过设置为只读模式可以避免出现若干警告错误信息然后将启动软盘放进软盘驱动器中重新启动机器[root@deep]# reboot更新/dev 目录下的项若系统内核做了升级或在系统中添加了新的设备就需要确保更新了/dev目录的内容[root@deep]# cd /dev[root@deep]# ./MAKEDEV update注意MAKEDEV 是调用mknod 的一个脚本文件93。
Linux 2.6.19.x内核编译配置选项简介(2)Security Marking对网络包进行安全标记,类似于nfmark,但主要是为安全目的而设计,如果你不明白的话就别选Network packet filtering (replaces ipchains)Netfilter可以对数据包进行过滤和修改,可以作为防火墙("packet filter"或"proxy-based")或网关(NAT)或代理(proxy)或网桥使用.选中此选项后必须将"Fast switching"关闭,否则将前功尽弃Network packet filtering debugging仅供开发者调试Netfilter使用Bridged IP/ARP packets filtering如果你希望使用一个针对桥接的防火墙就打开它Core Netfilter Configuration核心Netfilter配置(当包流过Chain时如果match某个规则那么将由该规则的target来处理,否则将由同一个Chain中的下一个规则进行匹配,若不match所有规则那么最终将由该Chain的policy进行处理)Netfilter netlink interface允许Netfilter在与用户空间通信时使用新的netlink接口.netlink Socket是Linux用户态与内核态交流的主要方法之一,且越来越被重视Netfilter NFQUEUE over NFNETLINK interface通过NFNETLINK接口对包进行排队Netfilter LOG over NFNETLINK interface通过NFNETLINK接口对包记录.该选项废弃了ipt_ULOG和ebg_ulog机制,并打算在将来废弃基于syslog 的ipt_LOG和ip6t_LOG模块Layer 3 Independent Connection tracking独立于第三层的链接跟踪,通过广义化的ip_conntrack支持其它非IP协议的第三层协议Netfilter Xtables support如果你打算使用ip_tables,ip6_tables,arp_tables之一就必须选上"CLASSIFY" target support允许为包设置优先级,一些排队规则(atm,cbq,dsmark,pfifo_fast,htb,prio)需要使用它"CONNMARK" target support类似于"MARK",但影响的是连接标记的值"DSCP" target support允许对ip包头部的DSCP(Differentiated Services Codepoint)字段进行修改,该字段常用于Qos "MARK" target support允许对包进行标记(通常配合ip命令使用),这样就可以改变路由策略或者被其它子系统用来改变其行为"NFQUEUE" target Support用于替代老旧的QUEUE(iptables内建的target之一),因为NFQUEUE能支持最多65535个队列,而QUEUE 只能支持一个"NOTRACK" target support允许规则指定哪些包不进入链接跟踪/NA T子系统"SECMARK" target support允许对包进行安全标记,用于安全子系统"CONNSECMARK" target support针对链接进行安全标记,同时还会将连接上的标记还原到包上(如果链接中的包尚未进行安全标记),通常与SECMARK target联合使用"comment" match support允许你在iptables规则集中加入注释"connbytes" per-connection counter match support允许针对单个连接内部每个方向(进/出)匹配已经传送的字节数/包数"connmark" connection mark match support允许针对每个会话匹配先前由"CONNMARK"设置的标记值"conntrack" connection tracking match support连接跟踪匹配,是"state"的超集,它允许额外的链接跟踪信息,在需要设置一些复杂的规则(比如网关)时很有用"DCCP" protocol match supportDCCP是打算取代UDP的新传输协议,它在UDP的基础上增加了流控和拥塞控制机制,面向实时业务"DSCP" match support允许对IP包头的DSCP字段进行匹配"ESP" match support允许对IPSec包中的ESP头进行匹配,使用IPsec的话就选上吧"helper" match support加载特定协议的连接跟踪辅助模块,由该模块过滤所跟踪的连接类型的包,比如ip_conntrack_ftp模块"length" match support允许对包的长度进行匹配"limit" match support允许根据包的进出速率进行规则匹配,常和"LOG target"配合使用以抵抗某些Dos攻击"mac" address match support允许根据以太网的MAC进行匹配,常用于无线网络环境"mark" match support允许对先前由"MARK"标记的特定标记值进行匹配IPsec "policy" match support使用IPsec就选上吧Multiple port match support允许对TCP或UDP包同时匹配多个端口(通常情况下只能匹配一个端口)"physdev" match support允许对到达的或将要离开的物理桥端口进行匹配"pkttype" packet type match support允许对封包目的地址类别(广播/群播/直播)进行匹配"quota" match support允许对总字节数的限额值进行匹配"realm" match support允许对iptables中的路由子系统中的realm值进行匹配"sctp" protocol match support流控制传输协议(SCTP),十年以后也许能够普及的东西"state" match support这是对包进行分类的有力工具,它允许利用连接跟踪信息对连接中处于特定状态的包进行匹配"statistic" match support允许根据一个给定的百分率对包进行周期性的或随机性的匹配"string" match support允许根据包所承载的数据中包含的特定字符串进行匹配"tcpmss" match support允许根据TCP SYN包头中的MSS(最大分段长度)选项的值进行匹配IP: Netfilter Configuration针对IPv4的Netfilter配置Connection tracking (required for masq/NAT)链接跟踪.可用于报文伪装或地址转换,也可用于增强包过滤能力Connection tracking flow accounting允许针对每个连接记录已经传送的字节/包数,常用于connbytes matchConnection mark tracking support允许对连接进行标记,与针对单独的包进行标记的不同之处在于它是针对连接流的.CONNMARK target和connmark match需要它的支持Connection tracking security mark support允许对连接进行安全标记,通常这些标记包(SECMARK)复制到其所属连接(CONNSECMARK),再从连接复制到其关联的包(SECMARK)Connection tracking events连接跟踪事件支持.如果启用这个选项,连接跟踪代码将提供一个notifier链,它可以被其它内核代码用来获知连接跟踪状态的改变Connection tracking netlink interface支持基于netlink的用户空间接口SCTP protocol connection tracking supportSCTP是IP网面向多媒体通信的新一代的流控制传输协议FTP protocol supportFTP协议IRC protocol supportIRC协议是一种用来实时聊天协议,用过mIRC的人应当不陌生NetBIOS name service protocol supportNetBIOS名字服务协议TFTP protocol supportTFTP是基于UDP的比FTP简单的文件传输协议Amanda backup protocol supportAmanda备份协议PPTP protocol support点对点隧道协议(PPTP)是一种支持多协议虚拟专用网络的网络技术,ADSL用户对它应该很熟悉H.323 protocol supportITU-T提出的用于IP电话的协议SIP protocol supportIETE提出的用于IP电话的协议IP Userspace queueing via NETLINK已废弃IP tables support (required for filtering/masq/NAT)要用iptables就肯定要选上IP range match support允许对ip地址的范围进行匹配TOS match support允许对ip包头的TOS(Type Of Service)字段进行匹配recent match support可以创建一个或多个刚刚使用过的ip地址列表,然后根据这些列表进行匹配ECN match support允许对TCP/IP包头的ECN(Explicit Congestion Notification)字段进行匹配.ECN是一种显式拥塞通知技术,它不但要求路由器支持而且要求端到端主机的支持,其基本思想是当路由器发生早期拥塞时不是丢弃包而是尽量对包进行标记,接收方接到带有ECN提示的包时,通知发送方网络即将发生拥塞,也就是它通过对包的标记提示TCP源即将发生拥塞,从而引发拥塞避免算法AH match support允许对IPSec包头的AH字段进行匹配TTL match support允许对ip包头的TTL(生存期)字段进行匹配Owner match support允许对本地生成的包按照其宿主(user,group,process,session)进行匹配address type match support允许对地址类型(单播,本地,广播)进行匹配hashlimit match support是limit的升级,它基于你选择的ip地址与/或端口动态的创建以limit为桶(bucket)的哈希表.它可以创建诸如"为每个特定的目标IP分配10kpps"或"允许每个特定的源IP分配500pps"之类的规则Packet filtering定义filter表以允许对包进行过滤REJECT target support允许返回一个ICMP错误而不是简单的丢弃包LOG target support允许将符合条件的包头信息通过syslog进行记录ULOG target support透过netlink socket将符合条件的封包交给用户空间的ulogd守护进程.反对使用该选项,因为它已经被NETFILTER_NETLINK_LOG代替TCPMSS target support允许修改TCP包头中的MSS(最大分段长度)选项值Full NAT允许进行伪装/端口转发以及其它的NA T功能,仅在你需要使用iptables中的nat表时才需要选择Packet mangling在iptables中启用mangle表以便对包进行各种修改,常用于改变包的路由raw table support (required for NOTRACK/TRACE)在iptables中添加一个'raw'表,该表在netfilter框架中非常靠前,并在PREROUTING和OUTPUT链上有钩子,从而可以对收到的数据包在连接跟踪前进行处理ARP tables supportARP表支持.只有在局域网中才有ARP欺骗问题,另外路由器也会遭到ARP欺骗ARP packet filteringARP包过滤.对于进入和离开本地的ARP包定义一个filter表,在桥接的情况下还可以应用于被转发ARP包ARP payload mangling允许对ARP包的荷载部分进行修改,比如修改源和目标物理地址IPv6: Netfilter Configuration针对IPv6的Netfilter配置,需要的话可以参考前面IPv4的Netfilter配置进行选择DECnet: Netfilter Configuration针对DECnet的Netfilter配置Bridge: Netfilter Configuration针对桥接的Netfilter配置DCCP Configuration数据报拥塞控制协议在UDP的基础上增加了流控和拥塞控制机制,使数据报协议能够更好地用于流媒体业务的传输SCTP Configuration流控制传输协议是一种新兴的传输层协议.TCP协议一次只能连接一个IP地址而在SCTP协议一次可以连接多个IP地址且可以自动平衡网络负载,一旦某一个IP地址失效会自动将网络负载转移到其他IP地址上TIPC Configuration透明内部进程间通信协议,以共享内存为基础实现任务和资源的调度,专门用于内部集群通信Asynchronous Transfer Mode (ATM)异步传输模式(ATM)支持802.1d Ethernet Bridging802.1d以太网桥802.1Q VLAN Support802.1Q虚拟局域网DECnet SupportDECnet是一种很生僻的协议ANSI/IEEE 802.2 LLC type 2 Support看不懂可以不选The IPX protocolIPX协议Appletalk protocol support与Mac机器通信的协议CCITT X.25 Packet Layer大约没人需要这东西LAPB Data Link Driver大约没人需要这东西Acorn Econet/AUN protocols一种被Acorn计算机使用的又老又慢的协议WAN router广域网路由QoS and/or fair queueing如果你需要Qos或公平队列就选吧Network testing网络测试,仅供调试使用Amateur Radio support业余无线电支持IrDA (infrared) subsystem support红外线支持,比如无线鼠标或无线键盘Bluetooth subsystem support蓝牙支持Generic IEEE 802.11 Networking Stack通用无线局域网(IEEE 802.11系列协议)支持Device Drivers设备驱动程序Generic Driver Options驱动程序通用选项Select only drivers that don't need compile-time external firmware只显示那些不需要内核对外部设备的固件作map支持的驱动程序,除非你有某些怪异硬件,否则请选上Prevent firmware from being built不编译固件.固件一般是随硬件的驱动程序提供的,仅在更新固件的时候才需要重新编译.建议选上Userspace firmware loading support提供某些内核之外的模块需要的用户空间固件加载支持,在内核树之外编译的模块可能需要它Driver Core verbose debug messages让驱动程序核心在系统日志中产生冗长的调试信息,仅供调试Connector - unified userspace <-> kernelspace linker统一的用户空间和内核空间连接器,工作在netlink socket协议的顶层.不确定可以不选Report process events to userspace向用户空间报告进程事件(fork,exec,id变化(uid,gid,suid)Memory Technology Devices (MTD)特殊的存储技术装置,如常用于数码相机或嵌入式系统的闪存卡Parallel port support并口支持(传统的打印机接口)Plug and Play support即插即用支持,若未选则应当在BIOS中关闭"PnP OS".这里的选项与PCI设备无关PnP Debug Messages该选项仅供调试使用ISA Plug and Play supportISA设备即插即用支持Plug and Play BIOS supportLinux 使用"Plug and Play BIOS"规范v1.0A(1994年)中定义的PNPBIOS自动检测主板上的资源和设备,但是其中的某些特性目前尚未实现,比如:事件通知/扩展坞(Docking Station)信息/ISAPNP服务.如果你希望由内核检测主板上的设备并为其分配资源(此时BIOS中的"PnP OS"必须开启)可以选上,此外,PNPBIOS还有助于防止主板上的设备与其他总线设备冲突.不过需要注意的是ACPI将会逐渐取代PNPBIOS(虽然目前两者可以共存),所以如果你的系统不使用ISA设备并且支持ACPI,建议你不要选中该选项并将BIOS中的"PnP OS"关闭Plug and Play BIOS /proc interface该选项仅供调试使用Plug and Play ACPI support让Linux使用PNPACPI自动检测主板上内建的设备并为其分配资源(即使这些设备已被BIOS禁用),它有助于避免设备之间的资源(如中断)冲突Block devices块设备Normal floppy disk support通用软驱支持XT hard disk support古董级产品Parallel port IDE device support通过并口与计算机连接的IDE设备,比如某些老旧的外接光驱或硬盘之类Compaq SMART2 support基于Compaq SMART2控制器的磁盘阵列卡Compaq Smart Array 5xxx support基于Compaq SMART控制器的磁盘阵列卡Mylex DAC960/DAC1100 PCI RAID Controller support古董级产品Micro Memory MM5415 Battery Backed RAM support一种使用电池做后备电源的内存Loopback device supportLoopback是指拿文件来模拟块设备,比如可以将一个iso9660镜像文件挂成一个文件系统Cryptoloop Support使用系统提供的加密API对Loopback设备加密,但不能用于日志型文件系统Network block device support让你的电脑成为网络块设备的客户端Promise SATA SX8 support基于Promise公司的SATA SX8控制器的RAID卡Low Performance USB Block driver它不是用来支持U盘的,不懂的就别选RAM disk support内存中的虚拟磁盘,大小固定(由下面的选项决定,也可给内核传递"ramdisk_size=参数"来决定),它的功能和代码都比shmem简单许多Default number of RAM disks默认RAM disk的数量Default RAM disk size (kbytes)仅在你真正知道它的含义时才允许修改Default RAM disk block size (bytes)每一个RAM disk的默认块大小,设为PAGE_SIZE的值时效率最高Initial RAM filesystem and RAM disk (initramfs/initrd) support如果启动计算机所必须的模块都在内核里的话可以不选此项Packet writing on CD/DVD mediaCD/DVD刻录支持Free buffers for data gathering用于收集写入数据的缓冲区个数(每个占用64Kb内存),缓冲区越多性能越好Enable write caching为CD-R/W设备启用写入缓冲,目前这是一个比较危险的选项ATA over Ethernet support以太网ATA设备支持Misc devices杂项设备ATA/ATAPI/MFM/RLL support通常是IDE硬盘和ATAPI光驱.纯SCSI系统且不使用这些接口可以不选Max IDE interfaces最大IDE接口数,两个IDE插槽一般相当于4个接口Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy supportEIDE支持是当然要选的,否则540MB以上的硬盘都不认识而且不支持主从设备Support for SATA (deprecated; conflicts with libata SATA driver)反对使用,该选项与libata SATA驱动有冲突Use old disk-only driver on primary interface没人用这些古董了Include IDE/ATA-2 DISK supportATA-2支持,除非你的硬盘是古董,否则必选Use multi-mode by default如果不确定就别选,除非出现帮助中指出的错误PCMCIA IDE support通过PCMCIA卡与计算机连接的IDE设备,比如某些外置硬盘或光驱Include IDE/ATAPI CDROM support有IDE光驱的就选Include IDE/ATAPI TAPE support有IDE磁带的就选Include IDE/ATAPI FLOPPY support有IDE软驱的就选SCSI emulation supportSCSI仿真,以前刻录光碟时需要,现在不需要了IDE Taskfile Access对介质进行直接的原始访问,它是一个复杂且有效的测试和校验硬件的方案,可以在驱动层之下执行数据恢复工作generic/default IDE chipset support通用IDE芯片组支持CMD640 chipset bugfix/support586以前的主板上常用,毛病多多PNP EIDE support外接的即插即用EIDE卡支持PCI IDE chipset support基于PCI总线的IDE芯片组支持,帮助IDE驱动自动检测和配置所有基于PCI的IDE接口Sharing PCI IDE interrupts support与其他PCI设备共享中断,一来可能冲突,二来降低性能,不选为妙Boot off-board chipsets first support不使用外接IDE控制器的就别选,使用外接IDE控制器的注意看帮助Generic PCI IDE Chipset Support通用的PCI IDE芯片组支持,如果你的芯片组在下面能找到就别选OPTi 82C621 chipset enhanced supportOPTi 82C621 EIDE控制器RZ1000 chipset bugfix/support486/586年代的玩艺Generic PCI bus-master DMA support通用的PCI总线控制器DMA支持,586以上的系统都支持Force enable legacy 2.0.X HOSTS to use DMA历史遗留问题,别管它,不选Use PCI DMA by default when available默认启用DMA,586以上的系统都支持,建议选择Enable DMA only for disks只对硬盘启用DMA,若你的光驱不支持DMA就选上{此处省略的部分按照自己主板上实际使用的芯片组进行选择}Other IDE chipset support其它IDE芯片组支持(多数需要在引导时指定特定的内核参数),如果你使用这样的芯片组就按实际情况选择子项吧IGNORE word93 Validation BITSATA-4和A TA-5规范中对于如何在80针的数据线上探测解释的不明确,导致了两种不同标准的产品同时出现,这可能导致ATA-66/100降低为A TA-33,若出现这个问题,可以打开这个选项忽略这种不同,但是又有可能导致另外的问题Old hard disk (MFM/RLL/IDE) driver旧版本的MFM/RLL/IDE驱动,不建议使用SCSI device supportSCSI设备RAID Transport Class用于SCSI设备的软件RAID支持,需要配合外部工具SCSI device support有任何SCSI/SATA/USB/光纤/FireWire/IDE-SCSI仿真设备之一就必须选上legacy /proc/scsi/ support一些老的刻录程序可能需要它SCSI disk supportSCSI硬盘或U盘SCSI tape supportSCSI磁带SCSI OnStream SC-x0 tape support另一种SCSI磁带SCSI CDROM supportSCSI CDROMEnable vendor-specific extensions仅在古董级的SCSI CDROM设备上才需要SCSI generic support若有SCSI硬盘/CD-ROM/tape之外的SCSI设备才需要选择SCSI media changer support一种SCSI备份设备Probe all LUNs on each SCSI device在每个SCSI设备上探测逻辑设备数.只在一个SCSI设备上有多个逻辑设备(模拟多个SCSI设备,比如多口读卡器)时才需要选它,一般的SCSI设备不需要Verbose SCSI error reporting以易读的方式报告SCSI错误,内核将会增大12KSCSI logging facility启用SCSI日志(默认并不开启,需要在挂载/proc后执行echo "scsi log token [level]" > /proc/scsi/scsi命令才能打开日志),可用于跟踪和捕获SCSI设备的错误SCSI TransportsSCSI接口类型,下面的子项可以全不选,内核中若有其他部分依赖它,会自动选上Parallel SCSI (SPI) Transport Attributes传统且常见的并行SCSI(Ultra320/160之类)FiberChannel Transport Attributes光纤通道iSCSI Transport AttributesiSCSI是利用TCP/IP网络传送SCSI命令和数据的I/O技术SAS Transport Attributes串行SCSI传输属性支持(SAS对于的关系SPI犹如SATA对于ATA)SAS Domain Transport Attributes为使用了SAS Domain的驱动程序提供帮助Compile the SAS Domain Transport Attributes in debug mode仅供调试使用SCSI low-level drivers底层SCSI驱动程序,按你实际使用的产品选择iSCSI Initiator over TCP/IP用于iSCSI在TCP/IP网络上传播的起动程序{此处省略的部分按照自己实际使用的控制器进行选择,仅用一个例子解说子项}Adaptec AIC79xx U320 support以基于PCI-X的Adaptec Ultra 320 SCSI控制器为例解说子项Maximum number of TCQ commands per device每个SCSI设备的标记指令队列的最大长度(上限253).上限越高性能越好,但是对于SCSI设备较多的系统来说可能造成内存分配失败.此值还可以通过tag_info内核引导参数指定Initial bus reset delay in milli-seconds初始总线reset之后的延时微秒数(默认5000)Enable Read Streaming for All Targets对所有的标记队列启用Read Streaming(可以增强效能,但是在一些Adaptec早期的U320产品上有缺陷),此特性还可以通过rd_strm内核引导参数指定Compile in Debugging Code仅用于调试Debug code enable mask (16383 for all debugging)出错代码的掩码,0表示禁止所有,16383表示打开所有Decode registers during diagnostics将出错代码的解释内容编译进去,这样就不需要查看aic7xxx.reg中的出错代码表以确定出错代码的含意了PCMCIA SCSI adapter support通过PCMCIA卡与计算机连接的SCSI设备Serial ATA and Parallel ATA driversSATA与PATA设备ATA device supportSATA或PATA接口的硬盘或光驱等设备AHCI SATA supportSATA高级主机控制器接口.要使用NCQ功能就必须选中它,另外BIOS中的SATA工作模式亦要选AHCI 模式Generic ATA support基于新的ATA层的通用A TA控制器驱动,仅在你的芯片组在列表中找不到时才需要{此处省略的部分按照自己主板上实际使用的芯片组进行选择}Old CD-ROM drivers (not SCSI, not IDE)老旧的CD-ROM驱动,这种CD-ROM既不使用SCSI接口,也不使用IDE接口Multi-device support (RAID and LVM)多设备支持(RAID和LVM).RAID和LVM的功能是使多个物理设备组建成一个单独的逻辑磁盘RAID support软件RAID(需要使用外部工具),若你有硬件RAID控制器,可以不选Linear (append) mode追加模式(简单的将一个分区追加在另一个分区之后)RAID-0 (striping) modeRAID-0(等量分割)模式RAID-1 (mirroring) modeRAID-1(镜像)模式RAID-10 (mirrored striping) modeRAID 0+1模式RAID-4/RAID-5/RAID-6 mode这些模式比较复杂,一般不用Support adding drives to a raid-5 arrayRAID-5阵列可以通过添加额外的驱动器进行扩展(restriping),这个选项允许在线进行这样的操作,同时要求mdadm的版本大于2.4.1Multipath I/O support多路IO支持是指在服务器和存储设备之间使用冗余的物理路径组件创建"逻辑路径",如果这些组件发生故障并造成路径失败,多路径逻辑将为I/O使用备用路径以使应用程序仍然可以访问其数据Faulty test module for MD用于MD(Multi-device)的缺陷测试模块Device mapper supportDevice-mapper是一个底层的卷管理器,不用LVM就别选了Fusion MPT device supportFusion MPT设备支持IEEE 1394 (FireWire) supportIEEE 1394(火线)I2O device supportI2O(智能IO)设备使用专门的I/O处理器负责中断处理/缓冲存取/数据传输等烦琐任务以减少CPU占用,一般的主板上没这种东西Network device support网络设备Network device support网络设备支持,当然要选啦Intermediate Functional Block support这是一个中间层驱动,可以用来灵活的配置资源共享,看不懂的可以不选Dummy net driver support哑接口网络,使用SLIP或PPP传输协议(如ADSL用户)的需要它。