linux - 为什么无法标记所需的内核模块进行编译、隐藏依赖?

标签 linux linux-kernel

我想重新编译linux内核,以便添加一些新模块。

但是:
无法在 xconfig 中检查它们以将其标记为模块或内置。

我的方法:

1/“编辑 -> 查找”在搜索框中输入 CX231XX -> 找到模块选项。所有四个模块均列在搜索窗口中:

  • Conexant cx231xx USB 视频采集支持 (VIDEO_CX231XX)
  • Conexant Cx231xx ALSA 音频模块 (VIDEO_CX231XX_ALSA)
  • DVB/ATSC 支持基于 Cx231xx 的电视卡 (VIDEO_CX231XX_DVB)
  • Conexant cx231xx Remote 附加支持 (VIDEO_CX231XX_RC)

2/但是。它们不会出现在配置窗口中。

3/当我切换“选项 -> 显示所有选项”时,它们出现在模块列表中,我可以在那里看到它们,但它们无法将状态更改为 M 或 Y。它们仍然保持未选中状态。

可能存在一些依赖性问题,但如果假设这类事情会自动解决,我就错了?

如何将 cx231xx 支持编译到我的内核中,请 ??

(4.4.26-gentoo x86_64 Intel(R) Core(TM)2 Duo CPU E4600 @ 2.40GHz GNU/Linux)

最佳答案

看来,CONFIG_VIDEO_CX231XX 的帮助文本中提到的所有依赖项我已经解决了:

Symbol: VIDEO_CX231XX [=n]
Type : tristate
Prompt: Conexant cx231xx USB video capture support
Location:
-> Device Drivers
-> Multimedia support (MEDIA_SUPPORT [=m])
-> Media USB Adapters (MEDIA_USB_SUPPORT [=y])
Defined at drivers/media/usb/cx231xx/Kconfig:1
Depends on: USB [=y] && MEDIA_SUPPORT [=m] && MEDIA_USB_SUPPORT [=y] && (MEDIA_ANALOG_TV_SUPPORT [=y] || MEDIA_DIGITAL_TV_SUPPORT [=y]) && VIDEO_DEV [=m] && I2C [=m] && RC_CORE [=n]
Selects: VIDEO_TUNER [=m] && VIDEO_TVEEPROM [=m] && VIDEOBUF_VMALLOC [=m] && VIDEO_CX25840 [=m] && VIDEO_CX2341X [=m] && I2C_MUX [=m]

和我的内核:

alnagon ~ % zcat /proc/config.gz |grep MEDIA_SUPPORT
CONFIG_MEDIA_SUPPORT=m
alnagon ~ % zcat /proc/config.gz |grep MEDIA_USB_SUPPORT
CONFIG_MEDIA_USB_SUPPORT=y
alnagon ~ % zcat /proc/config.gz |grep CONFIG_USB=
CONFIG_USB=y
alnagon ~ % zcat /proc/config.gz |grep CONFIG_MEDIA_SUPPORT            
CONFIG_MEDIA_SUPPORT=m
alnagon ~ % zcat /proc/config.gz |grep CONFIG_MEDIA_USB_SUPPORT
CONFIG_MEDIA_USB_SUPPORT=y
alnagon ~ % zcat /proc/config.gz |grep CONFIG_MEDIA_ANALOG_TV_SUPPORT
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
alnagon ~ % zcat /proc/config.gz |grep CONFIG_MEDIA_DIGITAL_TV_SUPPORT
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
alnagon ~ % zcat /proc/config.gz |grep CONFIG_VIDEO_DEV               
CONFIG_VIDEO_DEV=m
alnagon ~ % zcat /proc/config.gz |grep CONFIG_I2C=     
CONFIG_I2C=m
alnagon ~ % zcat /proc/config.gz |grep CONFIG_VIDEO_TUNER
CONFIG_VIDEO_TUNER=m
alnagon ~ % zcat /proc/config.gz |grep CONFIG_VIDEO_TVEEPROM
CONFIG_VIDEO_TVEEPROM=m
alnagon ~ % zcat /proc/config.gz |grep CONFIG_VIDEOBUF_VMALLOC
CONFIG_VIDEOBUF_VMALLOC=m
alnagon ~ % zcat /proc/config.gz |grep CONFIG_VIDEO_CX25840   
CONFIG_VIDEO_CX25840=m
alnagon ~ % zcat /proc/config.gz |grep CONFIG_VIDEO_CX2341X
CONFIG_VIDEO_CX2341X=m
alnagon ~ % zcat /proc/config.gz |grep CONFIG_I2C_MUX=
CONFIG_I2C_MUX=m

只有RC_CORE选项有一些麻烦,因为缺少:

alnagon ~ % zcat /proc/config.gz |grep CONFIG_RC_CORE
alnagon ~ % zcat /proc/config.gz |grep RC_CORE
alnagon ~ % zcat /proc/config.gz |grep CONFIG_RC     
# CONFIG_RCU_EXPERT is not set
CONFIG_RCU_STALL_COMMON=y
# CONFIG_RCU_EXPEDITE_BOOT is not set
# CONFIG_RCU_TORTURE_TEST is not set
CONFIG_RCU_CPU_STALL_TIMEOUT=21
# CONFIG_RCU_TRACE is not set
# CONFIG_RCU_EQS_DEBUG is not set
alnagon ~ % 

CONFIG_RC_CORE不在内核中,但必须解决,那又怎样..?

背景:
RC_CORE 是内核中特定的、奇怪的选项。 RC_CORE为辅助选项,无法手动切换。它不能在 xconfig 或 menuconfig 中解决,但有工具可以了解它。正如提到的 0andriy - 非常感谢 - 它是 make nconfig。 在 nconfig 中按 F8 (SymSearch) 查找 RC_CORE 及其依赖项

Symbol: RC_CORE [=m]
Type  : tristate
  Defined at drivers/media/rc/Kconfig:1
  Depends on: MEDIA_SUPPORT [=m] && MEDIA_RC_SUPPORT [=y] && INPUT [=y]

就是这样。隐藏的依赖是:MEDIA_RC_SUPPORT!!!

所以答案是:
如果你想编译VIDEO_CX231XX,你还必须打开MEDIA_RC_SUPPORT。

关于linux - 为什么无法标记所需的内核模块进行编译、隐藏依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41447894/

相关文章:

linux - 我无法从我的 Linux 系统中卸载 Tcl

sockets - Linux 内核 IPv4 和 IPv6 套接字创建 : EPROTONOSUPPORT and ESOCKTNOSUPPORT errors

c - Linux 套接字上的 SO_SNDBUF 和 SO_RCVBUF

linux - 程序栈的增长方向到底是什么?

mysql - 错误 : token "@" is not valid in preprocessor expressions

java - Java 应用程序的 Linux 启动脚本

linux - "Cannot allocate memory"尽管免费报告 "available"

linux - 使用 jpegoptim -m 80 *.jpg 后 Centos 中的参数列表太长

memory-management - Linux内核模块内存管理

c - gdb 目标远程 :1234 connection timeout linux