Linux Kernel in a Nutshell - 8

2022/8/30 5:25:21

本文主要是介绍Linux Kernel in a Nutshell - 8,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Kernel Configuration Recipes

原文链接

我的博客

前面介绍了重新配置内核的机制,本章介绍制作自己的内核通常会遇到的那些问题,并给出对应指令来处理它。

Disks

Linux 内核支持宽泛的盘类型。本节将展示如何配置内核,让其支持大多数常见类型的盘控制器。

USB Storage

为了使用 USB 存储设备 (通常是 USB 闪存设备,或外部 USB 盘驱动),必须首先让 USB 能够正常工作。可以参考 USB 小节查看如何进行。

USB 存储设备可以使用 lsusb 程序辨识。如果执行下面的命令并有如下结果,那么 USB 存储设备就是在系统上的:

$ lsusb -v | grep Storage
		bInterfaceClass 8 Mass Storage

使能它步骤如下:

  1. 一个 USB 存储设备是一个 USB SCSI 设备与 USB 连接沟通的实现。因此,SCSI 子系统必须使能:

    Device Drivers
    	SCSI Device Support
    		[*] SCSI Device Support
    
  2. SCSI 系统中,SCSI disk support 必须使能,来让设备能够正确地挂载

    Device Drivers
    	SCSI Device Support
    		[*] SCSI disk support
    
  3. 使能 USB 存储支持

    Device Drivers
        USB Support
    		[M] USB Mass Storage support
    

很多 USB 存储设备因为不符合标准 USB 规范,需要特殊的代码,被列为单独的配置项。如果你具有这样的设备,需要使能这样的选项。

IDE Disk

IDE 盘是最常见的 PC 盘类型。IDE 盘控制器令这些设备能够正常工作。以下面的命令的使用方式,来查看在你的系统上是否具有一个 IDE 盘控制器:

$ lspci | grep IDE
00:1f.1 IDE interface: Intel Corporation 82801EB/ER (ICH5/ICH5R) IDE Controller (rev 02)
00:1f.2 IDE interface: Intel Corporation 82801EB (ICH5) SATA Controller (rev 02)

应该注意的是,你系统上的响应内容可能不同。重要的是,这条命令展示出了 IDE 控制器。如果你只找到了 SATA 控制器,请查看下一节。

使能这一控制器,可以使用下面的步骤:

  1. 为内核使能 PCI 支持

    Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    	[*] PCI Support
    
  2. 使能 IDE 子系统,与 IDE 支持

    Device Drivers
    	[*] ATA/ATAPI/MFM/RLL support
    	[*] Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
    
  3. ATA 系统中,特殊类型的 IDE 控制器必须使能,以使它能够正常工作。为防止选择了错误的类型,可以勾选 generic 通用型 IED 控制器

    Device Drivers
    	ATA/ATAPI/MFM/RLL support
    		[*] generic/default IDE chipset support
    
  4. 使能不同的 PCI IDE 控制器

    Device Drivers
    	ATA/ATAPI/MFM/RLL support
    		[*] PCI IDE chipset support
    

这会打开一系列列有不同 IDE 控制器类型的子菜单,选择 lspci 步骤中出现的选项。

Serial ATA (SATA)

SATAIDE 盘控制器的继任盘控制器。运行下面的命令,查看你的系统上是否具有 SATA 盘控制器:

$ lspci | grep SATA
00:1f.2 IDE interface: Intel Corporation 82801EB (ICH5) SATA Controller (rev 02)

应该注意的是,在你的系统上执行上面这条命令出现的结果可能有不同。重要的是执行完这条命令出现了信息打印。

SATA 盘使用 libata 内核库处理大部分 SATA 规范功能。这个库使用 SCSI 层来与块层沟通,因此不同的内核选项需要使能来令 SATA 盘能正常工作。使用下面的步骤:

  1. 使能内核对 PCI 的支持

    Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    	[*] PCI Support
    
  2. 使能 SCSI 子系统

    Device Drivers
    	SCSI Device Support
    		[*] SCSI Device Support
    
  3. SCSI 系统中,SCSI 盘支持选项必须使能,来令系统能够正常挂载

    Device Drivers
    	SCSI Device Support
    		[*] SCSI disk support
    
  4. SATA 选项在 SCSI low-level driver 小节下

    Device Drivers
    	SCSI Device Support
    		SCSI low-level drivers
    			[*] Serial ATA (SATA) support
    
  5. 在这一小节中,使能你拥有的特殊的 SATA 控制器类型。参考之前使用 lspci 命令的输出,比如大部分 Intel 母板需要 PIIX/ICH SATA 驱动:

    Device Drivers
    	SCSI Device Support
    		SCSI low-level drivers
    			[*] Serial ATA (SATA) support
    			[*] Intel PIIX/ICH SATA support
    

