深入理解linux内核编译内核出现make[1]: *** [kernel/sys.o] Error 1 make: *** [kernel] Error 2 该怎么改!哭哭!

  在1991年一个叫林纳斯·本纳第克特·托瓦兹的芬兰学生制作了一个现在非常流行的操作系统的内核。他于1991年9月发布了深入理解linux内核 、Java、DOS执行程序等等

  当这个选项啟用时(Enable core dump support),内核可以生成崩溃文件这是一个调试特性。除非这个内核是用来调试(无论内核本身还是软件)不然这个并不必要。

  64位处理器可以执行32位程序如果启用了"IA32 Emulation"最好启用这个特性除非开发者确定内核永远不会运行32位代码。

  下一个设置允许32位处理器访问完整的64位寄存器文件和宽数据路径(x32 ABI for 64-bit mode)然而,仍旧使用32位指针这些32位进程将比同样的为64位编译的进程使用内存更少,因为他们使用32位指针

  下面我们将讲网络支持。

  我们第一个网络设定是启用一般的网络(Networking Support)很少有开发者会禁用这个特性。如果他们这么做了内核会变得又小叒快,但是它将无法使用Wifi、蓝牙、以太网或者任何由网络设备或协议处理的连接一些在独立系统上程序也需要这个特性,即使硬件上不存在网络设备举例来说,X11依赖于网络特性如果你能提供一个替代方案在屏幕上显示图形,你才能在内核中禁用网络特性

  "Packet socket"允许在沒有中介物的情况下,进程与网络设备间进行通信这个增强了性能。

  "Unix domain sockets" (Unix域套接字)是用来建立和访问网络连接X窗口系统需要这个特性;这是一个极好的例子来说明为什么即使系统中不会使用网络但是仍然在内核中启用网络特性。Unix域套接字是运行在同一台机器上的进程间嘚网络协议

database)动态更新。使用移动IPv6的设备需要这个特性当计算机与路由器或者任何形式的网络设备设置了一个网络连接,安全协议会确保两者不会意外地连接到网络上的其他设备上IP数据包被设定发送到一个特定的设备上。然而移动设备会使用不同的网络,比如说提供叻4G信号也需要能够使用相同的连接到新的网络点上。即使可能是相同的4G供应商不同的设备会提供一个4G连接到它的物理位置。当设备处茬新的区域时它仍会使用相同的IP地址。

  下一个特性是显示在包处理中的传输错误统计(Transformation statistics)这对开发者有用。如果不需要可以禁用掉咜。

  下面的是最重要的并且是在网络中最著名的需要启用的特性-"TCP/IP networking"大多数网络(包括因特网)依赖于这个协议。甚至X窗口系统也使用TCP/IP这個特性甚至允许用户ping它们自己(命令:ping 127.0.0.1)。要使用因特网或者X11这个必须启用。

  为了寻找网络中数个计算机"IP: multicasting"必须启用。多播是一种给多囼计算机但不是全部计算机发送消息的能力广播会给网络中的所有计算机发送信号。

  如果下面的特性启用了那么IP地址会在启动时洎动配置(IP: kernel level autoconfiguration)。当用户希望不用配置就能连接到一个网络时是很有用的

  启用了DHCP协议支持,那么深入理解linux内核系统可以通过网络像NFS挂载它嘚根文件系统并且使用DHCP发现IP地址(IP: DHCP support)这允许深入理解linux内核系统通过网络拥有它的远程根文件系统而不必用户在每次系统启动时手动管理进程。

  下面的选项和上面的类似除了使用的是BOOTP而不是DHCP(IP: BOOTP supportBOOTP是自举协议;这个协议使用UDP而不是TCP并且只能使用IPv4网络

  在本篇中,我们将继续配置网络特性记住,网络是计算机最重要的特性这篇文章和这之后的网络相关文章都要重点了解。

  在我们开启这系列之前我先要澄清一些事情。配置进程不会编辑你当前系统的内核这个进程配置的是你编译(或者交叉编译)新内核前的源代码。一旦我完成了配置过程那么我会讨论读者建议的话题。同样作为提醒,每个段落中在引号或者括号中的第一句或者第二句(很少)的文本是配置工具中设置的名芓

  首先,我们可以启用两个不同的稀疏型独立协议组播路由协议("IP: PIM-SM version 1 support" 和 "IP: PIM-SM version 2 support")组播有点像广播,但是广播会给所有计算机发送信号而组播只會给选定的组或者计算机发送信号所有PIM协议都是工作在IP的组播路由协议。

  注意:当计算机与另外一台计算机或者服务器通信时这叫做单播 - 只是以防你们想知道。

  下一个要配置的网络特性是"ARP daemon support"这让内核有一张IP地址表以及它们相应的在内部缓存中的硬件地址。ARP代表嘚是地址解析协议(Address-Resolution-Protocol)

support"应该要启用。这保护计算机免于受到SYN洪水攻击黑客或者恶意软件可能会发送SYN信息给一台服务器来消耗它的资源,以便让真实的访客无法使用服务器提供的服务SYN消息会打开一个计算机和服务器之间的连接。Syncookie会阻断不正当的SYN消息那么,真实的用户可以仍旧访问访问网站而黑客则没办法浪费你的带宽。服务器应该启用这个特性

  下面的特性是用于 "Virtual (secure) IP: tunneling"。隧道是一个网络协议到另外一个網络协议的封装当在使用虚拟私人网络(VPN)时需要使用安全隧道。

  接下来启用"AH transformation"增加对IPSec验证头的支持。这是一种管理数据验证的安全措施

  在这之后,启用"ESP transformation"增加对IPSec封装安全协议的支持这是加密与可选择的数据验证的安全措施。

  如果启用了这个特性(IP: IPComp transformation)深入理解linux内核内核会支持IP负载压缩协议。这是一种无损压缩系统无损指的是数据仍会保持完整,在解压缩后数据在压缩前后没有变化。压缩在加密前先执行由于更少的数据传输,所以这个压缩协议可以加速网络

SECurity).两台计算机之间并且/或者服务器间的传输模式是默认的IPSec模式。传输模式使用AH或者ESP头并且只加密IP头在隧道模式下,IP头和负载会被加密隧道模式通常用于连接网关到服务器/服务器或者服务器到服务器。BEET模式(Bound End-to-End Tunnel)不会在IP地址改变时重连BEET模式下的连接会仍然存在。BEET模式比其他几种模式使用更少的字节

  INET套接字可以启用(INET: socket monitoring interface)。INET套接字用于因特网這个特性(当启用时)会监视来自或者发往因特网的连接与流量。

  以下的设定会启用不同的TCP拥塞控制(TCP: advanced congestion control)如果网络变得太忙或者带宽已满,那么许多计算机必须等待一些带宽或者它们的数据流会变慢如果流量被合理管理,这回有助于网络性能提升

  TCP连接可以被MD5保护(TCP: MD5 Signature Option support)。这鼡于保护核心路由器之间的边界网关协议(Border Gateway Protocol (BGP))连接核心路由器是网络中主要的路由器;这些路由器有时指的是因特网/网络的骨干。BGP是一种路甴决策协议

  下一个设定允许你启用/禁用"The IPv6 protocol"。当你启用它IPv4仍旧可以很好地工作。

  注意:计算机中没有数据是真正随机的计算机Φ随机数和随机字串通常称为伪随机。

  在这之后一个用于处理路由信息的实验性特性可以启用/禁用(IPv6: Route Information (RFC 4191))。记住在编译一个稳定内核时,除非你确实需要这个问题中特性才去安装实验性的功能。

  这里甚至有IPv6移动支持(IPv6: Mobility)这允许使用IPv6的移动设备在保留同样地址的情况下使用其他的网络。

  当启用此项后IPv6可以支持MIPv6路由优化(IPv6: MIPv6 route optimization mode)。这样就可以确保最短和最佳网络路径了如果消息在更少的路由和网络设备间發送,那么下载和上传速度就可以更快

  允许支持多重路由表(IPv6: Multiple Routing Tables)。路由表是一张网络位置列表和数据要去目的地的路径

  典型的组播路由根据目标地址和源地址来处理组播包(IPv6: multicast policy routing)。启用这个选项会将接口和包的标记(mark)包含到决策中

  网络包可以通过启用安全标记(Security Marking)变得更咹全。

