标签 PCI 下的文章

来享受这个Linux内核系列的下一篇文章。我们将继续配置PCI特性,接着是计算机中最重要的特性-网络。

进程地址空间标识符(Process Address Space Identifiers (PASIDs))允许PCI设备同时访问多个IO地址空间(PCI PASID support)。这个特性需要一个支持PASIDs支持的IOMMU。

下面我们可以启用/禁用"PCI IO-APIC hotplug support"。APIC代表高级可编程中断控制器(Advanced Programmable Interrupt Controllers)。可编程中断控制器(PIC)收集所有来自不同源发给一个或者多个CPU流水线的中断。高级PIC与PIC一样,但是它们有更多的特性像高级中断管理和更多的优先级模型。热插拔是一种在系统在运行时加入一件设备的能力并且不需要重启。这个驱动是为了PCI主板能拥有处理输入/输出APIC热插拔的能力。

在这之后,下面的问题询问的是启用"ISA-style DMA support"。在前文中提到过,DMA是直接内存访问,它是一种设备无需借助CPU直接访问内存的能力。ISA代表的是工业标准架构(Industry Standard Architecture),它是一种像PCI的总线标准。这个特性允许在ISA主板上支持DMA。

现在,我们可以移步到"PC Card (PCMCIA/CardBus) support"。PCMCIA代表的是个人计算机存储卡国际协会(Personal Computer Memory Card International Association)。PC卡、PCMCIA卡和Cardbus卡都是卡片形状的笔记本外设。

下一个PCMCIA选项处理"16-bit PCMCIA support"。一些旧的计算机使用16位PCMCIA卡。

为了从用户空间加载卡式信息结构(Card Information Structure (CIS))以使PCMCIA卡正常工作,这个特性应该启用(Load CIS updates from userspace)。

CardBus是16位PCMCIA的更新32位版本。这个驱动提供对这类设备的支持(32-bit CardBus support)。为了使用32位PC卡,需要一个兼容Cardbus的主机桥。

下面的驱动提供对上面提到的CardBus桥支持(CardBus yenta-compatible bridge support)。这是PCMCIA卡插入的硬件端口。

下面三个选项"Special initialization for O2Micro bridges"、"Special initialization for Ricoh bridges"和"Special initialization for TI and EnE bridges"。它们都是不同类型卡桥。

接下来,提供了"Auto-tune EnE bridges for CB cards"的驱动。

"Special initialization for Toshiba ToPIC bridges"可以在下一个选项中启用/关闭。

下一个提供的设备驱动是"Cirrus PD6729 compatible bridge support"。这在一些老的笔记本上需要。

下一个PCMCIA桥驱动是Itel的"i82092 compatible bridge support"。这也在一些老的笔记本上出现。这是另外一种桥驱动。

在这之后,以下的选项询问关于是否启用"Support for PCI Hotplug"。

下一步,ACPI PCI热插拔可以启用(ACPI PCI Hotplug driver)。这个驱动允许拥有ACPI的PCI设备热插拔(这个特性之前已经讨论过)。

对于IBM系统,为了ACPI热插拔下一个驱动应该启用(ACPI PCI Hotplug driver IBM extensions)。这就像上面的特性但特定与IBM设备。

对于带有支持CompactPCI热插拔支持的CompactPCI卡的系统,启用"CompactPCI Hotplug driver"。

下面,我们有一个选项对于另一种CompactPCI系统卡(Ziatech ZT5550 CompactPCI Hotplug)。

使用#ENUM热插拔信号通过标准IO口作为系统注册位的CompactPCI卡需要这个驱动(Generic port I/O CompactPCI Hotplug)。

使用SHPC PCI热插拔控制器的主板需要下一个驱动(SHPC PCI Hotplug driver)。SHPC代表的是标准热插拔控制器(Standard Hot-Plug Controller)。这对于PCI主板是一个通用热插拔系统。

RapidIO互联设备也需要一个特殊的驱动(RapidIO support)。RapidIO芯片和主板快于PCI和PCIe。

"IDT Tsi721 PCI Express SRIO Controller"是一个特殊类型的RapidIO控制器。

