Linux编译选项详解

合集下载

linux 0.11编译方法

linux 0.11编译方法

linux 0.11编译方法
Linux 0.11是Linux内核的一个早期版本,其编译方法相比现代版本有所不同。

下面是大致的编译步骤:
1.获取源代码
获取Linux 0.11的源代码。

这个版本的代码可以在历史存档中找到。

你可以从网络上找到存档并下载,或者使用像GitHub等代码托管平台上的存档。

2.准备编译环境
确保你的系统拥有合适的编译环境。

Linux 0.11是早期版本,可能需要特定的编译器和工具链。

一般来说,你需要安装合适版本的GCC编译器和相关的开发工具。

3.编辑Makefile
进入Linux 0.11源代码目录,在Makefile中设置适当的编译选项。

你可能需要调整编译器参数和其他配置,以适应你的系统环境。

4.运行编译命令
在Linux 0.11源代码目录中,运行适当的编译命令。

在这个版本中,可能有一个名为make或make all的命令可以启动编译过程。

5.处理编译错误
如果出现编译错误,需要根据错误信息进行调试和修复。

这个过程可能需要查看源代码,理解错误原因,并进行相应的修改。

6.生成内核镜像
一旦编译成功,你将会得到一个内核镜像文件。

这个文件可以用于启动系统。

请注意,Linux 0.11是一个非常早期的版本,其编译和构建流程可能相当复杂和不稳定。

同时,这个版本可能并不适用于现代硬件,可能需要进行适当的修改才能在当前系统上运行。

在学习和尝试编译早期版本的Linux内核时,请确保备份数据和系统,以免造成不可逆的损失。

Linux 2.6.19.x内核编译配置选项简介(2)

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 gcc编译格式 -回复

linux gcc编译格式 -回复

linux gcc编译格式-回复Linux GCC编译格式详解GCC是GNU编译器集合(GNU Compiler Collection)的缩写,它是一款功能强大且广泛使用的编译工具。

在Linux操作系统中,GCC被广泛用来编译各种类型的程序,包括C、C++和Fortran等。

本文将从基本介绍开始,一步一步详细解释GCC编译格式,帮助读者更好地理解和使用GCC。

1. GCC介绍GCC是一个由GNU Project创建的自由软件,它是一个以GPL(GNU通用公共许可证)方式发布的编译器。

GCC支持多种编程语言,包括C、C++、Fortran、Ada和Objective-C等,因此广泛应用于不同的领域。

2. GCC命令格式GCC的命令格式一般为:gcc [options] [source files] [object files] [libraries]其中,方括号内的部分代表可选参数,源文件(source files)指的是待编译的源代码文件,目标文件(object files)是通过编译生成的中间文件,库文件(libraries)是用于链接程序所需的额外库文件。

3. 基本编译命令GCC可以根据源代码文件进行编译,生成可执行文件。

以下是基本编译命令的格式:gcc -o <output> <input>其中,-o选项用于指定生成的可执行文件的名称,<output>代表输出文件的名称(通常为可执行文件的名字),<input>为输入文件的名称(通常为源代码文件的名字)。

例如,假设我们有一个名为hello.c的源代码文件,可以使用如下命令编译生成可执行文件hello:gcc -o hello hello.c4. 高级编译选项GCC提供了丰富的编译选项,用于控制编译过程中的各种参数和行为。

以下是一些常用的选项:- -Wall:启用所有警告信息。

- -g:生成调试信息,用于调试程序。

linux 内核编译编译选项

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:热插拔设备支持。

linux编译方法

linux编译方法

linux编译方法随着信息技术的发展,Linux操作系统在各个领域中得到了广泛应用。

为了能够更好地使用和开发Linux,对于Linux的编译方法有着深入的了解是十分必要的。

本文将介绍Linux的编译方法,包括准备工作、编译过程以及常见问题的处理。

一、准备工作在进行Linux编译之前,需要进行一些准备工作来保证编译的顺利进行。

1.1 环境搭建首先,需要确保你的系统已经安装了必要的软件和工具,比如gcc编译器、make工具等。

可以通过运行以下命令来检查软件是否已经安装:```shellgcc --versionmake --version```如果显示相应软件的版本号,则表示已经安装成功。

1.2 获取源代码在开始编译之前,需要先获取源代码。

通常情况下,你可以从开源项目的官方网站或者代码托管平台上下载源代码。

通过以下命令可以从远程仓库中克隆代码到本地:```shellgit clone <repository_url>```其中`<repository_url>`是代码仓库的URL地址。

二、编译过程在准备工作完成后,就可以进行Linux的编译了。

下面介绍一般的编译过程。

2.1 配置首先,在源代码所在的目录中运行以下命令来进行配置:```shell./configure```配置命令会检查系统环境,并生成一个Makefile文件,用于后续的编译。