access)RDMA用于一台远程计算机访问另一台计算机的内存而无需本机计算机操作系统的辅助。这就像直接内存访问(DMA),但是这里远程代替了本地計算机

  要想使用基于深入理解linux内核的以太网桥,启用这个桥特性(802.1d Ethernet Bridging)在网络中,一个桥同时连接两个或者更多的连接以太网桥是使鼡以太网端口的硬件桥。

  下一个过滤特性允许以太网桥选择性地管理在每个数据包中的基于VLAN的信息的流量 ?用这个特性可以减小内核嘚大小。

  "DECnet Support"是一种Digital公司发明的网络协议这是一中既安全又稳定的协议。

  注意:深入理解linux内核可以用于服务器、工作站、路由器、集群、防火墙并支持其他许多用途

  下面的特性用于支持逻辑链路层2(Logical Link Layer type 2)(ANSI/IEEE 802.2 LLC type 2 Support)。这层允许在同一个网络设备上使用多个协议强烈建议在网络佷重要的环境中启用这个特性。最好所有内核都支持这个特性

  在下一篇文章中,我们将讨论更多的关于可以配置的网络设定

  為了使NetWare服务器在服务的网络中有相同的IPX地址,启用下一个特性(IPX: Full internal IPX network)不然,每个网络都会看到服务器一个不同的IPX地址

  注意:IPX协议使用IPX寻址,而不是IP寻址IP地址不是计算机网络中唯一的网络地址。

  这是另外一个协议层称为"X.25" (CCITT X.25 Packet Layer)这个协议层通常用于非常大的网络,就像国家公网许多银行使用这个在他们的扩展网络系统里。X25(拼成"X25"或"X.25")网络拥有将进入数据包打包的包分组交换机X25正在被更简单的IP协议代替。X25是一個不如TCP/IP有效率的旧协议但是一些公司发现它在大型、复杂的网络中很有用。

  LAPB是用于X.25的数据链路层(LAPB Data Link Driver)如果上面的启用了,那么这也应該同时启用LAPB代表的是"Link Access Procedure Balanced"(链路访问过程平衡)。LAPB同样也用于以太网和X.21网卡中(这里没有打错)X.21是用于物理层(硬件),X.25用于网络层。LPAB会检查错误并确保包被放回正确的序列中

  下一个网络通常是用于不同自动设备间的小型无线连接(IEEE Std 802.15.4 Low-Rate Wireless Personal Area Networks support)。802.15.4是一种需要很少电量的简单低数据率协议这个无線协议最大可扩展到10米。这在通过无线网络连接机器人传感器时是很有用的任何不该有线缆的机械可能都会从这个代替了绳子的本地无線网络中获益。

  当有许多包需要传输时内核必须决定先发送哪一个(它们不能一次全部发送),所以这个特性帮助内核区分包的优先级(QoS and/or fair queuing)如果不启用这个,那么内核会使用"first come, first serve approach"("谁先到谁先服务")。这可能意味着紧急的网络消息需要等待才能轮到它们传输

  在有数据中心服務器的网络中,这个特性强烈建议启用(Data Center Bridging support)这个特性增强了以太网对数据中心网络的连接。

  DNS查询可以在下一个选项中启用(DNS Resolver support)大多数存储DNS緩存的系统允许计算机无需DNS服务器的辅助下执行DNS查询。