下一个选项允许开发者输入在主机完成枚举前系统发现节点应该等待多久时间(以秒计)。这通常选择默认值

下一个特性会允许RapidIO系统接受除了维护信号外其他流量(Enable RapidIO Input/Output Ports)。

为了使用DMA引擎框架从RIO设备上发送或接收RapidIO数据,启用这个驱动(DMA Engine support for RapidIO)。RIO设备是可重配的输入/输出设备。RapidIO使用NREAD和NWRITE请求来在本地和远程内存间传输数据,因此驱动需要允许RapidIO使用DMA访问RIO设备。DMA控制器需要在内存中完成这个特性。

如果允许,RapidIO可以提供调试信息(RapidIO subsystem debug messages)。如前面所说,调试特性可以禁用,除非你或者其他人使用的内核需要调试特性。

下一个驱动提供"IDT Tsi57x SRIO switches support"。这是一组串口RapidIO开关,下面的四个选项是对于不同串口RapisIO开关驱动-"IDT CPS-xx SRIO switches support"、"Tsi568 SRIO switch support"、"IDT CPS Gen.2 SRIO switch support"和"Tsi500 Parallel RapidIO switch support"。

管理这些驱动后,我们可以继续其他的内核选项。下一个选项提供对ELF的支持(Kernel support for ELF binaries)。可执行与可链接格式(Executable and Linkable Format (ELF))支持是一种可执行文件规范。强烈建议启动这个。

为了执行那些需要解释器的脚本和二进制文件,这个特性必须启用(Kernel support for MISC binaries)。这些可执行文件的类型通常称为包装器驱动的二进制格式。例如包括Python2/3、 .NET、Java、DOS执行程序等等。

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

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

老式的a.out二进制文件也被支持(IA32 a.out support)。就像它称呼的那样,"汇编输出"(Assembler Output),这是一种已编译代码的文件格式。

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

下面,我们将讲网络支持。

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

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

ss工具需要启用这个特性用来数据包监控(Packet: sockets monitoring interface)。包监控意味着监视相关本地设备的网络流量。

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

上面的Unix套接字可以被ss工具监控,但是下面一个特性必须先启用(UNIX: socket monitoring interface)。

转换(Transformation (XFRM))用户配置接口被许多Linux原生工具用到,所以这个特性强烈建议启用(Transformation user configuration)。这个会启用Ipsec-Internet Protocol SECurity(互联网协议安全)。Ipsec控制着验证并且/或者加密IP数据包。

下一个特性允许开发者给予网络数据包第二个政策(称作sub-policy)(Transformation sub policy support)。

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

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

"PF\_KEY sockets"与KAME套接字兼容且它在使用从KAME移植来的IPsec工具时有用。KAME是IPv4 IPsec、IPv6 IPsec和IPv6的免费协议栈。

这是另外一个需要的移动IPv6特性,它增加了到PF\_KEYv2套接字的PF\_KEY MIGRATE消息(PF\_KEY MIGRATE)。

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

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

如果这是一个路由器Linux系统的内核,那就启用这个选项(IP: advanced router)。

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

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

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

RARP是一个被BOOTP和DHCP替代了的旧协议,但是它仍可以加到内核中(IP: RARP support)。

网络协议可以在另一个概念中使用,称作"隧道"。这个特性可以用在Linux内核中(IP: tunneling)。安全shell协议(The secure shell protocol (SSH))就是隧道协议的一个例子。SSH需要这个特性。

下面的驱动可以多路复用通用路由封装包(GRE (Generic Routing Encapsulation))(IP: GRE demultiplexer)。多路复用是一个使单个信号进入不同部分的过程(这不会复制消息,只是分解它)。GRE是一种隧道协议。

下面的特性允许GRE通道在IP连接中形成(IP: GRE tunnels over IP)。这允许GRE隧道在IP网络中形成。

当启用这个特性(IP: broadcast GRE over IP),广播可以通过IP使用GRE。

在Linux系统的路由器内,为了让IP包发往多个地址,需要启用这个(IP: multicast routing)。


via: http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-7.4490/

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

欢迎来到下一篇关于内核配置文章!还有大量的选项需要配置。这篇文章将主要讨论PCI和ACPI。