2.2 编译配置完成后,运行以下命令进行编译:make```编译命令会根据Makefile文件中的规则,将源代码编译为可执行文件或者库文件。

2.3 安装编译完成后,可以运行以下命令来进行安装:```shellmake install```安装命令会将编译生成的文件复制到系统指定的目录中,使得这些文件可以被系统正常调用和使用。

三、常见问题处理在进行Linux编译的过程中,可能会遇到一些常见的问题。

下面列举一些常见问题及其解决方法。

3.1 缺少依赖库在编译过程中,可能会提示缺少某些依赖库。

cmake工程的linux编译命令_概述及解释说明

cmake工程的linux编译命令_概述及解释说明

cmake工程的linux编译命令概述及解释说明引言部分是文章的开篇,通常会包括概述、文章结构和目的三个方面。

在这篇关于cmake工程的Linux编译命令文章中,引言部分需要首先简要介绍cmake 在Linux编译中的作用,并说明本文将通过各个章节对cmake工程进行详细解析和指导。

接着,描述文章的结构安排,包括大纲中各个章节内容的概述和重点。

最后,明确阐述写作本文的目的和意义,可能包括提高读者对cmake工程编译命令的理解和应用能力,为Linux开发者提供实用指导等。

整体来说,引言部分要能够清晰明了地表达出本文所要讨论内容的重点和意义。

2. cmake工程概述:2.1 什么是cmake工程cmake工程是指使用CMake构建系统管理的项目。

CMake是一个跨平台的构建系统生成工具,可以自动生成用于多种编译环境(如Unix Makefiles、Visual Studio等)的构建文件,使得项目能够轻松在不同平台上进行编译和构建。

通过定义项目结构和依赖关系,CMake可以帮助开发人员更方便地配置和生成可执行文件或库。

2.2 cmake与makefile的关系CMake与传统的makefile相比具有更高的抽象层次和更强大的功能性。

传统makefile语法相对复杂,而且在不同平台上可能存在兼容性问题。

而CMake提供了简单易用的语法和命令,能够自动生成适用于各种编译器和操作系统的makefile文件。

开发人员只需编写简单的CMakeLists.txt文件来描述项目结构和依赖关系,就可以快速生成适用于目标平台的构建文件。

2.3 cmake在Linux编译中的作用在Linux系统中,使用cmake可以更加方便地管理复杂项目的编译过程。

通过定义项目源码目录、包含文件路径、库文件路径等信息,并指定需要使用的编译器及其参数,在执行cmake命令后即可自动生成相应平台下所需的makefile 或IDE工程文件,然后使用make或其他对应工具进行编译链接即可得到目标执行文件或库。

linuxgcc命令及用法

linuxgcc命令及用法

linuxgcc命令及用法Linux的gcc命令是一款非常强大的编译器,用于将源代码转换为可执行文件。

本文将详细介绍gcc命令及其常用的用法,帮助读者更好地理解和使用这款工具。

一、gcc命令的基本语法结构gcc是GNU Compiler Collection(GNU编译器集合)的简称,因此其命令基本语法结构一般为:shellgcc [选项] [输入文件]其中,选项用于指定编译时的相关参数,输入文件则是需要编译的源文件。

二、gcc命令的常用选项gcc命令提供了许多选项,用于控制编译过程及生成的可执行文件的属性。

下面是一些常用的gcc选项及其作用:1. -o:用于指定输出文件的名称。

例如,使用`-o myprogram`选项将输出文件命名为myprogram。

2. -c:仅进行编译,不进行链接操作。

这个选项常用于编译多个源文件时,先将每个源文件编译为目标文件,再进行链接操作。

3. -g:生成调试信息。

这个选项会在编译时生成与调试器兼容的调试信息,方便开发人员进行程序调试。

4. -Wall:显示所有警告信息。

使用这个选项可以使编译器在编译时输出更多的警告信息,帮助开发人员提前发现潜在的问题。

5. -I:指定头文件的搜索路径。

使用这个选项可以告诉编译器在指定的路径中查找头文件,方便引用外部库、模块等。

6. -L:指定库文件的搜索路径。

与-I选项类似,这个选项用于告诉编译器在指定的路径中查找库文件,用于链接时的库文件搜索。

7. -l:指定要链接的库文件。

使用这个选项可以显式地告诉编译器要链接的库文件,如:-lmath将链接math库文件。

三、gcc命令的应用实例下面通过几个实例来演示gcc命令的具体用法,以帮助读者更好地理解和掌握这款工具。

1. 编译单个源文件并生成可执行文件假设我们有一个名为`hello.c`的源文件,内容如下:c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}我们可以使用以下命令将其编译为可执行文件`hello`:shellgcc -o hello hello.c编译成功后,即可在当前目录下生成名为`hello`的可执行文件。

linux下gcc编译选项

linux下gcc编译选项

linux下gcc编译选项(1)c/c++编译过程编译⼀个.cpp⽂件时,经过处理、编译、汇编和链接 4 个步骤,⽣成⼀个可执⾏程序:gcc编译过程1. 预处理:将(include)的⽂件插⼊原⽂件中、将宏定义展开、根据条件编译命令选择要使⽤的代码2. 编译:将预处理得到的源代码⽂件,进⾏“翻译转换”,⽣成汇编代码(编译阶段要检查代码的规范性、是否有语法错误,如函数、变量是否被声明等)3. 汇编:将汇编代码翻译成了机器码,表现为⼆进制⽂件4. 链接:将汇编⽣成的.o⽂件及其他函数库⽂件链接起来,⽣成能在特定平台上运⾏的可执⾏程序(在链接程序时,链接器会在所有的⽬标⽂件中找寻函数的实现。

如果找不到,那到就会报链接错误码(LinkerError))(2)gcc编译选项1. 常⽤命令选项1 --version 查看gcc版本号2 -std 指定C或C++语⾔标准版本。

⽐如 -std=c89,-std=c99等是C语⾔的标准版本号。

-std=c++11,-std=c++14等就是C++语⾔的标准版本号3 -o 指定输出⽂件,如果没有-o,输出有可能直接到stdout,有可能到默认的a.out⽂件4 -E 只做pre-process,预编译,要使⽤-o指定输出⽂件,此时⽂件⼀般都⽤.i结尾5 -S(⼤写)编译到(assembly)汇编,使⽤-o指定输出⽂件,此时⽂件⼀般都⽤.s结尾;6 -c 只编译,不链接,⽤-o指定输出⽂件,此时⽂件⼀般⽤.o结尾7 -g 附加debug信息,在输出的.o和可执⾏⽂件中,有很多.debug段。

(compile for debugging)8 -static⽤静态链接的⽅式编译,默认是动态链接,静态链接⽣产的⽂件体积会很⼤9 -shared ⽣成.so动态链接库10 -fPIC ⼀般在创建.so动态链接库的时候,都要加上-fPIC参数。

11 -fPIC 作⽤于编译阶段,告诉编译器产⽣与位置⽆关代码(Position-Independent Code),则产⽣的代码中,没有绝对地址,全12部使⽤相对地址,故⽽代码可以被加载器加载到内存的任意位置,都可以正确的执⾏。

linux系统管理(1)之内核编译选项查看

linux系统管理(1)之内核编译选项查看

linux系统管理(1)之内核编译选项查看三个⽅法1. proc⽂件系统2. ubunut debain3. 红帽等proc⽂件系统/proc/config.gzThis file shows you the compile-time configuration settings for the kernel (gzip compressed, use zcat or zless to see its contents). It is available only if you enable it using CONFIG_IKCONFIG_PROC when you compile.Say you want to upgrade to the next available kernel. Your current kernel works fine, so you'd like to use the same parameters, but you accidentally lost your original .config configuration file. Simplyzcat /proc/config.gz > /usr/src/linux/.config and you're ready to go. Example output:Automatically generated make config: don't editLinux kernel version: 2.6.17Sat Jul 15 17:01:24 2006CONFIG_X86_32=yCONFIG_SEMAPHORE_SLEEPERS=yCONFIG_X86=yCONFIG_MMU=yCONFIG_GENERIC_ISA_DMA=yCONFIG_GENERIC_IOMAP=yCONFIG_GENERIC_HWEIGHT=yCONFIG_ARCH_MAY_HAVE_PC_FDC=yCONFIG_DMI=y#zcat /proc/config.gz需要开启内核配置项CONFIG_IKCONFIG才会⽣成这个⽂件ubuntu1. ⽂件下查看/usr/src/linux-headers-VERSION-generic/.config2. 从系统/boot⽬录下获取[root@localhost ~]# uname -r4.9.77[root@localhost ~]# ls /boot/config-4.9.77-30.el7.x86_64 System.mapgrub System.map-4.9.77grub2 System.map-4.9.77-30.el7.x86_64initramfs-0-rescue-d5e5083a18b24f4db74d0c0f71770f64.img System.map-4.9.77.oldinitramfs-4.9.77.img vmlinuzinitramfs-4.9.77kdump.img vmlinuz-0-rescue-d5e5083a18b24f4db74d0c0f71770f64initrd-plymouth.img vmlinuz-4.9.77symvers-4.9.77-30.el7.x86_64.gz3.从系统/usr/src/kernel⽬录下获取[root@localhost ~]# uname -r4.9.77[root@localhost ~]# cd /usr/src/kernels[root@localhost kernels]# ls4.9.77-30.el7.x86_64[root@localhost kernels]# cd 4.9.77-30.el7.x86_64/[root@localhost 4.9.77-30.el7.x86_64]# ls -a. block .config drivers include Kconfig Makefile net security tools.. certs .config.old firmware init kernel mm samples sound usrarch config crypto fs ipc lib Module.symvers scripts System.map virt如上所⽰,当前内核的编译配置⽂件为:.config。

Linux内核编译配置选项详解

Linux内核编译配置选项详解

Code maturity level options代码成熟度选项Prompt for development and/or incomplete code/drivers 显示尚在开发中或尚未完成的代码与驱动.除非你是测试人员或者开发者,否则请勿选择General setup常规设置Local version - append to kernel release在内核版本后面加上自定义的版本字符串(小于64字符),可以用"uname -a"命令看到Automatically append version information to the version string 自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持Support for paging of anonymous memory (swap)使用交换分区或者交换文件来做为虚拟内存System V IPCSystem V进程间通信(IPC)支持,许多程序需要这个功能.必选,除非你知道自己在做什么IPC NamespacesIPC命名空间支持,不确定可以不选POSIX Message QueuesPOSIX消息队列,这是POSIX IPC中的一部分BSD Process Accounting将进程的统计信息写入文件的用户级系统调用,主要包括进程的创建时间/创建者/内存占用等信息BSD Process Accounting version 3 file format使用新的第三版文件格式,可以包含每个进程的PID和其父进程的PID,但是不兼容老版本的文件格式Export task/process statistics through netlink通过netlink接 口向用户空间导出任务/进程的统计信息,与BSDProcess Accounting的不同之处在于这些统计信息在整个 任务/进程生存期 都是可用的Enable per-task delay accounting在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间UTS NamespacesUTS名字空间支持,不确定可以不选Auditing support审计支持,某些内 核模块(例如SELinux)需要它,只有同时选择其子项才能对系统调用进行审 计Enable system-call auditing support支持对系统调用的审计Kernel .config support把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本来提取这些信息Enable access to .config through /proc/config.gz允许通过/proc/config.gz访问内核的配置信息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)配置标准的内核特性(为小型系统)Enable 16-bit UID system calls允许对UID系统 调用进行过时的16-bit包装Sysctl syscall support不需要重启就能修改内核的某些参数和变量,如果你也选择了支持/proc,将能从/proc/sys存取可以影响内核行为的参数或变量Load all symbols for debugging/kksymoops装载所有的调试符号表信息,仅供调试时选择Include all symbols in kallsyms在kallsyms中 包含内核知道的所有符号,内核将会增大300KDo an extra kallsyms pass除非你在kallsyms中发现了bug并需要报告这个bug才打开该选项Support for hot-pluggable devices支持热插拔设备,如usb与pc卡等,Udev也需要它Enable support for printk允许内核向终端打印字符信息,在需要诊断内核为什么不能运行时选择BUG() support显示故障和失败条件(BUG和WARN),禁用它将可能导致隐含的错误被忽略 Enable ELF core dumps内存转储支持,可 以帮助调试ELF格 式的程序Enable full-sized data structures for core在内核中使用全尺寸的数据结构.禁用它将使得某些内核的数据结构减小以节约内存,但是将会降低性能Enable futex support快速用户空间互斥体可以使线程串行化以避免竞态条件,也提高了响应速度.禁用它将导致内核不能正确的运行基于glibc的程序Enable eventpoll support支持事件轮循的系统调用Use full shmem filesystem完全使用shmem来 代替ramfs.shmem是基于共享内存的文件系统(可能用到swap),在启用TMPFS后可以挂载为tmpfs供用户空间使用,它比简单的ramfs先进许多Use full SLAB allocator使用SLAB完全 取代SLOB进行 内存分配,SLAB是 一种优秀的内存分配管理器,推荐使用Enable VM event counters for /proc/vmstat允许在/proc/vmstat中包含虚拟内存事件记数器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为所有的模块校验源码,如果你不是自己编写内核模块就不需要它Automatic kernel module loading让内核通过运行modprobe来自动加载所需要的模块,比如可以自动解决模块的依赖关系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调度器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 polling 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热插拔支持,如果你有这样的设备就到子项中去选吧Cryptographic options加密选项Cryptographic API提供核心的加密API支持.这 里的加密算法被广泛的应用于驱动程序通信协议等机制中.子选项可以全不选,内核中若有其他部分依赖它,会自动选上Cryptographic algorithm manager创建加密模版实例,必 须要选HMAC support为IPSec所必 须,可为PPPoE提供压缩支持XCBC supportKeyed-Hashing with encryption algorithmKeyed-Hashing用加密算法Null algorithmsNULL加密算法(什么也不做),用于IPsec协议的封装安全载荷模块(ESP)MD4 digest algorithm老旧的摘要算法,已 经过时MD5 digest algorithm主流摘要算法,128位(已 被中国山东大学王小云攻破,可以快速找到碰撞)SHA1 digest algorithm主流摘要算法,160位(已 被中国山东大学王小云攻破,可以快速找到碰撞),速度与MD5相当SHA256 digest algorithm更好的摘要算法,256位,速 度较SHA1稍慢SHA384 and SHA512 digest algorithms更好的摘要算法,384/512位,速度大约只有SHA1的40-50%Whirlpool digest algorithms最安全的摘要算法,512位,已 被列入ISO标准,目前最新版本为3.0(2003年发布)Tiger digest algorithms号称最快的摘要算法,192位,专 门为64位CPU进行了优化GF(2^128) multiplication functions吉安卡洛-费斯切拉(2 ^ 128)乘法的功能Efficient table driven implementation of multiplications field GF(2^128). This is needed by some cypher modes. T option will be selected automatically if you select such cipher mode. Only select this option by hand if you exp an external module that requires these functionsECB support电子密码本,最简 单的加密方法CBC support密码块链,IPSec需要使用它PCBC supportPCBC: Propagating Cipher Block Chaining mode . This block cipher algorithm is required for RxRPC.LRW supportLRW: Liskov Rivest Wagner, a tweakable, non malleable, nnarrow block cipher mode for dm-crypt. Use it with ciph specification string aes-lrw-benbi, the key must be 256,The first 128, 192 or 256 bits in the key are used for A rest is used to tie each cipher block to its logical posSoftware async crypto daemonThis is a generic software asynchronous crypto daemon thconverts an arbitrary synchronous software crypto algori into an asynchronous algorithm that executes in a kernel。

Linux编译中Configure参数选项详解

Linux编译中Configure参数选项详解

Configure参数选项详解Linux 环境下的软件安装,并不是一件容易的事情;如果通过源代码编译后在安装,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但万变不离其宗,对基础知识的扎实掌握,安装各种软件的问题就迎刃而解了。

Configure 脚本配置工具就是基础之一,它是autoconf 的工具的基本应用。

与一些技巧相比,Configure 显得基础一些,当然使用和学习起来就显得枯燥乏味一些,当然要成为高手,对基础的熟悉不能超越哦。

'configure' 脚本有大量的命令行选项.对不同的软件包来说,这些选项可能会有变化,但是许多基本的选项是不会改变的.带上'--help' 选项执行'configure' 脚本可以看到可用的所有选项. 尽管许多选项是很少用到的, 但是当你为了特殊的需求而configure 一个包时, 知道他们的存在是很有益处的. 下面对每一个选项进行简略的介绍:'--cache-file=FILE''configure' 会在你的系统上测试存在的特性( 或者bug!). 为了加速随后进行的配置, 测试的结果会存储在一个cachefile 里. 当configure 一个每个子树里都有'configure' 脚本的复杂的源码树时, 一个很好的cache file 的存在会有很大帮助'--help'输出帮助信息. 即使是有经验的用户也偶尔需要使用使用'--help' 选项, 因为一个复杂的项目会包含附加的选项. 例如,GCC 包里的'configure' 脚本就包含了允许你控制是否生成和在GCC 中使用GNU 汇编器的选项.'--no-create''configure' 中的一个主要函数会制作输出文件. 此选项阻止'configure' 生成这个文件. 你可以认为这是一种演习(dryrun), 尽管缓存(cache) 仍然被改写了.'--quiet''--silent'当'configure' 进行他的测试时, 会输出简要的信息来告诉用户正在作什么. 这样作是因为'configure' 可能会比较慢, 没有这种输出的话用户将会被扔在一旁疑惑正在发生什么. 使用这两个选项中的任何一个都会把你扔到一旁.( 译注: 这两句话比较有意思, 原文是这样的:If there wasno such output, the user would be left wondering what is happening. Byusing this option, you too can be left wondering!)'--version'打印用来产生'configure' 脚本的Autoconf 的版本号.'--prefix=PREFIX''--prefix' 是最常用的选项. 制作出的'Makefile' 会查看随此选项传递的参数, 当一个包在安装时可以彻底的重新安置他的结构独立部分. 举一个例子, 当安装一个包, 例如说Emacs, 下面的命令将会使Emacs Lisp file 被安装到"/opt/gnu/share":$ ./configure --prefix=/opt/gnu'--exec-prefix=EPREFIX'与'--prefix' 选项类似, 但是他是用来设置结构倚赖的文件的安装位置. 编译好的'emacs' 二进制文件就是这样一个问件. 如果没有设置这个选项的话, 默认使用的选项值将被设为和'--prefix' 选项值一样.'--bindir=DIR'指定二进制文件的安装位置. 这里的二进制文件定义为可以被用户直接执行的程序.'--sbindir=DIR'指定超级二进制文件的安装位置. 这是一些通常只能由超级用户执行的程序.'--libexecdir=DIR'指定可执行支持文件的安装位置. 与二进制文件相反, 这些文件从来不直接由用户执行, 但是可以被上面提到的二进制文件所执行.'--datadir=DIR'指定通用数据文件的安装位置.'--sysconfdir=DIR'指定在单个机器上使用的只读数据的安装位置.'--sharedstatedir=DIR'指定可以在多个机器上共享的可写数据的安装位置.'--localstatedir=DIR'指定只能单机使用的可写数据的安装位置.'--libdir=DIR'指定库文件的安装位置.'--includedir=DIR'指定 C 头文件的安装位置. 其他语言如C++ 的头文件也可以使用此选项.'--oldincludedir=DIR'指定为除GCC 外编译器安装的 C 头文件的安装位置.'--infodir=DIR'指定Info 格式文档的安装位置.Info 是被GNU 工程所使用的文档格式.'--mandir=DIR'指定手册页的安装位置.'--srcdir=DIR'这个选项对安装没有作用. 他会告诉'configure' 源码的位置. 一般来说不用指定此选项, 因为'configure' 脚本一般和源码文件在同一个目录下.'--program-prefix=PREFIX'指定将被加到所安装程序的名字上的前缀. 例如, 使用'--program-prefix=g' 来configure 一个名为'tar' 的程序将会使安装的程序被命名为'gtar'. 当和其他的安装选项一起使用时, 这个选项只有当他被`Makefile.in' 文件使用时才会工作.'--program-suffix=SUFFIX'指定将被加到所安装程序的名字上的后缀.'--program-transform-name=PROGRAM'这里的PROGRAM 是一个sed 脚本. 当一个程序被安装时, 他的名字将经过`sed -e PROGRAM' 来产生安装的名字.'--build=BUILD'指定软件包安装的系统平台. 如果没有指定, 默认值将是'--host' 选项的值。