networking"(更好接入移动专用网络)这个工作与有线和无线网络。专用网络没有中心像路由器這类中心设置每台网络上的设备就像个一台路由器。网状网络是一个简单的概念每个节点必须路由发送给它的数据。在这个网状网络Φ每台计算机连接到全部或几乎全部其他网络设备。当这样的网络画在纸上成为一张地图时这个网络看上去就像一张网。

  当许多網状节点连接到相同的LAN和网时一些网络信号可能会回环(Bridge Loop Avoidance)(避免桥回环)。这个特性可以避免此类的回环这些回环可能永远不会结束或者降低性能。避免这样的回环被称为"Bridge Loop Avoidance (BLA)"

  BATMAN协议有些开发者需要用到的调式特性(B.A.T.M.A.N. Debugging)。对于任何调试特性通常最好禁用它来节省空间以及得到一個更好优化后的内核。

  虚拟化环境可以从"Open vSwitch"中得益这是一个多层以太网交换机。Open vSwitch支持大量的协议

  虚拟机、hypervisor、主机之间的网络连接需要"virtual socket protocol"。这个类似于TCP/IP.这些套接字就像其他网络套接字但是它们针对虚拟机。这允许客户机系统拥有一个与主机的网络连接

  这是一個可以管理网络优先级的cgroup子系统(Network priority cgroup)。这允许控制组(cgroup)根据发送应用设置网络流量优先级

  下面,我们有两个网络测试工具第一个是"Packet Generator"(包生荿器),这用于测试网络时注射数据包(制造空包)第二个,允许设置一个警报系统当数据包丢失时警告用户/系统(Network packet drop alerting service)。

  深入理解linux内核内核鈳以用于无线电系统或者远程控制它们"Amateur Radio AX.25 Level 2 protocol"用于计算机通过无线电通信。这个无线电协议可以在其他许多的协议中支持TCP/IP

  注意:网关是兩个或者更多网络的接口设备,它提供不同的协议一个简单的定义可以是"网关是一个协议转换器。"

  注意:路由器转发网络流量和连接使用相同协议网络

  如果启用了(一些选项),深入理解linux内核内核可以支持很多CAN设备(主要是控制器)和接口所有的CAN驱动都是对于这些设備的不同品牌和型号。在配置工具中它们有以下这些标题。

  像深入理解linux内核中的其他许多特性CAN设备同样可以启用调试能力(CAN devices debugging messages)。再说┅次记住你内核的目的,你需要调试还是需要性能?

  "nl80211 testmode command"是用于校准并且/或验证的实用工具它无线设备芯片上执行这些任务。

  另外┅个相同特性的算法叫做"Minstrel"这是一个比TX速 管理算法更精确和有效的算法。

  对于支持这个特性的设备对于不同包流量时间的LED除法器特性可以启用(Enable LED triggers)。在我的以太网设备商上当端口是活跃时LED灯会点亮。这些驱动可以是这些LED在包流量时间下工作

  在下一篇文章中,我们還有更多的需要配置

Access"(微波存取全球互通)。WiMAX的目的是代替DSL宽频指的是宽的带宽和大量信号的传输。

  "9P Virtio Transport"(9P 虚拟io传输)系统提供了在虚拟系统仩客户机和主机分区间的传输

  下面,cephlib可以加入内核它可以用于rados块设备(rbd)h和Ceph文件系统(Ceph核心库)(译注:Ceph是一种分布式文件系统)。cephlib是是Ceph的完整核心库Ceph是存储平台。CephFs(Ceph文件系统)是运行在另外一个文件系统的顶部通常,CephFs运行在EXT2、ZFS、XFS或者BTRFS上面Rados设备是使用CephFs的块存储单元。

  如果NFC特性启用了那么通常也启用"NFC LLCP support"(就像上面那样)。

  现在我们将继续配置与网络无关的驱动。首先我们可以选择uevent帮助程序的路径(path to uevent helper)如今许哆计算机不在需要这个特性因为一个uevent帮助程序会在每次执行时fork一个进程处理。这回很快地消耗资源

  一些二进制专有驱动需要在启动時使用。这个特性允许这类软件这么做(External firmware blobs to build into the kernel binary)一些计算机有些引导设备需要只包含专有二进制文件的特殊固件。这个特性不启用系统将无法引导。

  用户空间可以通过套接字得到进城时间的通知(Report process events to userspace)一些报告事件包含了ID改变、fork、和退出状态。一些先前启用的内核特性可能需要這个最好按配置工具建议的那样设置。

  使用固态硬盘的系统需要MTD的支持(Memory Technology Device (MTD) support)MTD设备是固态存储设备。典型的存储设备与固态硬盘(SSD)不同鼡于磁盘单元的标准常规不适用于SSD(读、写、擦除)。

  大多数会桌面电脑带有并口(一个有25个洞的连接器)所以他们需要这个特性(Parallel port support)。并口在其他许多鲜为人知的应用中通常用于打印机和ZIP驱动器并口有25针。

  对IBM兼容计算机启用这个特性(PC-style hardware)它们是不同类型的计算机。除了IBM计算機(通常运行Windows),还有苹果计算机Linxu可以运行在几乎所有类型的计算机上。

  下面一个特性用于探测Super-IO卡(SuperIO chipset support)这些探针会发信中断号、DMA通道和其他類型设备的地址/数量。Super-IO是一种集成IO控制器类型

  注意:对于许多特性来说,你最好按照配置工具的建议除非你有特别的理由不这么做通常地,如果你是交叉编译或者编译一个通用内核那么你应该熟悉你想要支持的并做出相应的选择。

  即插即用("Plug and Play support" (PnP))应该启用这允许鼡户在系统开机状态下插入设备并能马上使用它们。没有这个特性用户不能使用USB设备、打印机或者其他没有执行特殊任务的设备。系统會自动管理复位(译注:原文是 "The system will manage the rest automatically")

  下面,用户可以启用块设备(Block devices)这是一个应该启用的特性,因为块设备很常见

  还有一个ATAPI磁盘设备鈳以插到并口中(Parallel port ATAPI disks)。这个驱动会除了支持CD-ROM外还支持其他类型的磁盘

  还有许多其他的ATAPI设备可以连接到并口中。结果就是一个通用驱动被用于管理前面提到过的驱动不支持的设备(Parallel port generic ATAPI devices)。

  连接到并口上的IDE设备需要一个特殊的协议用于通信有很多这样的协议,其中一个是"ATEN EH-100 protocol"

  再提一次,这里有另外一个协议但是这个强烈建议用在更新的插在并口上的CD-ROM和PD/CD设备(FIT TD-3000 protocol)。

  一些其他的并行IDE协议可以启用包括:

  注意:这些协议以及支持的插入并口的设备意味着这些都类似于热插拔设备,就像USB设备插入USB端口一样。USB和火线人仍旧是使用最流行的端口,洇为它们的大小和速度一个并口设备单元大于USB闪存因为并口大于USB端口。

  你可能已经猜到了- 下面的文章会讨论更多的配置.

  准备好配置更多的驱动了么还有很多要做。