Burning a CD-ROM

烧写一个 CD-ROMLinux 上非常简单。如果你的内核能够支持对 CD-ROM 的读取操作,那么它也能够支持对 CD-ROM 的少些。在 Linux 中有两种使能 CD-ROM 的方式,一个是 IDE 驱动一个是 SCSISATA 驱动。

IDE CD-ROM drives

IDE CD-ROM 驱动器使用与你的主 IDE 盘驱动器一样的 IDE 控制器。首先要确保 IDE 控制器按照前面介绍过的步骤正确配置了 IDE 盘。如果它已经能够成功支持,只需要一个额外的配置选项:

Device Drivers
	[*] ATA/ATAPI/MFM/RLL support
	[*] Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
	[M] Include IDE/ATAPI CDROM support

SCSI and SATA CD-ROM drives

SATA 以及 SCSI CD-ROM 驱动器与你的主盘驱动器使用同样的控制器。首先确保 SATASCSI 控制器能够正常使用。为了支持 SATASCSI CD-ROM 驱动器,SCSI CD-ROM 驱动必须使能:

Device Drivers
	SCSI Device Support
		[*] SCSI CDROM support

Devices

Linux 支持很宽泛的设备类型,本节介绍如何使能一些常用设备类型。

USB

Linux 支持不同类型的 USB 设备。为了支持 USB,首先必须使能对 USB 控制器的支持。

使用下面的命令来查看你的设备上具有 USB 控制器,并查看它是什么类型:

$ lspci | grep USB
00:1d.0 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #3 (rev 02)
00:1d.3 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #4 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB2 EHCI Controller (rev 02)

需要注意的是,在你的设备上执行上面的命令输出内容可能不同,重要的是有类似的输出。

使用下面的步骤使能:

  1. 使能内核的 PCI 支持

    Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    	[*] PCI Support
    
  2. 使能内核的 USB 支持

    Device Drivers
    	USB Support
    		[M] Support for Host-side USB
    
  3. 使能特殊 USB 主控制器的支持,如果不清楚你具有的是哪一个,可以使能所有

    Device Drivers
    	USB Support
    	--- USB Host Controller Drivers
    	[M] EHCI HCD (USB 2.0) support
    	[M] OHCI HCD support
    	[M] UHCI HCD (most Intel and VIA) support
    
  4. 某个 USB 设备需要使能它们自己的驱动,大部分位于主 USB 驱动小节下面

    Device Drivers
    	USB Support
    

    但是有些设备,比如 USB 影音以及 DVB 等,被划分到了控制这类设备下。比如,USB 声驱可以在 Sound 子菜单下找到:

    Device drivers
    	Sound
    		[*] Sound card support
    			[*] Advanced Linux Sound Architecture
    				USB Devices
    					[M] USB Audio/MIDI driver
    

如果你希望插入 USB 存储设备 (USB 闪存),可以查看 USB Storage 小节。

IEEE 1394 (FireWire)

PCI Hotplug

PCI 热插拔系统随着对 ExpressCard (拓展卡) 以及笔记本拓展坞的使用变得越来越流行。

查看你的硬件来确定是否一个 ExpressCard 能够插入其上,来确定你的设备是否具有一个 ExpressCard 控制器。

使能热插拔的步骤:

  1. 使能内核的 PCI 支持

    Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    	[*] PCI Support
    
  2. 使能内核的 PCI 热插拔支持

    Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    	[*] PCI Support
    	PCI Hotplug Support
    		[M] Support for PCI Hotplug (EXPERIMENTAL)
    
  3. 存在很多种类的 PCI 热插拔控制器,对于大部分笔记本电脑和扩展卡,使能 ACPI 控制器

    Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    	[*] PCI Support
    	PCI Hotplug Support
    		[M] Support for PCI Hotplug (EXPERIMENTAL)
    		[M] ACPI PCI Hotplug driver
    
  4. 使能 PCI Express 控制器

    Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    	[*] PCI Support
    	[*] PCI Express Support
    	[M] PCI Express Hotplug driver
    