c++ linux编译命令

c++ linux编译命令

c++ linux编译命令
C++Linux编译命令是指在Linux系统下,使用C++语言进行程序开发时所需的编译命令。

下面是一些常用的C++ Linux编译命令: 1. g++命令:用于编译C++程序。

语法:g++ [options] file1.cpp file2.cpp ... -o output 选项说明:
- -o output:指定输出文件的文件名。

- -c:仅编译源文件,生成目标文件(.o文件)。

- -g:生成调试信息。

- -O:优化编译过程。

- -Wall:显示全部警告。

2. make命令:用于自动化编译。

语法:make [target]
选项说明:
- target:指定要编译的目标(默认为Makefile中的第一个目标)。

3. cmake命令:用于生成Makefile文件。

语法:cmake [options] source_directory
选项说明:
- -G:指定生成的Makefile文件类型。

- -D:设置变量的值。

4. gdb命令:用于调试程序。

语法:gdb [options] [executable-file [core-file or process-id]]
选项说明:
- -tui:启动GDB的文本模式界面。

- -q:禁止显示版权和欢迎信息。

- -x:执行指定的GDB脚本。

以上就是一些常用的C++ Linux编译命令,开发者们可以根据需要使用相应的命令,提高编译效率和程序质量。

linux内核编译与裁剪

