内核编译选项详解
kernel 编译 参数

kernel 编译参数在编译 Linux 内核时,可以使用多种参数来配置和优化内核。
以下是一些常用的参数:1. `make menuconfig`:这是一个基于文本的用户界面,用于配置内核的各个选项。
用户可以选择要包含或排除的功能,并保存配置以便以后使用。
2. `make xconfig`:这是一个基于图形界面的工具,用于配置内核选项。
它使用 Qt 库来创建用户界面,使得配置更加直观和易于使用。
3. `make oldconfig`:如果已经有一个旧的 `.config` 文件,可以使用此参数来快速配置新内核。
它只会询问新内核中与旧配置不同的选项。
4. `make defconfig`:此参数将使用默认配置来编译内核。
这通常是一个针对特定目标硬件的配置,但也可以根据需要手动修改。
5. `make allnoconfig`:此参数将禁用所有启用的内核选项,只启用必需的核心功能。
6. `make allyesconfig`:此参数将启用所有内核选项,不进行任何禁用或排除。
7. `make localmodconfig`:此参数将只启用当前系统上已加载的内核模块。
8. `make localyesconfig`:此参数将启用当前系统上已加载的内核模块,并且不进行任何禁用或排除。
9. `make install`:此参数将编译并安装新内核。
它还会将必要的内核模块和文件复制到相应的目录中,以便在启动时加载新内核。
10. `make -j`:此参数用于并行编译内核,以加快编译速度。
可以指定一个数字来指定要使用的并行进程数。
这些参数可以单独使用,也可以组合使用,具体取决于要执行的操作和目标硬件配置。
在使用 `make` 命令进行内核编译时,建议仔细阅读相关文档以了解更多选项和参数。
Linux 2.6.19.x内核编译配置选项简介(2)

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用户)的需要它。
linux 内核编译编译选项

1.Code maturity level options代码成熟等级。
此处只有一项:prompt for development and/or incomplete code/drivers,如果你要试验现在仍处于实验阶段的功能,就必须把该项选择为Y了;否则可以把它选择为N。
2. Loadable module support对模块的支持。
这里面有三项:Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。
Set version inFORMation on all module symbols:可以不选它。
Kernel module loader:让内核在启动时有自己装入必需模块的能力,建议选上。
3. Processor type and featuresCPU类型。
有关的几个如下:Processor family:根据你自己的情况选择CPU类型。
High Memory Support:大容量内存的支持。
可以支持到4G、64G,一般可以不选。
Math emulation:协处理器仿真。
协处理器是在386时代的宠儿,现在早已不用了。
MTTR support:MTTR支持。
可不选。
Symmetric multi-processing support:对称多处理支持。
除非你富到有多个CPU,否则就不用选了。
4. General setup这里是对最普通的一些属性进行设置。
这部分内容非常多,一般使用缺省设置就可以了。
下面介绍一下经常使用的一些选项:Networking support:网络支持。
必须,没有网卡也建议你选上。
PCI support:PCI支持。
如果使用了PCI的卡,当然必选。
PCI access mode:PCI存取模式。
可供选择的有BIOS、Direct和Any,选Any 吧。
Support for hot-pluggabel devices:热插拔设备支持。
kernel5.10 编译方法 -回复