support)阵列控制器是将物理存储单元表现为逻辑单元的设备。这些控制可能同样实现了基于硬件的RAID硬件和软件RIAD的不同是简单的。深入理解linux内核管理并见到软件RIAD深入理解linux内核将硬件RAID视为另外的存储单元。这意味着深入理解linux内核没有意识到設备就是RAID驱动器硬件(阵列控制器)独立于内核管理着RAID系统。这对于系统的性能更好因为内核不必配置或者管理RAID注意,不同的阵列控制器囿不同的RAID能力

  带电源备份的MM5415内存芯片在这个驱动中支持(Micro Memory MM5415 Battery Backed RAM support)。带后备电源内存芯片允许数据在切断电源后继续保存在内存设备中这有助于保护数据。不然当电源断开后,当前的计算机会话就会丢失

  当启用这个特性后,可以将典型的文件(比如ISO文件)作为一个块设备並挂载它Loopback device support)这对于从镜像文件中检索文件而不必把文件烧录到光盘或者解压出来。想像一下你从因特网上得到了一份包含了很多文件的ISO文件如果你只需要包中的一个文件并且用户不希望烧写ISO到光盘上或者不想知道如何打开一个ISO文件。用户可以用挂载ISO来替代

  深入理解linux內核内核在初始化阶段会创建一些回路设备,所以一些回环设备已经准备好并创建了(Number of loop devices to pre-create at init time)当一个文件(像ISO)或者虚拟设备(就像虚拟磁盘驱动器[vhd])被莋为回环设备挂载时会节约一些时间。这个设定允许开发者选择内核可以预 创建多少回环设备

  当"Cryptoloop Support"启用后就可以CryptoAPI创建密码。这个用于硬件驱动器加密然而,并不是所有的文件系统都支持

support"(译注:深入理解linux内核上的分布存储系统)。这个就像网络RAID1这些设备拥有设备文件/dev/drbdx。这些设备通常被用于集群这里集群中的每台计算机都有一个从主单元镜像过来的存储单元。这意味着每台计算机的硬盘是位于组中心計算机硬盘的镜像拷贝集群是一组计算机扮演着一台大型强力单元的角色。然而每个集群都有一台控制计算机称为主节点。余下的计算机是从节点

  DRBD支持用于测试IO错误处理的故障注射(DRBD fault injection)。记住故障注射就是使设备/软件认为发生了一个错误,因此开发者可以测试硬件/軟件如何处理错误

  如果内核要成为网络块设备的客户端那么启用这个特性(Network block device support)。第一个设备文件是/dev/nd0网络块设备是通过网络访问的远程存储单元。

  深入理解linux内核允许将一部分内存作为块设备(RAM block device support)这通常见与完全运行于内存上的深入理解linux内核的live发行版。深入理解linux内核的live发荇版会卸载光盘并接着加载到内存中所以在尝试一个新的操作系统或者修复另一个系统时不会伤害到已安装的系统。

  内核可以支持茬内存设备的XIP文件系统作为块设备(Support XIP filesystems on RAM block device)这个特性会增大内核的大小。 XIP (eXecute In Place)文件系统是一个允许可执行文件在相同的文件系统上存储数据而不必像其他应用一样利用内存在一个驻留在内存上的live版深入理解linux内核系统上运行可执行文件时需要这个文件系统。

  内核开发者可以设置最夶活跃并发包数量(Free buffers for data gathering)大的数字会以内存的消耗为代价加速写入性能。一个包会消耗大约64KB

  深入理解linux内核内核可以使用可擦写光盘作为緩存空间(Enable write caching)。这个特性仍然是试验性质

  注意:深入理解linux内核内核支持很多传感器因为深入理解linux内核内核经常用于天气设备和机器人。

  一些带有IOC4芯片的SGI IO控制器需要这个驱动(SGI IOC4 Base IO support)SGI IO是由SCI管理的输入/输出设备。IOC4芯片控制着许多由这些设备执行的任务这是一个基础驱动。其他对這些设备的驱动依赖于这个驱动

  注意:如果内核是为广泛的计算机编译的话,大多数驱动应该以模块形式加入

  "VMware Balloon Driver"将客户机操作系统不需要的物理内存页交给需要那些需要的。

  再说一次继续留意下一篇文章因为我们还有更多的要做。

  欢迎来享受深入理解linux內核内核配置系列下一部分如你所猜到的那样,内核支持大量不同的硬件、协议和特性

Memory)芯片。SRAM是静态而不是动态存储器就像DRAMDRAN必须被刷新以保留数据而SRAM不需要刷新。然而两者都会在电源关闭或者丢失时失去数据。

  老式的I2C EEPROM芯片需要一个除了上面I2C驱动之外的驱动(Old I2C EEPROM reader)I2C总線用于嵌入式系统和电话,由于它用的是低速总线协议

  和其他内核特性一样,这里有一个对于EEPROM的调试特性(Enable driver debugging)再说一次,为了更好的性能禁用调试特性。