linux内核编译与裁剪

Linux内核编译内幕详解内核,是一个操作系统的核心。

它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。

Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/l inux下找到,大部分应用软件也都是遵循GPL而设计的,你都可以获取相应的源程序代码。

全世界任何一个软件工程师都可以将自己认为优秀的代码加入到其中,由此引发的一个明显的好处就是Linux修补漏洞的快速以及对最新软件技术的利用。

而Linux的内核则是这些特点的最直接的代表。

想象一下,拥有了内核的源程序对你来说意味着什么?首先,我们可以了解系统是如何工作的。

通过通读源代码,我们就可以了解系统的工作原理,这在Windows下简直是天方夜谭。

其次,我们可以针对自己的情况,量体裁衣,定制适合自己的系统,这样就需要重新编译内核。

在Windows下是什么情况呢?相信很多人都被越来越庞大的Windows整得莫名其妙过。

再次,我们可以对内核进行修改,以符合自己的需要。

这意味着什么?没错,相当于自己开发了一个操作系统,但是大部分的工作已经做好了,你所要做的就是要增加并实现自己需要的功能。

在Windows下,除非你是微软的核心技术人员,否则就不用痴心妄想了。

内核版本号由于Linux的源程序是完全公开的,任何人只要遵循GPL,就可以对内核加以修改并发布给他人使用。