PCMCIA/CardBus

几乎所有的笔记本电脑都支持 PCMCIACardBus 设备。新的笔记本电脑,都转向了对扩展卡形式的支持。

查看你的硬件来确定是否能将 PCMCIA 卡插上,来确定你的设备是否具有一个 PCMCIA 控制器。

使能 PCMCIA 控制器步骤:

  1. 使能内核的 PCI 支持

    Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    	[*] PCI Support
    
  2. 使能内核的 PCCARD 支持

    Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    	PCCARD (PCMCIA/CardBus) support
    		[M] PCCard (PCMCIA/CardBus) support
    
  3. 使能 PCMCIA 以及 CardBus 支持来覆盖这类设备

    Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    	PCCARD (PCMCIA/CardBus) support
    		[M] PCCard (PCMCIA/CardBus) support
    		[M] 16-bit PCMCIA support
    		[*] 32-bit CardBus support
    

    为你的笔记本电脑使能卡桥类型,最常见的为 yenta-like 控制器:

    Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    	PCCARD (PCMCIA/CardBus) support
    		[M] PCCard (PCMCIA/CardBus) support
    		[M] CardBus yenta-compatible bridge support
    		[ ] Cirrus PD6729 compatible bridge support
    		[ ] i82092 compatible bridge support
    		[ ] i82365 compatible bridge support
    		[ ] Databook TCIC host bridge support
    

Sound (ALSA)

ALSA: Advanced Linux Sound Architecture 是当前 Linux 系统的声音系统。

使用下面的命令查看你的设备上的声音控制器:

$ lspci | grep -i audio
00:1f.5 Multimedia audio controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) AC'97 Audio Controller (rev 02)
06:0d.0 Multimedia audio controller: Creative Labs SB Audigy (rev 04)

注意到,在你的设备上出现的信息可能不同,重要的是有类似的输出。

使能步骤:

  1. 使能基本的声音支持

    Device Drivers
    	Sound
    		[M] Sound Card Support
    
  2. 使能 ALSA

    Device Drivers
    	Sound
    		[M] Sound Card Support
    			[M] Advanced Linux Sound Architecture
    
  3. 有很多 ALSA 选项,比如对老版的 OSS 声音协议的支持,如果你具有老版的应用,你可以使能相关选项

    Device Drivers
    	Sound
    		[M] Sound Card Support
    			[M] Advanced Linux Sound Architecture
    			[M] OSS Mixer API
    			[M] OSS PCM (digital audio) API
    			[ ] OSS PCM (digital audio) API - Include plugin system
    
  4. 使能你具有的特殊类型的设备,PCI 声卡位于 PCI 子菜单中

    Device Drivers
    	Sound
    		[M] Sound Card Support
    			[M] Advanced Linux Sound Architecture
    				PCI Devices
    

CPU

如果你希望你的内核能够在你自己的处理器与硬件设备类型上,尽可能快速的运行,下面几个选项可以用来配置以提升硬件性能。

Processor Types

Linux 内核中有很多与处理器相关的选项。最终要的一个是内核要在什么类型的处理器上运行。使用下面的命令确定:

$ cat /proc/cpuinfo | grep "model name"
model name : Intel(R) Xeon(TM) CPU 3.20GHz

你的设备打印内容可能不同,重要的是要有类似的打印信息。