Interface"同时ATA也在讨论接口标准的时候讨论过。

  为了支持SCSI磁盘启用下一个特性(SCSI disk support)。这是一个通用驱动

  为了支持SCSI磁带,启用这个特性(SCSI tape support)这是一个通用驱动。SCSI磁带驱动器在像磁带的磁性条上记录数据

  这是一个对于大量不同SCSI设备的通用驱动(SCSI generic support)。这主偠用于SCSI扫描仪和其他不被上面提到的SCSI驱动支持的设备或者那些之后会讨论的设备

  为了增强你的系统,启用这个特性会允许SCSI在系统启動时就被探测到而不是先启用再探测(Asynchronous SCSI scanning)大多数系统可以一次执行这两个任务,因此为什么允许这项? 对于那些连接了很多SCSI设备的硬件这个會明显加快启动速度。

  下面的特性和上面提到的一样但是发送光纤通道设备的传输信息(FiberChannel Transport Attributes)(光纤通道接口)。光线通道设备使用SCSI

  下媔,ATA支持被加入libsas(ATA support for libsas (requires libata))注意配置工具提示需要libata。为了满足这个需求启用ATA支持。更多情况下配置工具已经或者将会会你这么做,但是请无论洅检查一下libsas和libata是相应的支持SAS和ATA的库。

  多路径安装的设备需要这个特性(SCSI Device Handlers)这用在每个节点都需要一个到SCSI存储单元的直接路径的集群中。

  这个特性生成一个SCSI上层用于测试和管理/dev/osdx设备(OSD Upper Level driver)exofs使用这个驱动用于挂载基于OSD的文件系统。OSD设备不像其他存储单元一样使用块的存储设備相反地,OSD设备存储数据在称之为对象的容器里exofs曾经称作OSDFS。

  如今我们可以讨论串行ATA和并行ATA特性和驱动了。首先启用/禁用用于调試的第一个特性(Verbose ATA error reporting)

  下一步,用户应该对于ATA设备启用高级配置及电源接口特性(ATA ACPI Support)这允许内核在SATA设备上更有效地管理电源使用。

  贴士:即使你在编译一个高性能的内核尝试启用所有的电源管理特性。则减少了电源消耗、操作开销、热量产生(热量会降低性能)以及老化。

  SATA端口复用器需要这个驱动(SATA Port Multiplier support)端口复用器是一个拥有许多端口但是自己仅需插入一个端口的设备。举例来说如果一个硬件有一个SATA口,但是还需要更多的口在这个口上插入端口复用器。现在设备可以有许多SATA口了

  下面是一些特殊设备的驱动

  再说一次,等着下┅篇精彩的文章

  你好!这是深入理解linux内核内核系列的下一篇,我们仍将配置ATA设备并将进入逻辑卷/存储

  接下来,这个驱动支持PC卡仩的ATA设备除非有特定设备管理硬件的驱动(PCMCIA PATA support)

  PATA设备的电源消耗由这个ACPI驱动管理(ACPI firmware driver for PATA)。强烈建议对系统上所有的硬件启用ACPI虽然这会增加内核嘚大小,但是ACPI会增强性能

  有趣的事实:内核是由C和汇编写成的。

  这个驱动允许RAID和LVM组合在一起这用于使几个LVM卷使用RAID。分区被组匼成逻辑块设备然后形成RAID设备。

  许多用户会希望RAID可以在启动时侦测到(Autodetect RAID arrays during kernel boot)如果你没有RAID,那么不要启用这个特性不然,启动处理会比原先希望的慢上几秒

  注意:当配置深入理解linux内核内核时,最好按照"use it or lose it"(非用即失)的原则那就是,如果你不用它那就禁用这个特性。

  MD框架需要多路径支持(Multipath I/O support)MD框架就是多设备(Multi Device)框架,它将多台设备作为一个单元管理。举例来说将许多存储单元的分区组合起来可以使多个設备就像一个那样。多路径支持是用于使用处理虚拟的有多个地址的"单个设备"因为单存储单元物理上有多件物理设备,所以它有多个硬件地址

  如果需要,逻辑设备可以设置加密数据(Crypt target support)这个特性允许用户将来加密那些存储设备。

  只有启用了这个特性才能使用逻輯存储单元的快照功能(Snapshot target)。

  "Thin provisioning"(自动精简配置)允许逻辑卷设置成比组成逻辑卷的物理设备拥有更大的存储容量(Thin provisioning target)这个特性同样为这类设备提供了快照功能。这额外的虚拟数据空间无法马上使用这个特性的意义是允许用户在将来增加物理存储单元并且节约了配置逻辑块设备的時间。

  块设备性能的提升可以通过移动更多的常用数据到更快的存储单元中(Cache target (EXPERIMENTAL))

  卷管理器可以制成镜像逻辑卷(Mirror target)。

  "Zero target"是一个忽视写叺并返回读取为零的设备

  接下来,卷管理器应该对硬件有多路径支持(Multipath target)

  如果一个逻辑卷上的物理存储单元正忙,如果可能的话这个特性会允许读取/写入到另一个物理卷上。

  udev可以生成设备管理器操作事件DM uevents)udev是/dev的设备管理器。

  为了测试软件/硬件对偶尔失败嘚输入/输出任务的逻辑设备如何反映启用这个调试特性(Flakey target)。

  逻辑卷可以创建为一个用于验证另一个逻辑分区数据的只读存储单元(Verity target support)

  注意:如果你喜欢我的文章,并且如果你有的账号请在我的文章上点击"Like"。同样再次分享这篇文章在Google、Twitter和/或者Facebook上。

  有趣的事实:罙入理解linux内核内核没有"main()"函数在程序中,main()被依赖于kernel的libc调用内核没有main()函数是因为libc将无法启动内核。如果内核的确有main()函数那么我们就有一個"鸡或者蛋"的问题-谁先来?另外内核的入口点用汇编写成,这并不使用main()函数

  下一步,可以启用/禁用"FireWire SBP-2 fabric module"这允许一台计算机作为一个硬盘连接到另一台计算机上。

  我可以读到你们的想法-你们会想到对于这个还有另外一篇文章是的,你们想对了请继续关注这个系列的下一篇文章。

  如果你喜欢这个系列请在和/或者Google+上发表评论告诉我你有多喜欢这个系列,并且告诉我你想在今后的文章中希望看箌的方面或者给我发邮件)。谢谢!

  想要更多地了解作者请检查下面的签名栏中的链接(译注:原文所在论坛有)

  如果你已经完整哋阅读了这篇文章,那么你应该已经看到单词"Facebook"三次了如果没有,你没有阅读全部文章

  单词"Facebook"在这段中,上一段和一个注解中。我咑赌你阅读了上面的段落而没有通读文章来试图寻找第三个单词实例

  欢迎进入深入理解linux内核内核系列文章的下一篇!我们正在接近配置过程的终点。在这篇文章中我们将会讨论固件驱动和文件系统驱动。

  最后的驱动是一组"Google Firmware Drivers"这些驱动用于Google特定的硬件。除非你为Google笁作并且需要在硬件上使用深入理解linux内核或者你在为一台从Google偷来的电脑编译内核否则不要启用它。

  下面我们可以配置内核的文件系统支持。

  "OCFS2 statistics"驱动允许用户得到关于文件系统的统计信息

  "OCFS2 expensive checks"驱动以性能为代价提供了存储一致性检测。一些深入理解linux内核用户建议呮有在调试目的在才启用它

  为了支持一些文件系统使用到的flock()系统调用,启用这个驱动(Enable POSIX file locking API)禁用这个去的那个会减少11KB的内核大小。这个驅动提供了文件锁定文件锁定是一个允许进程在某刻读取文件的过程。这通常用于网络文件系统就像NFS。

  "Dnotify support"驱动是一个古老的文件系統通知系统它提醒文件系统上的事件的用户空间。它和它的继承者被用于监控应用的文件系统某个应用告诉守护进程需要监视哪些事件。不然每个用户空间应用需要它们自己完成这个任务。

  对于用户想要划分存储空间的系统需要 "Quota support"

  这个驱动允许配额系统执行額外的完整性检查(Additional quota sanity checks)。在计算机技术中完整性检查是检测由于不良编程导致的错误。文件和输出都被检查来确保数据正确而不是以奇怪的方式构造

  一些旧的系统使用老的配额系统但希望在升级新内核时保留旧的配额系统。可以通过启用这个来容易解决(Old quota format support)许多读者可能想要知道为什么一些人想要保留旧的配额系统而不是更新新的。好的想想一下你是一家很大公司的IT部门的经理,公司有许多服务器运行著非常重要的任务当你可以继续使用现在工作的很好的系统,你想要创建并配置一个新的(也可能很大)的文件系统么 通常上,对于计算機坚持下面的原则 - 如果它没有坏或者不会导致安全问题,不要去修复它

  下一篇文章中,我们会继续讨论缓存光盘文件系统,深叺理解linux内核上的FAT32和其他有趣的文件系统话题谢谢!

  你好! 准备好读另一篇很酷的深入理解linux内核内核文章了么?

  在这之后,如果计算机处理拥有火线端口就应该启用"FireWire driver stack"如果没有,那么就没有必要去启动一个不会使用到的火线驱动火线很像USB。不过在协议、速度、物理形状和端口布局上不同通常上,苹果设备使用火线和USB一些PC有火线端口,但是不像USB口那样普及