Linux的开发采用的是集市模型(bazaar,与cathedral--教堂模型--对应),为了确保这些无序的开发过程能够有序地进行,Linux采用了双树系统。

一个树是稳定树(stable tree),另一个树是非稳定树(unstable tree)或者开发树(d evelopment tree)。

一些新特性、实验性改进等都将首先在开发树中进行。

如果在开发树中所做的改进也可以应用于稳定树,那么在开发树中经过测试以后,在稳定树中将进行相同的改进。

linux编译命令之make命令

linux编译命令之make命令

linux编译命令之make命令make命令是很多linux程序员经常使用的一个命令,下面由店铺为大家整理了linux编译命令make的相关知识,希望大家喜欢!linux下编译命令之make命令详解1.linux编译命令Make命令如何工作的对于不知道背后机理的人来说,make 命令像命令行参数一样接收目标。

这些目标通常存放在以“Makefile” 来命名的特殊文件中,同时文件也包含与目标相对应的操作。

更多信息,阅读关于 Makefiles 如何工作的系列文章。

当 make 命令第一次执行时,它扫描 Makefile 找到目标以及其依赖。

如果这些依赖自身也是目标,继续为这些依赖扫描 Makefile 建立其依赖关系,然后编译它们。

一旦主依赖编译之后,然后就编译主目标(这是通过 make 命令传入的)。

现在,假设你对某个源文件进行了修改,你再次执行make 命令,它将只编译与该源文件相关的目标文件,因此,编译完最终的可执行文件节省了大量的时间。

2.linux编译命令Make命令实例下面是本文所使用的测试环境:OS —— Ubunut 13.04Shell —— Bash 4.2.45Application —— GNU Make 3.81下面是工程的内容:$ lsanotherTest.c Makefile test.c test.h下面是 Makefile 的内容:all: testtest: test.o anotherTest.ogcc -Wall test.o anotherTest.o -o testtest.o: test.cgcc -c -Wall test.canotherTest.o: anotherTest.cgcc -c -Wall anotherTest.cclean:rm -rf *.o test现在我们来看 Linux 下一些 make 命令应用的实例:1. 一个简单的例子为了编译整个工程,你可以简单的使用 make 或者在 make 命令后带上目标 all。

linux常用编译指令

linux常用编译指令

linux常用编译指令Linux是一种开源的操作系统,以其稳定性和安全性而闻名。

在Linux中,编译是一项常见的任务。

编译是将源代码转换为可执行文件的过程,使得我们可以运行和使用软件。

在本文中,我们将介绍一些常用的Linux编译指令,帮助您更好地理解和使用Linux系统。

1. gccgcc是GNU编译器套装(GNU Compiler Collection)的缩写,是Linux系统中最常用的编译器之一。

它支持多种编程语言,如C、C++和Objective-C等。

使用gcc指令可以将源代码编译成可执行文件,例如:```gcc -o hello hello.c```这个指令将hello.c文件编译成一个名为hello的可执行文件。

2. g++g++是gcc的一个版本,专门用于编译C++程序。

与gcc类似,g++可以将C++源代码编译成可执行文件。

例如:```g++ -o hello hello.cpp```这个指令将hello.cpp文件编译成一个名为hello的可执行文件。

3. makemake是一种自动化编译工具,可以根据Makefile文件中的规则来编译源代码。

Makefile是一个包含编译规则的文本文件,其中指定了源文件、目标文件和编译选项等信息。

使用make指令可以根据Makefile文件来编译项目,例如:```make```这个指令将在当前目录中查找Makefile文件,并根据其中的规则来编译源代码。

4. cmakecmake是一个跨平台的编译工具,可以帮助我们生成Makefile文件。

与make相比,cmake更加灵活和方便,可以自动生成适用于不同操作系统和编译器的Makefile文件。

使用cmake指令可以生成Makefile文件,例如:```cmake .```这个指令将在当前目录中生成一个适用于当前系统的Makefile文件。