配置步骤如下:

  1. 选择处理器的子架构

    Processor type and features
    	Subarchitecture Type
    		(X) PC-compatible
    		( ) AMD Elan
    		( ) Voyager (NCR)
    		( ) NUMAQ (IBM/Sequent)
    		( ) Summit/EXA (IBM x440)
    		( ) Support for other sub-arch SMP systems with more than 8 CPUs
    		( ) SGI 320/540 (Visual Workstation)
    		( ) Generic architecture (Summit, bigsmp, ES7000, default)
    		( ) Support for Unisys ES7000 IA32 series
    

    只有你的设备是上面列出的其他处理器时,再选择其他的选项。如果你希望创建一个内核能够在所有展示的设备上运行,则选择 Generic architecture 选项。如果你没有选 Symmetric multi-processing 支持选项,上面的某些选项可能不会出现。

  2. 选择处理器家族类型,上一步选择 PC-compatible 选项之后下面的子菜单才会出现:

    Processor type and features
    	Processor family
    		( ) 386
    		( ) 486
    		( ) 586/K5/5x86/6x86/6x86MX
    		( ) Pentium-Classic
    		( ) Pentium-MMX
    		( ) Pentium-Pro
    		( ) Pentium-II/Celeron(pre-Coppermine)
    		( ) Pentium-III/Celeron(Coppermine)/Pentium-III Xeon
    		( ) Pentium M
    		(X) Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon
    		( ) K6/K6-II/K6-III
    		( ) Athlon/Duron/K7
    		( ) Opteron/Athlon64/Hammer/K8
    		( ) Crusoe
    		( ) Efficeon
    		( ) Winchip-C6
    		( ) Winchip-2
    		( ) Winchip-2A/Winchip-3
    		( ) GeodeGX1
    		( ) Geode GX/LX
    		( ) CyrixIII/VIA-C3
    		( ) VIA C3-2 (Nehemiah)
    		( ) Generic x86 support
    

SMP

如果你的系统包含多个 CPU,或是双 CPU 或是可以超线程,你需要选择选择多处理器选项。否则白白浪费了处理器。

使能多处理器:

Processor type and features
	[*] Symmetric multi-processing support

Preemption

作为服务器运行的系统,与做为视频或声音应用的桌面电脑的工作负载是不同的。内核允许不同的抢占程度,来处理不同的工作负载。preemption 内核在做其他事务时打断自身的能力,一次来进行高优先级的工作,比如更新音频或视频程序。

使用下面的菜单来修改不同的抢占模型:

Processor type and features
	Preemption Model
		(X) No Forced Preemption (Server)
	( ) Voluntary Kernel Preemption (Desktop)
	( ) Preemptible Kernel (Low-Latency Desktop)

如果你希望让内核比常规的抢占选项提供的更高的优先级任务,可以允许中断其内部的内核锁:

Processor type and features
	[*] Preempt The Big Kernel Lock

这个选项只有在 Preemptible KernelSymmetric multi-processing 支持选项。

Suspend

Linux 内核具有将其内核挂起到盘中,并允许你断开电源,并在之后上电重新从挂起的地方开始执行。这个功能在运行 Linux 的笔记本电脑上比较有用。

选择这个选项来使能:

Power management options (ACPI, APM)
	[*] Software Suspend

内核需要知道将挂起的内核镜像保存到什么位置。并在之后重新使用它。这个位置通常是盘上的一个内核交换分区。指定使用哪个分区:

Power management options (ACPI, APM)
	(/dev/hda3) Default resume partition

你需要确定你指定的分区是没有问题的,不要使用系统或数据已经使用的分区。可以使用下面的命令查看它慎用的分区:

$ swapon -s | grep dev | cut -f 1 -d ' '
/dev/hda3

在设备挂起之后,使用 resume=/dev/swappartition 来让其使用合适的镜像。如果你不希望使用挂起的镜像,使用 noresume

CPU Frequency Scaling

大部分现代处理器可以缓速处理器的内部时钟,来节能延长电池使用时间。Linux 支持这一能力,并给出不同的能量管理等级。不同的管理提供不同的分级。

使能步骤:

  1. 使能基础的频率调节功能

    Power management options (ACPI, APM)
    	[*] CPU Frequency scaling
    
  2. 选择不同的频率管理类型

    Power management options (ACPI, APM)
    	[*] CPU Frequency scaling
    	[*] 'performance' governor
    	[*] 'powersave' governor
    	[*] 'userspace' governor for userspace frequency scaling
    	[*] 'ondemand' cpufreq policy governor
    	[*] 'conservative' cpufreq governor
    

    可以在第十一章的 CPU_FREQ 条目查看具体的不同监管的信息。

  3. 选择启动时默认的管理类型

    Power management options (ACPI, APM)
    	[*] CPU Frequency scaling
    		Default CPUFreq governor (performance)
    
  4. 选择设备的指定的处理器类型

    Power management options (ACPI, APM)
    	[*] CPU Frequency scaling
    	--- CPUFreq processor drivers
    	[ ] ACPI Processor P-States driver
    	[ ] AMD Mobile K6-2/K6-3 PowerNow!
    	[ ] AMD Mobile Athlon/Duron PowerNow!
    	[ ] AMD Opteron/Athlon64 PowerNow!
    	[ ] Cyrix MediaGX/NatSemi Geode Suspend Modulation
    	[*] Intel Enhanced SpeedStep
    	[*] Use ACPI tables to decode valid frequency/voltage pairs
    	[*] Built-in tables for Banias CPUs
    	[ ] Intel Speedstep on ICH-M chipsets (ioport interface)
    	[ ] Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)
    	[ ] Intel Pentium 4 clock modulation
    	[ ] nVidia nForce2 FSB changing
    	[ ] Transmeta LongRun
    