这里我们可以启用由ACPI控制的扩展坞和可移动驱动器槽的支持(Dock)。记住,ACPI(Advanced Configuration and Power Management Interface)是一个电源管理系统。扩展坞是一种其他的设备通过额外的接口插入的设备。扩展坞可以容纳许多不同的端口和连接器。一个ACPI控制的扩展坞是指其电源管理是通过ACPI进行的。驱动器槽是一套可以增加硬盘的设备,这也可以由ACPI管理。

下面,我们允许ACPI用来管理空闲的CPU(Processor)。这会让处理器在空闲时进入ACPI C2或者C3状态。这可以节省电源并降低CPU芯片的温度。处理器只在100%没有占用时才进入空闲状态。没有程序必须请求一个特定时间的CPU资源。

CPU电源有四个状态 - C0、C1、C2和C3。C0是操作激活状态。C1(Halt)是一个不执行指令激活状态,但是可以立刻执行指令。C2(Stop-Clock)是一种断电状态。C3(Sleep)是一种比C2更彻底的断电状态。在C3状态中,现在缓存不再被同步或者管理,直到CPU离开这个状态。第五个状态称作C1E(Enhanced Halt State),他拥有低功耗。

如果启用了IPMI驱动,那么ACPI可以访问BMC控制器(IPMI)。基板管理控制器(BMC)是一种管理软件和硬件间连接的微控制器。智能平台管理接口(IPMI)是一种框架,通过直接的硬件层面而不是登录shell或者操作系统层面来管理计算机。

ACPI v4.0进程聚合器允许内核应用一个CPU配置到所有系统中的处理器中(Processor Aggregator)。截止到ACPI v4.0,只有idle状态可以用这个方式配置。

接下来,可以启用ACPI热区(Thermal Zone)。多数硬件支持这个特性。这允许风扇的电源由ACPI管理。

如果启用这个选项,自定义DSDT可以链接到内核。在这个设置中,开发者必须在文件中包含完整的路径名。系统差异表(DSDT)是一个包含了系统支持的电源事件信息的文件。它不需要输入路径名,这些表存在于固件中。内核会帮你处理这些。这个主要的目的是用于如果开发者需要使用不同于设备内置的表时用到。

任意ACPI表都可以通过initrd来覆盖(ACPI tables override via initrd)。ACPI表是指示如何控制并与硬件交互的基础规则和指令。

像内核的其他部分一样,ACPI系统也可以生成调试信息(Debug Statements)。像其他调试特性一样,你或许希望禁用它并省下50KB。

启用下面的特性会为系统检测到的每个PCI插槽(PCI slot detection driver)创建文件(/sys/bus/pci/slots/)。一个PCI插槽是在PCI主板上的一个端口,它允许用户接上其他的PC设备。PCI是主板的一种类型。PCI是指组件互相通信的方式。有些应用程序可能需要这些文件。

电源管理定时器是另外一种电源管理系统(Power Management Timer Support)。这是许多系统追踪时间的方式。这个只需要很少的能源。处理器的空闲、电压/频率调节和节流都不会影响这个定时器。大量的系统需要使用这个特性。

下面,可以启用ACPI模块和容器设备驱动(Container and Module Devices)。这会启用处理器、内存和节点的热插拔支持。它需要NUMA系统。

下面的驱动提供对ACPI内存的热插拔支持(Memory Hotplug)。有些设备甚至启用这个驱动也不支持热插拔。如果驱动以模块形式加入,那么模块将会被acpi\_memhotplug调用。

注意:对于内核某个特定的功能,硬件、BIOS和固件在必须支持时会有问题。有些系统的BIOS是不控制硬件的。这种类型的BIOS通常不会限制特性。如果内核确实有一个特定的功能,硬件必须有能力完成这样的任务。

智能电源管理驱动提供访问电池的状态和信息(Smart Battery System)。

下面,我们有一个"Hardware Error Device"驱动。设备通过SCI报告硬件错误。通常上,大多数的错误会是已纠正的错误。

下面的是ACPI调试特性(Allow ACPI methods to be inserted/replaced at run time)。这允许ACPI AML方式不通过重启系统管理。 AML代表的是ACPI机器语言(ACPI Machine Language)。AML代码可以通过请求重启来改变和测试。