5. autotoolsautotools是一个用于自动化编译的工具集合,包括autoconf、automake和libtool等工具。

linux gcc编译命令

linux gcc编译命令

linux gcc编译命令
GCC是 Linux系统下的一个很常用的开源编译器。

使用GCC编译
C/C++程序,大致需要按以下步骤进行:
1、准备工作:确定要编译的程序源码文件,源码文件通常以 .c
或 .cpp结尾。

2、编译阶段:使用GCC命令进行编译,编译完成后生成目标文件,
比如 a.out 或者带有其它后缀的文件名。

3、链接阶段:使用GCC将目标文件与静态库链接在一起,最终生成
可执行文件。

4、执行文件:使用./<文件名>命令运行可执行文件,查看其执行结果。

常用的GCC编译命令为:
1、gcc [选项参数] 源文件名 -o<输出文件名>,该命令可以进行编译,默认输出文件名为 a.out 。

2、gcc [选项参数] 源文件名 -c,该命令仅进行编译,不进行链接,源文件编译生成 .o 格式的文件。

3、gcc [选项参数] 源文件名 -S,该命令仅进行编译,不进行汇编,源文件编译生成 .s 格式的文件。

4、gcc [选项参数] 汇编文件名 -c,该命令进行汇编并编译,汇编
文件编译生成 .o 格式的文件。

5、gcc [选项参数] 目标文件名 -o<输出文件名>,该命令可以链接多个 .o 格式的文件,最终生成可执行文件。

6、gcc [选项参数] 动态库文件名 -shared -o<输出文件名>,该命令将多个 .o 格式的文件链接成动态库,最终生成动态库文件。

7、g++[选项参数]源文件名-o<。

Linux 2.6.19.x内核编译配置选项简介(1)

Linux 2.6.19.x内核编译配置选项简介(1)