(OSM))必须在目标操作系统上使用。OSM可以与任哬HDM通信I2O卡/总线有一个IOP- 输入/输出处理器(Input/Output Processor)。由于主CPU处理更少的数据所以加速了系统。

  可以启用I2O总线适配器的OSM软件(I2O Bus Adapter OSM)这组OSM被用来寻找新嘚在其他适配器末端的I2O设备。

  下面的OSM用于I2O控制器上的SCSI或者光纤通道设备

  在启用/禁用了I2O特性,我们可以继续其他的内核特性下媔,我们看到"Macintosh device drivers"这只对苹果设备有用。PC的深入理解linux内核内核不应该有任何这些驱动启用然而,正如许多说法都有例外一样一些PC用户可能会使用苹果鼠标、键盘和/或者一些其他的苹果设备。再说一次最好彻底地理解需求和正在开发的内核。

  下一步我们有一个用于網络的驱动(Network device support)。X11和其他的深入理解linux内核软件不依赖于这个驱动所以如果内核不会连接到另一台计算机、因特网、内联网或者网络,那么这個特性可以安全地禁用

  使用这个驱动(Dummy net driver support),可以在深入理解linux内核中设置一个虚拟网络虚拟网络(dummy network)就像网络中的/dev/null。任何发送给虚拟网络的數据都会永久消失因为它会发往/dev/null。IP地址没有设置用户可以定义他们的网络相当于/dev/null。

  "MAC-VLAN support"允许用户在特定的MAC地址和某个接口上映射数据包

  内核发送给网络的消息可任意通过这个特性记录下来(Network console logging support)。除非记录网络信息对你很重要时才启用它禁用这个特性会增强性能。

  首先我们可以启用/禁用"3Com devices"接下来允许内核开发者选择支持哪些3Com设备。

  这些只是特定设备/供应商驱动通常地,这些驱动被作为模块加入

  注意:请记住内核会运行在哪类硬件上。对于大量不同的设备或许最好把它们作为模块加入

  当在恶劣的模拟线路上使用SLIP時,最好启用"Keepalive and linefill"这会帮助保持连接。

  现在我们可以进入流行的USB系统但是这些是用于网络的USB驱动。

  下一篇文章中我们将继续配置USB网络系统。

  你好!在这篇深入理解linux内核系列文章中我们将继续配置USB网络驱动。接着我们将进入输入设备

  注意:通常地,最恏将适配器驱动作为模块加入

  下面,有一些供货商/设备特定驱动用于不同的USB网络设备和芯片组

  再说一次,还有更多的驱动用於供货商特定设备

  有趣的事实:深入理解linux内核被用于制作James Cameron的电影"泰坦尼克"的特效。

  现在我们可以进入使用802.11规范的无线局域网驅动了。

  主要地这里有一个供货商/设备特定驱动列表。

  内核开发者可能注意到一些无线设备可以支持QoSQoS代表"Quality of Service"(服务质量)。这个特性给予网络传输优先级假设需要通过网络传输两组数据。只有一个可以先发送QoS会先发送最重要的数据。

  有趣的事实:技术上来说深入理解linux内核并不是一个操作系统。深入理解linux内核是一种内核而GNU/深入理解linux内核才是操作系统

  "LAPB over Ethernet driver"创建一个允许用户在以太网上使用LAPB的點到点连接到另一台计算机的设备文件。这个设备文件对于第一个此类设备通常是/dev/lapb0

  用这个驱动,X.25帧可以通过电话线发送(X.25 async driver)特别地,這个驱动允许X.25使用异步串行

  下一个驱动允许使用并行连接携带已安排的流量(Multiple line feature support)。这允许深入理解linux内核系统更加有效地在SBNI12适配器上管理並行连接一些深入理解linux内核用户声称这个驱动双倍加速了他们的速度。然而这个我没有亲身测试了解。

  接下来可以配置"IEEE 802.15.4 drivers"。这个昰对于慢速WAN设备这是一个控制媒体和无线网络物理层的标准。这个规范在不同的大洲使用不同的频率不如,在欧洲这类无线设备会使用868.0-868.6MHz的频率。

  有趣的事实:目前内核中只有大约2%的代码是由Linus Torvalds写的

  VMware使用vmxnet3虚拟以太网需要这个驱动(VMware VMXNET3 ethernet driver)。当在为大量用户编译内核时朂好将这个启用为一个模块,因为一些人可能并不希望在VMware上使用以太网

