Linux:确定特定的驱动程序/功能是否已编译为正在运行的内核

时间:2020-01-09 10:41:41  来源:igfitidea点击:

问题描述:我知道如何找到有关FreeBSD内核下已编译驱动程序的信息。
但是,如何确定特定功能,驱动程序或文件系统支持是否已编译到我正在运行的Linux内核中?
我如何确定DMA支持是否已编译到我的内核中?

A.当前Linux内核配置存储在.config文件或config-$(uname -r)文件中:

  • /boot/config-$(uname -r)/boot/config-$(uname- r)*:自动生成的内核配置文件。
    该文件几乎存在于所有Linux发行版中,包括RHEL/CentOS/Fedora/Debian/Ubuntu Linux。

  • /usr/src/kernels/$(uname -r)-$(uname -m)/。
    config或/usr/src/linux-2.6.N/.config:当前内核配置文件。

如果系统上没有/usr/src/kernels/$(uname -r)-$(uname -m)/目录,则说明尚未安装内核源代码。
使用apt-get或yum命令安装内核源代码。

找出DMA支持是否已编译,请执行:

grep -i DMA .config

或者

grep -i DMA /boot/config-$(uname -r)*

输出示例:

CONFIG_GENERIC_ISA_DMA=y
CONFIG_ISA_DMA_API=y
CONFIG_BLK_DEV_IDEDMA_PCI=y
# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
CONFIG_IDEDMA_PCI_AUTO=y
# CONFIG_IDEDMA_ONLYDISK is not set
# CONFIG_HPT34X_AUTODMA is not set
CONFIG_BLK_DEV_IDEDMA=y
# CONFIG_IDEDMA_IVB is not set
CONFIG_IDEDMA_AUTO=y
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
CONFIG_PDC_ADMA=m
# CONFIG_PATA_OPTIDMA is not set
CONFIG_I2O_EXT_ADAPTEC_DMA64=y
CONFIG_BCM43XX_DMA=y
CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
# CONFIG_BCM43XX_DMA_MODE is not set
CONFIG_CARDMAN_4000=m
CONFIG_CARDMAN_4040=m
# DMA Engine support
CONFIG_DMA_ENGINE=y
# DMA Clients
CONFIG_NET_DMA=y
# DMA Devices
CONFIG_INTEL_IOATDMA=m
CONFIG_HAS_DMA=y

为简单起见,大多数行仅包含一个参数。
跟随a的任何内容均被视为注释,并被忽略。
选项CONFIG_HAS_DMA共有3种可能性:

  • CONFIG_HAS_DMA = y:已编译DMA支持。
  • CONFIG_HAS_DMA = m:DMA支持编译为可加载内核模块。
  • CONFIG_HAS_DMA = n:不支持DMA。