kernel5.10 编译方法-回复标题:编译Linux Kernel 5.10的详细步骤在Linux的世界中,编译Kernel是一项基础且重要的技能。
本文将详细介绍如何从源代码编译Linux Kernel 5.10。
以下是一步一步的详细教程。
一、准备工作1. 确保系统环境首先,你需要一个运行中的Linux系统。
本文以Ubuntu 20.04为例,但大部分Linux发行版的步骤应该是类似的。
2. 更新系统确保你的系统已经更新到最新版本,可以使用以下命令:sudo apt-get updatesudo apt-get upgrade3. 安装必要的工具编译Kernel需要一些基本的开发工具和库,可以通过以下命令安装:sudo apt-get install build-essential libncurses5-dev bc flex bison openssl libssl-dev dkms二、下载Kernel源代码1. 创建工作目录在你的主目录下创建一个名为kernel的工作目录:mkdir ~/kernelcd ~/kernel2. 下载Kernel源代码你可以从Kernel官网(5.10的源代码:wget3. 解压源代码使用以下命令解压下载的源代码:tar xvf linux-5.10.tar.xz这将在当前目录下创建一个名为linux-5.10的目录,这是Kernel的源代码目录。
三、配置和编译Kernel1. 进入源代码目录cd linux-5.102. 配置Kernel配置Kernel是编译过程中最重要的一步,你可以根据你的硬件和需求选择要编译的功能。
对于大多数用户,使用以下命令进行基本配置应该足够:make menuconfig这将打开一个基于文本的配置界面。
你可以使用方向键和回车键浏览和选择选项。
完成后,保存并退出。
3. 开始编译配置完成后,可以开始编译Kernel了。
这个过程可能需要一些时间,取决于你的计算机性能:make -j(nproc)这里的-j参数表示使用多少个进程进行编译,(nproc)会自动获取你的CPU 核心数。
LINUX内核模块编译步骤

LINUX内核模块编译步骤编译Linux内核模块主要包括以下步骤:1.获取源代码2.配置内核进入源代码目录并运行make menuconfig命令来配置内核。
该命令会打开一个文本菜单,其中包含许多内核选项。
在这里,你可以配置内核以适应特定的硬件要求和预期的功能。
你可以选择启用或禁用各种功能、设备驱动程序和文件系统等。
配置完成后,保存并退出。
3. 编译内核(make)运行make命令开始编译内核。
这将根据你在上一步中进行的配置生成相应的Makefile,然后开始编译内核。
编译的过程可能需要一些时间,请耐心等待。
4.安装模块编译完成后,运行make modules_install命令将编译好的模块安装到系统中。
这些模块被安装在/lib/modules/<kernel-version>/目录下。
5.安装内核运行make install命令来安装编译好的内核。
该命令会将内核映像文件(通常位于/arch/<architecture>/boot/目录下)复制到/boot目录,并更新系统引导加载程序(如GRUB)的配置文件。
6.更新GRUB配置文件运行update-grub命令来更新GRUB引导加载程序的配置文件。
这将确保新安装的内核在下次启动时可用。
7.重启系统安装完成后,通过重启系统来加载新的内核和模块。
在系统启动时,GRUB将显示一个菜单,你可以选择要启动的内核版本。
8.加载和卸载内核模块现在,你可以使用insmod命令来加载内核模块。
例如,运行insmod hello.ko命令来加载名为hello.ko的模块。
加载的模块位于/lib/modules/<kernel-version>/目录下。
如果你想卸载一个已加载的内核模块,可以使用rmmod命令。
例如,运行rmmod hello命令来卸载已加载的hello模块。
9.编写和编译模块代码要编写一个内核模块,你需要创建一个C文件,包含必要的模块代码。
Linux内核编译过程详解

内核升级前的准备工作:Linux系统进行内核升级或定制内核时需要安装GCC编译工具、make编译器,同时变异内核需要root权限。
安装GCC编译环境参考:/rhelinux/248.html操作系统:RHEL 5.5开始安装:按照以下顺序安装所需要的包就可以完成GCC的安装了1. rpm -ivh kernel-headers-2.6.18-194.el5.i386.rpm2. rpm -ivh glibc-headers-2.5-49.i386.rpm3. rpm -ivh glibc-devel-2.5-49.i386.rpm4. rpm -ivh libgomp-4.4.0-6.el5.i386.rpm5. rpm -ivh gcc-4.1.2-48.el5.i386.rpm6. rpm -ivh libstdc++-devel-4.1.2-48.el5.i386.rpm7. rpm -ivh gcc-c++-4.1.2-48.el5.i386.rpm8. rpm -ivh ncurses-5.5-24.20060715.i386.rpm9. rpm -ivh ncurses-devel-5.5-24.20060715.i386.rpm注意:在升级编译完内核,重启后提示如下错误信息:RedHat nash Version 5.1.19.6 startingrver(2.6.33.3)mount: could not find filesystem …/dev/root‟setuproot: moving /dev failed: No such file or directorysetuproot: error mounting /proc: No such file or directorysetuproot: error mounting /sys: No such file or directoryswitchroot: mount failed: No such file or directoryKernel panic – not syncing: Attempted to kill init![Linux-initrd @ 0x1fc37000,0x228585 bytes]于是在网上找了很多,也尝试了很多加模块、重编译了N次、改fstab等方法,都不行。
内核和文件系统编译

内核和文件系统编译【实用版】目录1.编译内核2.编译文件系统3.编译过程中的注意事项正文在内核和文件系统的编译过程中,我们需要遵循一定的步骤和技巧,以确保编译的顺利进行。
下面,我们将详细介绍如何编译内核和文件系统,以及在编译过程中需要注意的事项。
一、编译内核1.获取内核源代码:首先,你需要从内核官方网站上下载最新的内核源代码。
通常情况下,我们使用的是 Linux 内核。
2.配置内核:下载源代码后,需要对其进行配置,以满足你的需求。
这个过程可以通过 make menuconfig 或者 make xconfig 等命令完成。
3.编译内核:配置完成后,就可以使用 make 命令编译内核了。
编译完成后,会生成一个新的内核文件。
4.更新内核:将新的内核文件安装到系统中,替换原有的内核。
这一步通常需要重启系统,以使新内核生效。
二、编译文件系统1.选择文件系统:根据你的需求,选择合适的文件系统。
常见的文件系统有 ext3、ext4、xfs 等。
2.配置文件系统:与编译内核类似,需要对文件系统进行配置。
根据文件系统的不同,配置方法也会有所区别。
3.编译文件系统:配置完成后,使用 make 命令编译文件系统。
编译完成后,会生成一个新的文件系统驱动文件。
4.加载文件系统:将新的文件系统驱动文件加载到系统中,使其生效。
这一步同样需要重启系统。
三、编译过程中的注意事项1.环境准备:在编译之前,确保你的系统环境、编译器和相关工具都处于最新版本。
2.编译选项:根据你的需求和硬件环境,选择合适的编译选项。
例如,你可以选择启用或禁用某些硬件支持、优化编译速度等。
3.错误处理:编译过程中可能会遇到错误,需要仔细阅读错误信息,找出问题所在,并进行解决。
4.编译时间:编译内核和文件系统是一个相对耗时的过程,需要耐心等待。
通过以上步骤,你可以顺利地完成内核和文件系统的编译工作。
linux内核编译 menuconfig详解

内核版本 2.6.32[*]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)内核压缩模式选baip2gzip用于UNIX系统的文件压缩。
后缀为.gz的文件。
现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。
HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。
大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。
bzip2是一个基于Burrows-Wheeler 变换的无损压缩软件,压缩效果比传统的LZ77/LZ78压缩算法来得好。
它是一款免费软件。
bzip2能够进行高质量的数据压缩。
它利用先进的压缩技术,能够把普通的数据文件压缩10%至15%,压缩的速度和解压的效率都非常高!支持现在大多数压缩格式,包括tar、gzip 等等。
lzma是一个Deflate和LZ77算法改良和优化后的压缩算法,开发者是Igor Pavlov,2001年被首次应用于7-Zip压缩工具中,是 2001年以来得到发展的一个数据压缩算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
首先对内核进行菜单配置,代码:CODE:cd /usr/src/linuxmake menuconfig代码成熟度选项,代码:CODE:Code maturity level options --->[*] Prompt for development and/or incomplete code/drivers[*] Select only drivers expected to compile cleanly打开使用开发中、不完全的代码/驱动会让内核配置多出很多选项,由于我们需要使用一些正在开发中的功能,因此必需打开这一选项。
通用设置选项代码:CODE:General setup --->() Local version - append to kernel release[*] Support for paging of anonymous memory (swap)[*] System V IPC[*] POSIX Message Queues[*] BSD Process Accounting[*] BSD Process Accounting version 3 file format[*] Sysctl support[] Auditing support(15) Kernel log buffer size (16 => 64KB, 17 => 128KB)[*] Support for hot-pluggable devices[*] Kernel Userspace Events[*] Kernel .config support[*] 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[*] Enable eventpoll support[*] Optimize for size[*] Use full shmem filesystem(0) Function alignment(0) Label alignment(0) Loop alignment(0) Jump alignmentLocal 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:这是充许用户进程访问内核将账户信息写入文件中的。
这通常被认为是个好主意,建议你最好将它选上。
Sysctl support:这个选项能不重新编译内核修改内核的某些参数和变量,如果你也选择了支持/proc,将能从/proc/sys存取可以影响内核的参数或变量。
建议你最好将它选上。
Auditing support:审记支持,用于和内核的某些子模块同时工作,例如SELinux。
只有选择此项及它的子项,才能调用有关审记的系统调用。
Kernel log buffer size:内核日志缓存的大小,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:是否支持热插拔的选项,肯定要选上。
不然USB、PCMCIA等这些设备都用不了。
Kernel Userspace Events:内核中分为系统区和用户区,这里系统区和用户区进行通讯的一种方式,选上。
Kernel .config support:将.config配置信息保存在内核中,选上它及它的子项使得其它用户能从/proc中得到内核的配置。
还记得另一篇贴子我是如何取得启动光盘的内核配置信息,并在此基础上配置新的内核吗?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表示编译器的默认方式。
使用内存对齐能提高程序的运行速度,但是会增加程序对内存的使用量。
内核也是一组程序呀。
可加载模块,代码:CODE:Loadable module support --->[*] Enable loadable module support[*] Module unloading[] Forced module unloading[*] Module versioning support (EXPERIMENTAL)[] Source checksum for all modules[*] Automatic kernel module loadingEnable loadable modulesupport,很多人喜欢将全部功能、硬件支持一股脑的编进内核,而不是使用模块的方式。
这样做非常不好(个人觉得)。
其实我也做过嵌入式的开发,在针对特定硬件的平台下尽可能将内核编小,将始终是支持模块加载的。
例如我们开发的防火墙就是做为内核的模块被加载的。
使用模块支持,你的系统能具有更好的可扩充性。
还有一个原因就是自己编写的功能模块、设备驱动模块(假设编写的质量不高)以模块方式工作引起KernelPanic的机率要远远低于不支持模块全部编进内核的方式。
讲了这么多,终于可以理直气壮的选上这一功能了。
Module unloading,不选这个功能,加载的模块就不能卸载。
没什么需要多解释的,建议最好选上。
Forced module unloading,这个选项能强行卸载模块,即使内核认为这样并不安全,也就是说你可以把正在使用中的模快卸载掉。
如果你不是内核开发人员或者骨灰级的玩家,不要选择这个选项。
Module versioning support(EXPERIMENTAL),这个功能可以让你使用其它版本的内核模块,由于我自己写一些模块,所以我会用到这个选项,因为内核更新太快了,我的头文件更新根本赶不上内核的更新。
还有,虽然我在Gentoo下开发,但实际真实环境用的却是从下载的内核。
虽然我选择了这个选项,不过建议你不要选择这个选项。
Source checksum for all modules,这个功能是为了防止更改了内核模块的代码但忘记更改版本号而造成版本冲突。
我估计现在没有哪家公司在开发中还没使用版本控制工具,所以不需要这项了。
如果你不是自己写内核模块,那就更不需要这一选项了。
Automatic kernel moduleloading,这个选项能让内核自动的加载部份模块,建议你最好选上。
举个例子说明一下,如模块eth1394依赖于模块ieee1394。
如果选择了这个选项,可以直接加载模块eth1394;如果没有选择这个选项,必需先加载模块ieee1394,再加载模块eth1394,否则将出错。
处理器内型及特性,代码:CODE:Processor type and features --->Subarchitecture Type (PC-compatible)---> Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon) --->[] Generic x86 support[*] HPET Timer Support[*] Symmetric multi-processing support(2) Maximum number of CPUs (2-255)[*] SMT (Hyperthreading) scheduler support[] Preemptible Kernel[] Machine Check Exception<M> Toshiba Laptop support<M> Dell laptop support<> /dev/cpu/microcode - Intel IA32 CPU microcode support<> /dev/cpu/*/msr - Model-specific register support<> /dev/cpu/*/cpuid - CPU information supportFirmware 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)Subarchitecture Type,这没什么好说的,如果用PC机的话都选这个。