services"。有一台ISDN适配器计算机可以开始并接收语音呼叫。这允许计算機用来做因待机或者其他一些电话服务设备ISDN同样也可以携带视频信息。

  现在我们可以进入输入设备了(Input device support)。这些是给计算机信息的设備鼠标和键盘是最常被使用和了解的输入设备。扫描仪是另外一种输入设备的例子

  使用稀疏键盘映射的输入设备需要这个驱动(Sparse keymap support library)。鍵盘映射是键盘的布局信息

  注意:当为广泛的用户组编译内核时,包含大多数或者全部输入设备作为模块因为通常不知道用户可能插到计算机上的设备类型。

  有趣的事实:Vanilla内核就是深入理解linux内核自己的原始内核是未改变的状态。

  如果系统有一块数位板那么需要设置水平分辨率(Horizontal screen resolution)和垂直分辨率(Vertical screen resolution)。数位板是一种支持允许用户绘画的触控笔的触摸屏另外的触摸屏无法支持如此复杂的输入。

  "Event debugging"驱动会输出所有的输入事件到系统日志中除了要调试系统否则不要以任何理由启用它。显然地这么做为了性能原因,但是我这么建議禁用的主要原因是安全目的所有的按键都会被明文记录下来包括密码。

  下面列出了不同的键盘(Keyboards)配置驱动,接下来是鼠标(Mice)驱动和操纵杆和游戏手柄(joystick/gamepad)驱动

  在这之后,列出了不同特定的平板硬件/供货商的不同驱动(Tablets)在这之后是触摸屏的驱动列表。

  最后一组输叺设备驱动是对于特定硬件和供货商的杂项驱动列表(Miscellaneous devices)

  这个系列的下一篇文章会讨论输入端口。不要忘记阅读这个系列的其他文章和這个网站谢谢!

  致粉丝: 谢谢你们的邮件告诉我你们对这些文章的喜爱。

  欢迎来到下一篇深入理解linux内核内核文章在本篇里,我們将讨论输入/输出端口

  注意:我想要说清楚这篇文章中讨论的PS/2控制器并不是Sony的PlayStation上的游戏控制器。这篇文章讨论的是6针鼠标/键盘端口控制器是一种有PS/2端口的卡。

  下一步我们可以进入"Character devices"。字符设备以字符传输数据

  首先,可以启用/禁用TTY(Enable TTY)移除TTY会节约很多空间,泹是许多终端和这类设备需要TTY除非你知道你在做什么,否则不要禁用TTY

  致我的粉丝:如果你知道一个禁用TTY的理由,你能在下面发表伱的答案并与我们共享么?谢谢!

  下一步可以启用/禁用"Virtual terminals"(虚拟终端)。再说一次这个可以节约很多空间,但是虚拟终端很重要

  虚擬终端必须通过控制台驱动与物理终端交互(Support for binding and unbinding console drivers)。在虚拟终端可用之前控制台驱动必须被加载。当虚拟终端关闭后控制台终端必须被卸载。

  有趣的事实:深入理解linux内核内核允许某个文件系统一次在很多地方被多次挂载

  下面有一些用于特定板和卡的驱动。

  下面我们可以进入到串行设备驱动了。如前所述串行设备每次传输一位。

  下面有不同的供应商/设备特定驱动。

  接下来的驱动允許打印机作为一个控制台(Parallel printer support)这意味着内核消息会被逐字地由打印机打印。通常地在这个系列中使用"print"(打印)这个单词时意味这将输出信息到屏幕上。而这次字面上的意思是将数据输出在纸上。

  再说一次深入理解linux内核内核有许多特性和驱动,所以我们还会在下一篇文章Φ继续讨论更多的驱动谢谢!

  致粉丝:我们正在接近配置过程的终点。我有一张你们很多人想知道的内核话题列表这些话题包含叻安装内核、管理模块、加入第三方驱动、还有许多其他有趣的建议和要求。

  你好!这篇文章会覆盖不同的驱动

  "/dev/nvram support"允许系统读取囷写入实时时钟的内存。通常上这个特性用于在掉电时保存数据。

  现在我们可以进入PCMCIA字符设备驱动。然而大多数这里的驱动是供货商/设备特定的。

  下面可以设置支持的原始设备的最大数量。

  注意:你们中很多人可能会想知道为什么要启用这些设备文件問题好的,这些设备文件充当了一个软件和硬件之间的接口

  通过这个驱动可以映射HPET驱动(Allow mmap of HPET)。映射是一个生成设备和文件在内存中的哋址列表文件接着可以通过内存地址更快地找到并且接着指挥硬盘从地址中得到数据。

  "Hangcheck timer"用于检测系统是否被锁定这个定时器监视著锁定进程。当一个进程被冻结了定时器就开启。当定时器停止后如果进程还没有重启或者关闭,那么定时器会强迫进程关闭

  引用Linus Torvalds的话:可移植性是对于那些无法写新程序的人而言的。

  一些旧的软件将I2C适配器作为类设备但是如今的软件不会这么做(Enable compatibility bits for old user-space)。所以這个驱动会提供对旧软件的向后支持。

  引用Linus Torvalds的话:深入理解linux内核中没有原始设备的原因似乎我个人任何原始设备是一个愚蠢的注意

  有时候,错误发生在了整个系统必须知道的核心系统中(EDAC (Error Detection And Correction) reporting)这个驱动发送核心给系统。通常地这类底层错误由处理器中报告并接着由這个驱动让其他系统进程知道或者处理错误。

  EDAC可以用来设置发送调试信息给深入理解linux内核的日志系统(Debugging)

  引用Linus Torvalds的话:没有人可以第┅次创造如此好的代码,除了我

  下面,还有很多用于特定设备组的检测和纠正错误的驱动

  引用Linus Torvalds的话:理论和实践有时会冲突。那这个发生时理论输了。每次都是

  现在我们可以进入实时时钟("Real Time Clock")。这通常缩写为"RTC"RTC一直跟随着时间。

  下面我们会讨论直接內存访问系统。DMA是硬件独立于处理器的内存访问过程DMA增加的系统性能因为处理器将做得更少如果硬件自身做了更多的任务。不然硬件會等待处理器完成任务。

  接下来有许多的供货商/设备特定驱动用于DMA支持。

  大端指的是二进制码的排列英语国家的数字系统将數字的最大端放在左边。比如数字17,最左的数字是放置十位的地方大于个位在大端中,每字节最大的放在左边字节有8位。比如:烸一处都有相应的值128、64、32、16、8、4、2、1。所以提到的为被转换成十进制180

  下一篇文章中,我们会讨论显示/视频驱动谢谢!

  你好!准备好阅读下一篇文章了么?在本篇中我们将会讨论辅助显示。辅助显示是一些小的LCD屏幕;大多数小于或等于128x64接着,我们会讨论用户涳间IO驱动一些虚拟驱动,Hyper-V开发中驱动,IOMMU和其他一些内核特性。

  可以改变这些LCD屏幕的刷新率(Refresh rate (hertz))通常上,更高的刷新率会导致更多嘚CPU活动这意味着一个缓慢的系统需要一个更低的刷新率。

  设置完辅助显示后接着设置"Userspace I/O drivers"。用户空间系统允许用户的应用和进程访问內核中断和内存地址启用了它,一些驱动可以放在用户空间

  下面,是一些供应商/设备特性的驱动

  接下来是virtio驱动。virtio是一个IO虚擬化平台这个虚拟软件用于操作系统虚拟化。这在深入理解linux内核系统上的虚拟机上运行一个操作系统时需要

  "Virtio balloon driver"允许虚拟系统的内存根据需要扩展或减少。通常上没有人希望在需要内存的时候,虚拟系统保留它可能不会使用的内存

  下面,我们会配置处于开发阶段的驱动这些驱动正在开发当中,可能会变化很快或者还没到深入理解linux内核内核的质量标准。这个分类中的驱动只有Android驱动(在内核3.9.4中)昰的,Andorid使用深入理解linux内核内核这使得Andorid变成了一个深入理解linux内核系统。然而这仍然有争议。如果内核是用于Android那么最好启用所有的驱动。

  "Android Low Memory Killer"会在需要更多内存关闭进程这个特性会杀死不再使用或活跃的任务。

  在配置完开发阶段的驱动后下面的驱动用于X86平台。这些驱动是 X86 (32-bit)的供应商/设备特定硬件

  下一个驱动是"Mailbox Hardware Support"。这个框架控制邮箱队列和硬件邮箱系统的中断信号

  "IOMMU Hardware Support"链接内存到能够使用DMA的设備上。IOMMU增强了DMAIOMMU映射地址并阻止故障设备访问内存。IOMMU同样允许硬件访问比没有IOMMU更多内存

  一些设备可能会接受不同的电压和时钟频率。这个驱动允许操作系统控制设备的电压输出和时钟频率(Generic Dynamic Voltage and Frequency Scaling (DVFS) support)启用了这个驱动,可以启用下面的那些对于电源/性能管理特性

  "Simple Ondemand"就像上面嘚,但是只会基于设备活动改变时钟频率通常上,更多的活动意味着设备需要更快的时钟速率来使用更多的资源需求

  "Performance"允许系统设置最高支持的时钟速度以满足最好的性能。这会增加电源消耗

  "Powersave"会设置时钟频率到最低以节约电源。

  "Userspace"允许用户空间设置时钟频率

  "External Connector Class (extcon) support"使得用户空间可以监视外部连接器如USB和AC口。这允许应用了解是否插入了线缆用户几乎都希望启用这个。如果任何人由于某个合理嘚理由禁用了它请告诉我们为什么这么做。

  接下来是不同的供货商/设备特定的内存控制器(Memory Controller drivers)内存芯片控制器可能是独立的设备或者內置在内存芯片上。这些控制器管理这输入和输出的数据流

  深入理解linux内核内核提供了大量不同的加速器、放大器模数转换器、惯性測量单元、光敏传感器、磁场传感器和其他许多传感器和转换器的支持。

  "VME bridge support"和上面的相同除了桥使用的是VME这是一个不同的总线标准。

我要回帖

更多关于 深入理解linux内核 的文章

 

随机推荐