APEI是ACPI的错误接口(ACPI Platform Error Interface (APEI))。APEI从芯片给操作系统报告错误。这个错误接口同样提供错误注射的能力。

当"SFI (Simple Firmware Interface) Support" 启用后,硬件固件可以发送消息给操作系统。固件与操作系统间的通信通过内存中的静态表。SFI-only的计算机的内核工作需要这个特性。

想要改变处理器的时钟速度和运行时,就启用这个特性(CPU Frequency scaling)。CPU频率调整意味着改变处理器的时钟速度。这个驱动可以用于降低时钟频率以节能。

下面是另外一个电源管理子系统(CPU idle PM support)。当处理器不在活跃状态时,它最好处在有效的空闲方式来减少电源消耗和减少CPU损耗。减少电源消耗同样可以降低内部元件的发热。

Linux内核提供了很多CPU空闲驱动。在多处理器系统上,一些用户可能有一个理由在每个CPU上使用不同的驱动(Support multiple cpuidle drivers)。启用这个驱动可以允许用户给每个处理器设置不同的驱动。

对于Intel处理器,内核有一个特别为管理这类CPU芯片空闲的驱动(Cpuidle Driver for Intel Processors)。

当内存芯片空闲时,这些同样可以处于低功耗状态(Intel chipset idle memory power saving driver)。这个驱动是特别支持IO AT的Intel设备的。

不同的计算机使用不同类型的主板(PCI support)。其中一种类型是PCI。这个驱动允许内核运行在PCI主板上。

下面,我们可以启用/禁用 "Support mmconfig PCI config space access"。

接下来,我们有一个选择启用/禁用主桥窗口驱动(Support mmconfig PCI config space access)。警告:这个驱动还没有完成(至少在3.9.4中是这样)。

像上面提到的主板,还有另一种类型的主板。写一个选项是提供"PCI Express (PCIe) support"的驱动。PCIe是一种改进并且更快速的PCI。

在这之后,下面的驱动应该被启用以支持PCIe主板上的热插拔(PCI Express Hotplug driver)。

接着,我们可以启用/禁用PCIe主板报错(Root Port Advanced Error Reporting)。这就是PCIe AER驱动。

下一个特性允许用户使用PCIe EREC(PCI Express ECRC settings control)覆盖BIOS和固件设置。下一个选项,这是对PCIe的错误注射(PCIe AER error injector support)。

下面的设置提供了操作系统控制PCI的活跃状态和时钟电源管理(PCI Express ASPM control)。通常上,固件会控制ASPM,但是这个特性允许操作系统采取控制。

如前面一样,像内核的许多组件一样,这里提供了ASPM的调试支持(Debug PCI Express ASPM)。

下面,在这个菜单选择"Default ASPM policy"。

在这选项之后,下一个是关于允许设备驱动启消息信号中断(Message Signaled Interrupts (MSI))。通常上最好允许设备给CPU发送中断。

为了在系统日志中加入大量的调试信息,启用"PCI Debugging"。

下一个选项允许PCI核心检测是否有必要启用PCI资源重分配(Enable PCI resource re-allocation detection)。

当在Linux上托管一个虚拟操作系统时,它有时可以用于为虚拟系统保留PCI设备(PCI Stub driver)。在系统虚拟化下,一个操作系统可能在另一个系统的内部或者并行。有时它们会竞争资源。可以为客户机保留设备可以减小竞争和增加性能。

下面的驱动允许超传输设备(hypertransport devices)使用中断(Interrupts on hypertransport devices)。HyperTransport是一种系统/协议总线用于处理器之间的高速通信。

下一个驱动用于PCI虚拟化,它允许虚拟设备间共享它们的物理资源(PCI IOV support)。

PCI页面请求接口(PRI)使在IOMMU(输入/输出内存管理单元)之后的PCI设备能够从页错误中恢复(PCI PRI support)。页错误不是一种错误;它指的是软件尝试访问不在物理内存上的数据的事件。

再次说明,你会在之后的文章中看到更多的需要配置Linux内核特性。


via: http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-6.4457/

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出