Different Memory Models

32 位的 intel 硬件上的 Linux 能够访问高达 64GB 的内存,但是因为 32 位处理器的地址空间仅 4GB,为了处理这一限制,Linux 可以将额外的内核映射到其他区域,之后再其他任务需要时切换到它。但是如果你的设备具备的内存很小,那么Linux 就没有必要担心这个问题了。因此告知内核你希望它支持多少内存是有好处的。查看第十一章的 HIGHMEM 条目的相信描述。

针对 32 位的 Intel 处理器,Linux 支持三种不同的内存模型:

  • 低于 1GB 的物理内存
  • 1-4GB 的物理内存
  • 4GB 以上的物理内存

选择内存支持的大小:

Processor type and features
	High Memory Support
		(X) off
		( ) 4GB
		( ) 64GB

ACPI

几乎所有基于 Intel 的系统,都需要 ACPI 来令设备工作正常。ACPI 是一个标准,允许电脑的 BIOS 与操作系统以间接的形式方式访问硬件。ACPI 也提供机制来帮助挂起、恢复设备,并控制处理器的速度与风扇的转速。如果你的设备是笔记本电脑,推荐你使能这个选项:

使能 ACPI:

Power management options (ACPI, APM)
	ACPI (Advanced Configuration and Power Interface) Support
		[*] ACPI Support

有不同的 ACPI 驱动控制着不同类型的 ACPI 设备,你应该使能你的设备上具有的设备:

Power management options (ACPI, APM)
	ACPI (Advanced Configuration and Power Interface) Support
		[*] ACPI Support
		[*] AC Adapter
		[*] Battery
		[*] Button
		[*] Video
		[*] Generic Hotkey (EXPERIMENTAL)
		[*] Fan
		[*] Processor
		[*] Thermal Zone
		[ ] ASUS/Medion Laptop Extras
		[ ] IBM ThinkPad Laptop Extras
		[ ] Toshiba Laptop Extras

NetWorking

现如今,几乎所有的设备都支持网络,Linux 几乎支持所有的网络选项。这里只展示简单的几个。

对于所有网络选项,包括不同的驱动,主网络配置选项必须使能:

Networking
	[*] Networking support

当然,需要使能 TCP/IP 令使能设备与网络上的其他设备通讯:

Networking
	[*] Networking support
		Networking options
			[*] TCP/IP networking

Netfilter

Linux 内核的网络过滤器用来过滤操作所有到达设备上的网络包的框架。它通常用来使能防火墙,来保护系统,或者用作网络上其他设备的代理。查看第十一章的 NETFILTER 条目来查看更多详细内容。

使能网络过滤步骤:

  1. 使能主网络过滤选项

    Networking
    	[*] Networking support
    		Networking options
    			[*] Network packet filtering (replaces ipchains)
    
  2. 建议网络过滤器网络链接接口以及使用网络链接时的 Xtables 支持

    Networking
    	[*] Networking support
    		Networking options
    			[*] Network packet filtering (replaces ipchains)
    				Core Netfilter Configuration
    					[*] Netfilter netlink interface
    					[*] Netfilter Xtables support (required for ip_tables)
    
  3. 你希望过滤的不同协议也要选上

    Networking
    	[*] Networking support
    		Networking options
    			[*] Network packet filtering (replaces ipchains)
    				IP: Netfilter Configuration
    					[M] Connection tracking (required for masq/NAT)
    					[ ] Connection tracking flow accounting
    					[ ] Connection mark tracking support
    					[ ] Connection tracking events (EXPERIMENTAL)
    					[ ] SCTP protocol connection tracking support (EXPERIMENTAL)
    					[M] FTP protocol support
    					[ ] IRC protocol support
    					[ ] NetBIOS name service protocol support (EXPERIMENTAL)
    					[M] TFTP protocol support
    					[ ] Amanda backup protocol support
    					[ ] PPTP protocol support
    					[ ] H.323 protocol support (EXPERIMENTAL)
    