Linux 2.6.19.x内核编译配置选项简介(1)Code maturity level options代码成熟度选项Prompt for development and/or incomplete code/drivers显示尚在开发中或尚未完成的代码与驱动.除非你是测试人员或者开发者,否则请勿选择General setup常规设置Local version - append to kernel release在内核版本后面加上自定义的版本字符串(小于64字符),可以用"uname -a"命令看到Automatically append version information to the version string自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持Support for paging of anonymous memory (swap)使用交换分区或者交换文件来做为虚拟内存System V IPCSystem V进程间通信(IPC)支持,许多程序需要这个功能.必选,除非你知道自己在做什么IPC NamespacesIPC命名空间支持,不确定可以不选POSIX Message QueuesPOSIX消息队列,这是POSIX IPC中的一部分BSD Process Accounting将进程的统计信息写入文件的用户级系统调用,主要包括进程的创建时间/创建者/内存占用等信息BSD Process Accounting version 3 file format使用新的第三版文件格式,可以包含每个进程的PID和其父进程的PID,但是不兼容老版本的文件格式Export task/process statistics through netlink通过netlink接口向用户空间导出任务/进程的统计信息,与BSD Process Accounting的不同之处在于这些统计信息在整个任务/进程生存期都是可用的Enable per-task delay accounting在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间UTS NamespacesUTS名字空间支持,不确定可以不选Auditing support审计支持,某些内核模块(例如SELinux)需要它,只有同时选择其子项才能对系统调用进行审计Enable system-call auditing support支持对系统调用的审计Kernel .config support把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本来提取这些信息Enable access to .config through /proc/config.gz允许通过/proc/config.gz访问内核的配置信息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)配置标准的内核特性(为小型系统)Enable 16-bit UID system calls允许对UID系统调用进行过时的16-bit包装Sysctl syscall support不需要重启就能修改内核的某些参数和变量,如果你也选择了支持/proc,将能从/proc/sys存取可以影响内核行为的参数或变量Load all symbols for debugging/kksymoops装载所有的调试符号表信息,仅供调试时选择Include all symbols in kallsyms在kallsyms中包含内核知道的所有符号,内核将会增大300KDo an extra kallsyms pass除非你在kallsyms中发现了bug并需要报告这个bug才打开该选项Support for hot-pluggable devices支持热插拔设备,如usb与pc卡等,Udev也需要它Enable support for printk允许内核向终端打印字符信息,在需要诊断内核为什么不能运行时选择BUG() support显示故障和失败条件(BUG和W ARN),禁用它将可能导致隐含的错误被忽略Enable ELF core dumps内存转储支持,可以帮助调试ELF格式的程序Enable full-sized data structures for core在内核中使用全尺寸的数据结构.禁用它将使得某些内核的数据结构减小以节约内存,但是将会降低性能Enable futex support快速用户空间互斥体可以使线程串行化以避免竞态条件,也提高了响应速度.禁用它将导致内核不能正确的运行基于glibc的程序Enable eventpoll support支持事件轮循的系统调用Use full shmem filesystem启用shmem支持.shmem是基于共享内存的文件系统(可能用到swap),在启用TMPFS后可以挂载为tmpfs供用户空间使用,它比简单的ramfs先进许多Use full SLAB allocator使用SLAB完全取代SLOB进行内存分配,SLAB是一种优秀的内存分配管理器,推荐使用Enable VM event counters for /proc/vmstat允许在/proc/vmstat中包含虚拟内存事件记数器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为所有的模块校验源码,如果你不是自己编写内核模块就不需要它Automatic kernel module loading让内核通过运行modprobe来自动加载所需要的模块,比如可以自动解决模块的依赖关系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适用于大多数环境,但不太合适数据库应用Deadline I/O scheduler通常与Anticipatory相当,但更简洁小巧,更适合于数据库应用CFQ I/O scheduler为所有进程分配等量的带宽,适合于桌面多任务及多媒体应用Default I/O scheduler默认IO调度器Processor type and features中央处理器(CPU)类型及特性Symmetric multi-processing support对称多处理器支持,如果你有多个CPU或者使用的是多核CPU就选上.此时"Enhanced Real Time Clock Support"选项必须开启,"Advanced Power Management"选项必须关闭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)适合服务器环境的禁止内核抢占V oluntary 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 / Intel Pentium 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 information 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/Medion Laptop ExtrasASUS笔记本专用,以提供额外按钮的支持,用户可以通过/proc/acpi/asus来打开或者关闭LCD 的背光/调整亮度/定制LED的闪烁指示等功能IBM ThinkPad Laptop ExtrasIBM ThinkPad专用Toshiba Laptop ExtrasToshiba笔记本专用Disable ACPI for systems before Jan 1st this year输入四位数的年份,在该年的1月1日前不使用ACPI的功能("0"表示一直使用)Debug Statements详细的ACPI调试信息,不搞开发就别选Power Management Timer Support这个Timer在所有ACPI兼容的平台上都可用,且不会受PM功能的影响,建议总是启用它.如果你在kernel log中看到了'many lost ticks'那就必须启用它ACPI0004,PNP0A05 and PNP0A06 Container Driver支持内存和CPU的热插拔Smart Battery System支持依赖于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 frequency scaling既允许手动调整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 capability checks放松对系统的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 polling mechanism for hot-plug events对热插拔事件采用轮询机制,仅用于测试目的Root Port Advanced Error Reporting support由PCI Express AER驱动程序处理发送到Root Port的错误信息Message Signaled Interrupts (MSI and MSI-X)充许设备通过PCI总线写入内存堆栈产生一个中断而不是使用默认的IRQ中断,建议不选PCI 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和syslogTransformation user configuration interface为IPsec(可在ip层加密)之类的工具提供XFRM用户配置接口支持Transformation sub policy 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 autoconfiguration在内核启动时自动配置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之后执行"echo 1 >/proc/sys/net/ipv4/tcp_syncookies"命令IP: AH transformationIPsec验证头(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 congestion control高级拥塞控制,如果没有特殊需求(比如无线网络)就别选了,内核会自动将默认的拥塞控制设为"Cubic"并将"Reno"作为候补IP: Virtual Server ConfigurationIP虚拟服务器允许你基于多台物理机器构建一台高性能的虚拟服务器,不玩集群就别选了The IPv6 protocol你要是需要IPv6就选吧NetLabel subsystem supportNetLabel子系统为诸如CIPSO与RIPSO之类能够在分组信息上添加标签的协议提供支持,如果你看不懂就别选了。

rk3588 linux kernel 编译解析

rk3588 linux kernel 编译解析

rk3588 linux kernel 编译解析在Linux系统中,编译内核是一项重要的任务。

对于rk3588处理器来说,编译Linux内核需要一定的步骤和技巧。

本文将对rk3588 Linux内核编译的解析进行详细说明。

了解相关基础知识是非常重要的。

rk3588处理器使用的是ARM架构,因此在编译内核之前,需要获取合适的内核源代码。

可以从官方网站或其他合适的资源获取最新的Linux内核源代码。

需要配置编译环境。

在Linux系统中,可以使用gcc工具链来编译内核。

确保系统中安装了合适版本的gcc,并进行相应的配置。

还需要安装一些必要的工具和依赖项,如make、perl等。

一旦环境配置完成,可以开始编译内核。

首先,需要进入内核源代码目录。

运行`make menuconfig`命令,可以进入内核配置界面。

在这个界面中,可以定制内核的功能和选项,根据需要进行相应的设置。

这包括启用或禁用特定的硬件支持、文件系统支持、设备驱动等。

完成配置后,保存并退出界面。

可以开始编译内核。

运行`make`命令,系统将开始编译内核。

这个过程可能需要一些时间,取决于内核源代码的大小和所选择的配置选项。

编译完成后,可以使用`make modules_install`安装模块。

将编译得到的内核镜像文件复制到系统中,以便后续的使用。

可以将内核镜像文件复制到启动分区中,并进行相应的配置,以确保系统能够正确地引导。

需要注意的是,编译内核可能会遇到一些问题和错误。

这些问题可能涉及到库文件、依赖项、配置选项等。

在解决问题时,可以参考官方文档、在线论坛和社区等资源,以获得帮助和指导。

编译rk3588 Linux内核需要进行一系列的步骤和配置。

通过了解基础知识、配置环境、进行内核配置、编译和安装,可以成功地完成内核编译工作。

编译内核是一个复杂的过程,需要一定的耐心和技术知识,但它也是学习和深入了解Linux系统的重要途径之一。

linux -fpic编译程序

linux -fpic编译程序

linux -fpic编译程序标题,深入了解Linux下使用-fpic编译程序。

在Linux系统中,编译程序是开发过程中不可或缺的一部分。

而使用-fpic选项进行编译则是一种常见的技术,它可以帮助我们创建可重定位的共享库,以及在大型项目中更好地管理代码。

-fpic选项是GNU编译器(GCC)的一个选项,它告诉编译器生成位置无关代码(Position Independent Code,PIC)。

这种代码可以在内存中的任何位置执行,而不需要进行修改。

这对于共享库来说非常重要,因为它们可以被加载到内存的任意位置,而不需要修改代码。

使用-fpic选项编译程序有几个重要的优点。

首先,它允许我们创建可重定位的共享库,这意味着我们可以将代码编译成库,然后在不同的程序中使用它。

其次,它可以减少程序的内存占用,因为代码可以在内存中共享,而不需要多次加载。

要使用-fpic选项进行编译,我们可以在编译命令中添加“-fpic”或“-fPIC”选项。

例如:bash.gcc -c -fpic mylibrary.c -o mylibrary.o.gcc -shared -o libmylibrary.so mylibrary.o.上面的命令将mylibrary.c编译成位置无关的目标文件mylibrary.o,然后将其链接成共享库libmylibrary.so。

现在,我们可以在其他程序中使用这个共享库了。

然而,需要注意的是,使用-fpic选项进行编译可能会导致一些性能损失,因为代码需要进行额外的间接寻址。

因此,我们应该在需要时才使用-fpic选项,而不是盲目地将其应用于所有代码。

总的来说,使用-fpic选项进行编译程序是一种非常有用的技术,特别是在构建共享库时。

通过了解如何使用这个选项,我们可以更好地管理代码,提高程序的灵活性和可重用性。

linux make 编译参数

linux make 编译参数

linux make 编译参数1. -C目录切换到指定的目录下进行编译。

Change to the specified directory before compiling.2. -f文件名指定要编译的Makefile文件。

Specify the Makefile file to be compiled.3. -j[n]同时进行n个任务的编译。

Compile n tasks simultaneously.4. -k忽略错误,继续编译下去。

Ignore errors and continue compiling.5. -p打印编译规则,但不进行编译。

Print compilation rules without compiling.6. -r忽略Makefile文件的时间戳。

Ignore the timestamp of Makefile.7. -s静默模式,不输出编译过程的详细信息。

Silent mode, do not output detailed information of the compilation process.8. -t执行比较时间戳规则。

Execute the comparison timestamp rule.9. -w打开警告信息输出。

Enable warning message output.10. --no-print-directory不打印编译目录。

Do not print the compile directory.11. --werror将所有警告信息转换为错误信息。

Convert all warning messages to error messages.12. --always-make忽略时间戳,重新编译所有文件。

Ignore the timestamp and recompile all files.13. --print-data-base打印Makefile数据库信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 等等。

∙lzma是一个Deflate和LZ77算法改良和优化后的压缩算法,开发者是Igor Pavlov,2001年被首次应用于7-Zip压缩工具中,是2001年以来得到发展的一个数据压缩算法。

它使用类似于LZ77 的字典编码机制,在一般的情况[*] Support for paging of anonymous memory (swap)将使你的内核支持虚拟内存。

这个虚拟内存在LINUX中就是SWAP分区。

除非你不想要SWAP分区,否则这里必选Y。

[*] System V IPCSystem V进程间通信(IPC)支持,于处理器在程序之间同步和交换信息,如果不选这项,很多程序运行不起来,特别地,你想在LINUX下运行DOS仿真程序,你必须要选Y。

[*] POSIX Message QueuesPOSIX消息队列,这是POSIX IPC中的一部分。

建议你最好将它选上POSIX 表示可移植操作系统接口[*] BSD Process Accounting这是允许用户进程访问内核,将账户信息写入文件中。

这通常被认为是个好主意,建议你最好将它选上。

将进程的统计信息写入文件的用户级系统调用,主要包括进程的创建时间/创建者/内存占用等信息。

∙[ ]BSD Process Accounting version 3 file format选Y,统计信息将会以新的格式(V3)写入,这格式包含进程ID和父进程。

注意这个格式和以前的v0/v1/v2 格式不兼容,所以你需要升级相关工具来使用它。

[*] Export task/process statistics through netlink (EXPERIMENTAL)处于实验阶段的功能。

通过通用的网络输出工作/进程的相应数据,和BSD不同的是,这些数据在进程运行的时候就可以通过相关命令访问。

和BSD类似,数据将在进程结束时送入用户空间。

如果不清楚,选N。

∙[*] Enable per-task delay accounting (EXPERIMENTAL)在统计信息中包含进程等候系统资源(cpu,IO同步,内存交换等)所花费的时间∙[*] Enable extended accounting over taskstats (EXPERIMENTAL) 在统计信息中包含扩展进程所花费的时间∙o[*] Enable per-task storage I/O accounting (EXPERIMENTAL)在统计信息中包含I/O存储进程所花费的时间[*] Auditing support审计支持,用于和内核的某些子模块同时工作,(例如SELinux)需要它,只有同时选择其子项才能对系统调用进行审计。

允许审计的下层能够被其他内核子系统使用,比如SE-Linux,它需要这个来进行登录时的声音和视频输出。

没有CONFIG_AUDITSYSCALL 时(即下一个选项)无法进行系统调用。

∙[*] Enable system-call auditing support支持对系统调用的审计。

允许系统独立地或者通过其他内核的子系统,调用审计支持,比如SE-Linux。

要使用这种审计的文件系统来查看特性,请确保INOTIFY 已经被设置。

RCU Subsystem —> 一个高性能的锁机制RCU 子系统RCU(Read-Copy Update),顾名思义为读取-复制更新。

对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据。

这个时机就是所有引用该数据的CPU都退出对共享数据的操作。

∙RCU Implementation (Tree-based hierarchical RCU) —>RCU 实现机制o(X) Tree-based hierarchical RCU基本数按等级划分∙[ ] Enable tracing for RCU激活跟踪∙(32) Tree-based hierarchical RCU fanout value基本数按等级划分分列值∙[ ] Disable tree-based hierarchical RCU auto-balancing< > Kernel .config support这个选项允许.config文件(即编译LINUX时的配置文件)保存在内核当中。

它提供正在运行中的或者还在硬盘中的内核的相关配置选项。

可以通过内核镜像文件kernel image file 用命令script scripts/extract-ikconfig 来提取出来,作为当前内核重编译或者另一个内核编译的参考。

如果你的内核在运行中,可以通过/proc/config.gz文件来读取。

下一个选项提供这项支持。

看起来好像是一个不错的功能,可以把编译时的 .config文件保存在内核中,以供今后参考调用。

用来重编译和编译其他的内核的时候可以用上。

你是一个编译内核的狂人的话,这项要选上∙[ ] Enable access to .config through /proc/config.gz (NEW)上一项的子项,可以通过/proc/config.gz 访问当前内核的.config 。

新功能,上一项选的话这个就选上吧。

(18) 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[*] Control Group support —>cgroup支持,如cpusets那样来使用cgroup子系统进程(不确定可以不选)∙[ ] Example debug cgroup subsystemcgroup子系统调试例子∙[*] Namespace cgroup subsystem cgroup子系统命名空间∙[*] Freezer cgroup subsystem∙[*] Cpuset support只有含有大量CPU(大于16个)的SMP系统或NUMA(非一致内存访问)系统才需要它o[*] Include legacy /proc//cpuset file∙[*] Simple CPU accounting cgroup subsystem简单cgroup子系统cpu所花费的时间o[ ] Memory Resource Controller for Control Groupscgroup内存资源控制器[ ] enable deprecated sysfs features which may confuse old userspce tools在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口-*- Kernel->user space relay support (formerly relayfs)内核系统区和用户区进行传递通讯的支持。

这个选项在特定的文件系统中提供数据传递接口支持,它可以提供从内核空间到用户空间的大批量的数据传递工具和设施。

如果不清楚,选N。

-*- Namespaces support命名空间支持,允许服务器为不同的用户信息提供不同的用户名空间服务[*] UTS namespace通用终端系统的命名空间。

它允许容器,比如Vservers利用UTS命名空间来为不同的服务器提供不同的UTS。

如果不清楚,选N。

[*] IPC namespaceIPC命名空间,不确定可以不选[*] Initial RAM filesystem and RAM disk (initramfs/initrd) suppor初始RAM的文件和RAM磁盘(initramfs /initrd)支持(如果要采用initrd启动则要选择,否则可以不选)∙() Initramfs source file(s)initrd已经被initramfs取代,如果你不明白这是什么意思,请保持空白[*] Optimize for size这个选项将在GCC命令后用―-Os‖ 代替―-O2″参数,这样可以得到更小的内核。

没必要选。

一个编译好的内核才7-10多M,大家不会少这么点空间吧。

选上了可能会出一些问题。

相关文档
最新文档