第 4 章。内核配置

Linux 内核配置通常可以在内核源代码的以下文件中找到/usr/src/linux/.config。不建议直接编辑此文件,而是使用以下配置选项之一

这些选项的描述,由相关的帮助按钮显示,可以在以下纯 ASCII 文件中找到/usr/src/linux/Documentation/Configure.help

最终,这些配置工具会编辑.config文件。一个选项将指示某个驱动程序被构建到内核中(“=y”),或者将被构建为模块(“=m”),或者未被选择。未选择状态可以通过以“#”开头的行(例如“# CONFIG_SCSI is not set”)或文件中缺少相关行来指示.config文件。

以下是 SCSI 子系统(实际上选择了 SCSI 中间层驱动程序)的主要选择选项的 3 种状态。这些状态中只能有一个出现在实际的.config文件

CONFIG_SCSI=y
CONFIG_SCSI=m
# CONFIG_SCSI is not set

一些其他常见的 SCSI 配置选项包括

CONFIG_BLK_DEV_SD        [disk (sd) driver]
CONFIG_SD_EXTRA_DEVS     [extra slots for disks added later]
CONFIG_BLK_DEV_SR        [SCSI cdrom (sr) driver]
CONFIG_BLK_DEV_SR_VENDOR [allow vendor specific cdrom commands]
CONFIG_SR_EXTRA_DEVS     [extra slots for cdroms added later]
CONFIG_CHR_DEV_ST        [tape (st) driver]
CONFIG_CHR_DEV_OSST	 [OnSteam tape (osst) driver]
CONFIG_CHR_DEV_SG        [SCSI generic (sg) driver]
CONFIG_DEBUG_QUEUES      [for debugging multiple queues]
CONFIG_SCSI_MULTI_LUN    [allow probes above lun 0]
CONFIG_SCSI_CONSTANTS    [symbolic decode of SCSI errors]
CONFIG_SCSI_LOGGING      [allow logging to be runtime selected]

CONFIG_SCSI_<ll_driver>  [numerous lower level adapter drivers]
CONFIG_SCSI_DEBUG        [lower level driver for debugging]

CONFIG_SCSI_PPA          [older parallel port zip drives]
CONFIG_SCSI_IMM          [newer parallel port zip drives]

CONFIG_BLK_DEV_IDESCSI   [ide-scsi pseudo adapter]
CONFIG_I2O_SCSI		 [scsi command set over i2o bus]
CONFIG_SCSI_PCMCIA       [for SCSI HBAs on PCMCIA bus]
CONFIG_USB_STORAGE       [usb "mass storage" type]

CONFIG_MAGIC_SYSRQ       [Alt+SysRq+S for emergency sync]
                         [Alt+SyrRq+U for emergency remount ro]

如果根文件系统位于 SCSI 磁盘上,那么将 SCSI 中间层、sd 驱动程序以及磁盘连接到的主机适配器驱动程序构建到内核中是有意义的。在大多数情况下,通常可以安全地将 sr、st 和 sg 驱动程序构建为模块,以便在需要时加载它们。如果像扫描仪这样的设备位于单独的适配器上,那么它的驱动程序很可能被构建为模块。在这种情况下,需要先加载该适配器驱动程序,然后才能识别扫描仪。

Linux 发行版将许多 SCSI 子系统驱动程序构建为模块,因为将所有驱动程序都构建到内核中会导致内核非常大,从而超出引导加载程序的功能。这导致了一个“鸡和蛋”的问题,其中需要 SCSI 驱动程序来加载根文件系统,反之亦然。initrd 设备使用的两阶段加载解决了这个问题(有关更多详细信息,请参阅第 6 章)。