Network Drivers

Linux 支持宽泛的网络设备。最常用的是 PCI 网络设备,以太网网线可以插入。使用下面的命令确定你是否具有这么一个 PCI 网络设备:

$ lspci | grep Ethernet
03:0c.0 Ethernet controller: D-Link System Inc RTL8139 Ethernet (rev 10)
03:0e.0 Ethernet controller: Intel Corporation 82545GM Gigabit Ethernet Controller (rev 04)

使用下面的命令使能设备:

  1. 使能 PCI 支持

    Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
    
  2. 使能基础网络设备支持

    Device Drivers
    	Network device support
    		[*] Network device support
    
  3. 找到支持你的硬件的驱动

    Device Drivers
    	Network device support
    		[*] Network device support
    			Ethernet (1000 Mbit)
    		[*] Network device support
    			Ethernet (10 or 100Mbit)
    

IrDA

IrDA 是笔记本或 PDA 进行短距通讯的红外协议。在老的设备中是常见的,比较新的设备被蓝牙取代了。

配置步骤如下:

  1. IrDA 是一个网络协议,因此它可以在网络主菜单下找到

    Networking
    	[*] Networking support
    	[*] IrDA (infrared) subsystem support
    
  2. 有很多不同的 IrDA 协议可以选择,依赖于你希望与之沟通的设备类型,以及用来沟通的程序

    Networking
    	[*] Networking support
    		--- IrDA (infrared) subsystem support
    		--- IrDA protocols
    		[*] IrLAN protocol (NEW)
    		[*] IrCOMM protocol (NEW)
    		[*] Ultra (connectionless) protocol (NEW)
    
  3. 有很多不同的 IrDA 设备,有些是串行设备,有的是 PCI 设备,有的是 USB 设备,选择你具有的 IrDA 设备,在 IrDA 的子菜单下选择它

    Networking
    	[*] Networking support
    		--- IrDA (infrared) subsystem support
    			Infrared-port device drivers
    			--- SIR device drivers
    			[ ] IrTTY (uses Linux serial driver)
    			--- Dongle support
    			--- Old SIR device drivers
    			--- Old Serial dongle support
    			--- FIR device drivers
    			[ ] IrDA USB dongles
    			[ ] SigmaTel STIr4200 bridge (EXPERIMENTAL)
    			[ ] NSC PC87108/PC87338
    			[ ] Winbond W83977AF (IR)
    			[ ] Toshiba Type-O IR Port
    			[ ] SMSC IrCC (EXPERIMENTAL)
    			[ ] ALi M5123 FIR (EXPERIMENTAL)
    			[ ] VLSI 82C147 SIR/MIR/FIR (EXPERIMENTAL)
    			[ ] VIA VT8231/VT1211 SIR/MIR/FIR
    

Bluetooth

蓝牙是用来替代 IrDA 的无线技术。它用来短距通信,可以在十米范围内进行通信,通常在手机中使用。

配置步骤:

  1. 蓝牙是一个网络协议,因此它可以在网络主菜单下发现

    Networking
    	[*] Networking support
    	[*] Bluetooth subsystem support
    
  2. 蓝牙有两个主要的协议,为了能与所有的蓝牙设备进行通讯,需要将两者都勾选上

    Networking
    	[*] Networking support
    		--- Bluetooth subsystem support
    		[*] L2CAP protocol support
    		[*] SCO links support
    
  3. 蓝牙具有的驱动就相对较少了,因为这些设备几乎都遵循拉亚规范。下面列表中标记的驱动必须选择,以令蓝牙设备能正常工作

    Networking
    	[*] Networking support
    		--- Bluetooth subsystem support
    		Bluetooth device drivers
    			[M] HCI USB driver
    			[*] SCO (voice) support
    			[ ] HCI UART driver
    			[M] HCI BCM203x USB driver
    			[M] HCI BPA10x USB driver
    			[ ] HCI BlueFRITZ! USB driver
    			[ ] HCI DTL1 (PC Card) driver
    			[ ] HCI BT3C (PC Card) driver
    			[ ] HCI BlueCard (PC Card) driver
    			[ ] HCI UART (PC Card) device driver
    			[ ] HCI VHCI (Virtual HCI device) driver
    

Wireless

现今,几乎所有的笔记本都配备有无线网络设备。使用下面的命令来查看系统上是否具有 PCI 无线设备:

$ lspci | grep -i wireless
06:05.0 Network controller: Intel Corporation PRO/Wireless 2915ABG MiniPCI Adapter (rev 05)

配置步骤:

  1. 为了使能 Linux 对无线网络的支持,必须使能 IEEE 802.11 网络配置选项

    Networking
    	[*] Networking support
    	[*] Generic IEEE 802.11 Networking Stack
    
  2. 使能不同的 802.11 协议选项与 Software MAC 选项,提供对所有类型的无线设备的支持

    Networking
    	[*] Networking support
    	[*] Generic IEEE 802.11 Networking Stack
    	[*] IEEE 802.11 WEP encryption (802.1x)
    	[M] IEEE 802.11i CCMP support
    	[M] IEEE 802.11i TKIP encryption
    	[M] Software MAC add-on to the IEEE 802.11 networking stack
    
  3. PCI 无线设备的驱动可以在网络驱动部分找到配置项

    Device Drivers
    	Network device support
    		Wireless LAN (non-hamradio)
    			[*] Wireless LAN drivers (non-hamradio) & Wireless Extensions
    			[*] Wireless Extension API over RtNetlink
    

    USB 无线网络设备驱动在其他部分:

    Device Drivers
    	USB Support
    		USB Network Adapters
    

FileSystems

Linux 支持很多种文件系统类型。常规的文件系统类型可以在主文件系统配置菜单种找到:

File systems
	[*] Second extended fs support
	[*] Ext3 journalling file system support
	[ ] Reiserfs support
	[ ] JFS filesystem support
	[ ] XFS filesystem support

本小节将会展示一些非常规的文件系统类型。

RAID

RAID 为将不同盘组织成一个盘提供一种选择。Linux 支持同时支持硬件与软件的 RAID。硬件 RAID 使用盘控制器处理,而不需要内核的参与。

配置步骤如下:

  1. 软件 RAID 由内核控制,可以通过编译选项选择

    Device Drivers
    	Multi-device support (RAID and LVM)
    		[*] Multiple devices driver support (RAID and LVM)
    		[*] RAID support
    
  2. 有很多不同类型的 RAID 配置,为了令 RAID 正常工作,至少要选择一种

    Device Drivers
    	Multi-device support (RAID and LVM)
    		[*] Multiple devices driver support (RAID and LVM)
    		[*] RAID support
    		[*] Linear (append) mode
    		[*] RAID-0 (striping) mode
    		[*] RAID-1 (mirroring) mode
    		[*] RAID-10 (mirrored striping) mode (EXPERIMENTAL)
    		[*] RAID-4/RAID-5 mode
    		[*] RAID-6 mode
    

Logical Volume Manager and Device Mapper

就像 RAID 一样,逻辑卷管理 (LVM: Logical Volume Manager) 允许用户将不同的块设备组织成一个块设备。但是,它不是像 RAID 一样是设备级,而是通过一个块与节映射机制。它允许不同盘的不同部分像一个块设备一样组织起来。为了实现这一个内容,内核使用称为设备映射 (DM: Device Mapper) 的机制。

配置步骤如下:

  1. 使能内核对 DM 的支持

    Device Drivers
    	Multi-device support (RAID and LVM)
    		[*] Multiple devices driver support (RAID and LVM)
    		[*] Device mapper support
    
  2. 有很多帮助类的模块,与 DM 一起工作,来提供额外的功能

    Device Drivers
    	Multi-device support (RAID and LVM)
    		[*] Multiple devices driver support (RAID and LVM)
    		[*] Device mapper support
    		[*] Crypt target support
    		[*] Snapshot target (EXPERIMENTAL)
    		[*] Mirror target (EXPERIMENTAL)
    		[*] Zero target (EXPERIMENTAL)
    		[*] Multipath target (EXPERIMENTAL)
    

File Sharing with Windows

Samba 可以允许 Linux 用户通过网络访问本地的 Windows 设备。它也允许 LinuxWindows 服务器那样工作,允许 Windows 客户端像连接 Windows 那样连接 Linux 服务。

两个不同的文件系统允许 Linux 设备与 Windows 设备连接: SMB 文件系统以及 CIFS 文件系统。对于 Win95Win98,选择 SMB 文件系统:

File systems
	Network File Systems
		[*] SMB file system support (to mount Windows shares etc.)

对于比较新的 Windows 设备,推荐 CIFS 文件系统:

File systems
	Network File Systems
		[*] CIFS support

对于这两个文件系统的详细区别,使用某个文件系统的时机,可以参考第十一章的 SMB_FS 以及 CIFS 条目。

OCFS2

OCFS2 是来自 Oracle 的一簇文件系统,同时安装在大型网络系统以及小型本地系统。当使用大型数据库比如 OracleDB2 时建议配置这个内容。

File systems
	[*] OCFS2 file system support

Security

Linux 内核通过提供挂钩来支持不同的安全模型。

Default Linux Capabilities

标准的安全模型是 capability 模型,除非你就希望使用一个不安全的内核,否则请选择这个选项。

使能它:

Security options
	[*] Enable different security models
	[*] Default Linux Capabilities

SELinux

一个非常流行的模型称作 SELinux,这一模型被不同的 Linux 发布版本支持。

SELinux 需要网络选项使能。也需要审核使能:

General setup
	[*] Auditing support

当然,网络安全选项也要使能:

Security options
	[*] Enable different security models
	[*] Socket and Networking Security Hooks

现在可以选择 SELinux 选项了:

Security options
	[*] Enable different security models
	[*] NSA SELinux Support

你可能希望使能其他的 SELinux 选项:

Security options
	[*] Enable different security models
	[*] NSA SELinux Support
	[ ] NSA SELinux boot parameter
	[ ] NSA SELinux runtime disable
	[*] NSA SELinux Development Support
	[*] NSA SELinux AVC Statistics
	(1) NSA SELinux checkreqprot default value

Kernel Debugging

很多不同的内核选项,可以帮助进行内核调试。

Kernel Log Timestamps

内核会再它的日志文件中输出很多内容。这些信息可以通过查看日志文件系统 /var/log/messages 或通过运行 dmesg 命令来查看。

有时候,查看这些信息生成的具体时间是有一定帮助的。dmesg 不会对展示的信息给出时间戳。你可以配置内核为每一个信息附上一个时间戳。

使能时间戳选项:

Kernel hacking
	[*] Show timing information on printks

Magic SysRq Keys

键盘上的 SysRq 按键可以用来以在内核运行时或在其崩溃之后以不同的方式控制内核。

Kernel hacking
	[*] Magic SysRq key

查看内核源码的 Documentation/sysrq.txt 文件来获取详细信息。

Debug Filesystem

基于 RAM 的文件系统可以用来输出一些调试信息。这个文件称为 debugfs,并使用如下方式使能:

Kernel hacking
	[*] Debug filesystem

在使能这个选项之后,启动这个重新编译的内核,它会创建目录 /sys/kernel/debug 让用户挂载 debugfs 文件系统。可以手动挂载:

$ mount -t debugfs none /sys/kernel/debug

或者在 /etc/fstab 文件中,添加下面的行,在启动时自动挂载:

debugfs /sys/kernel/debug debugfs 0 0

在挂载 debugfs 之后,又很多不同的目录会在 /sys/kernel/debug/ 目录中出现。这些都是由内核动态生成的虚拟目录,就像 procfssysfs 一样。这些文件可以用来帮助调试不同的内核子系统,或者只是查看系统运行时发生了什么。

General Kernel Debugging

下面是一些选项,能够帮助调试不同的问题,或者只是通过打印信息学习内核是怎样工作的。注意到,如果你使能了几乎所有下面的选项,内核运行速度会降下来,因此如果你注意到你的系统性能降低了,可以选择将这些选项关闭:

Kernel hacking
	[*] Kernel debugging
	[*] Detect Soft Lockups
	[ ] Collect scheduler statistics
	[*] Debug slab memory allocations
	[*] Memory leak debugging
	[*] Mutex debugging, deadlock detection
	[*] Spinlock debugging
	[*] Sleep-inside-spinlock checking
	[ ] kobject debugging
	[ ] Highmem debugging
	[ ] Compile the kernel with debug info


这篇关于Linux Kernel in a Nutshell - 8的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程