Linux 内核 Media 子系统编译指南:从 Kconfig 选项到 cx231xx 模块化 TV 驱动

发布时间:2026/10/30 12:18:14

Linux 内核 Media 子系统编译指南:从 Kconfig 选项到 cx231xx 模块化 TV 驱动 Linux 内核 Media 子系统编译指南从 Kconfig 选项到 cx231xx 模块化 TV 驱动【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux本文以 Linux 内核官方文档 Building support for a media device 为核心系统讲解如何为摄像头、电视卡、收音机等媒体设备配置、编译并安装内核支持涵盖make menuconfig与scripts/config两种配置方式、Media/RC/CEC 三大配置块的完整选项语义、I²C/INPUT 等依赖项以及如何单独构建 media 驱动backports 方式。读完本篇你将能够独立产出一个包含指定媒体驱动的内核并理解每个 Kconfig 选项在内核源码中的真实依赖关系。一、获取源码主线树与媒体开发树文档首先指出内核源码可以从发行版提供的源包或内核主 git 树获取。但对以下三类场景文档明确建议使用 media 子系统的主开发树master分支想尝试新特性、愿意承担风险的实验者需要报告 bug 的开发者正在编写新补丁的贡献者。该开发树位于 LinuxTV 基础设施上git.linuxtv.org/media.git配套的操作说明可在 LinuxTV wiki 中参考。对于只想构建当前仓库版本的用户直接使用仓库本身即本文对应的 Linux 内核源码树即可。二、配置内核menuconfig 与 scripts/config 双通道2.1 使用 make menuconfig 图形菜单最直观的方式是打开内核构建选项菜单$ make menuconfig选择所需选项后保存退出修改结果落在内核源码根目录的.config文件中形如... # CONFIG_RC_CORE is not set # CONFIG_CEC_CORE is not set CONFIG_MEDIA_SUPPORTm CONFIG_MEDIA_SUPPORT_FILTERy ...2.2 使用 scripts/config 脚本直接设置除菜单外内核提供 scripts/config 脚本可以直接以命令行方式启用配置项适合脚本化批量配置。启用媒体支持与遥控器支持并编译为模块的最小命令为$ scripts/config -m RC_CORE $ scripts/config -m MEDIA_SUPPORT其中-m表示设置为模块M。2.3 顶层菜单Media 子系统的四个入口媒体相关支持由Device Drivers下的这组选项控制Device Drivers --- M Remote Controller support --- [ ] HDMI CEC RC integration [ ] Enable CEC error injection support [ ] HDMI CEC drivers --- * Multimedia support ---各选项的含义与源码级依赖如下对应 drivers/media/Kconfig 顶部的source结构RC 与 CEC 菜单被显式声明为不依赖MEDIA_SUPPORT菜单项对应 Kconfig作用与源码依据Remote Controller supportRC_CORE遥控器核心支持。从 drivers/media/rc/Kconfig 可见它depends on INPUT——这就是文档后面强调media 依赖 core 功能的典型案例HDMI CEC RC integrationMEDIA_CEC_RC将 HDMI CEC 接收的遥控数据转发进 RC 框架如同遥控器直接插在机器上。drivers/media/cec/Kconfig 中其依赖为depends on CEC_CORE RC_COREEnable CEC error injection supportCEC_PIN_ERROR_INJ通过 debugfs 做 CEC 错误注入依赖CEC_PIN DEBUG_FS主要用于驱动开发调试HDMI CEC driversMEDIA_CEC_SUPPORT选择通过 HDMI 接口收发 CEC 码的平台与 USB 驱动。注意 drivers/media/cec/Kconfig 中的说明DRM 子系统的 GPU 驱动也使用 media 的 HDMI CEC 支持那些 GPU 驱动在Graphics support菜单下选择支持 HDMI CEC 的 GPU 驱动会自动启用 media 侧的 CEC 核心Multimedia supportMEDIA_SUPPORT摄像头、音视频采集卡与 TV 支持总开关可编译进内核Y或作为模块M。tristate类型、依赖HAS_IOMEM文档建议大多数场景下将媒体子系统编译为模块M是更优选择便于驱动热插拔与独立更新。三、Media 依赖项从干净配置启用 media 通常不够文档特别提醒从一个干净配置clean config直接启用上面的选项通常不够——media 子系统依赖多个内核核心功能I²C 总线大多数媒体设备通过 I²CInter-Integrated Circuit串行总线与调谐器、前端等外设通信需启用 I²C 总线支持./scripts/config -m I2C这一点在源码中可以得到印证drivers/media/Kconfig 中MEDIA_SUBDRV_AUTOSELECT自动选择附属驱动直接select I2C和select I2C_MUX。输入设备INPUT遥控器核心要求输入设备支持./scripts/config -m INPUT这与 drivers/media/rc/Kconfig 中RC_CORE depends on INPUT严格对应。其他核心功能如 PCI、USB则取决于你要启用的具体驱动。四、启用 Remote Controller 支持遥控器菜单结构如下--- Remote Controller support M Compile Remote Controller keymap modules [*] LIRC user interface [*] Support for eBPF programs attached to lirc devices [*] Remote controller decoders --- [*] Remote Controller devices ---逐项说明均可在 drivers/media/rc/Kconfig 中找到定义Compile Remote Controller keymap modulesRC_MAP为多种常见遥控器编译键位映射表。从 drivers/media/rc/keymaps/Kconfig 可知它是tristate、默认y帮助文本还提到 v4l-utils 包中的ir-keytable工具可在用户态加载同样的 RC 映射表因此不用遥控器的系统可以将其关闭。LIRC user interfaceLIRC启用/dev/lirc*接口让用户态接收遥控器的原始rawIR 数据——这是 IR 发射blasting与 lirc 守护进程所必需的。Support for eBPF programs attached to lirc devicesBPF_LIRC_MODE2允许通过BPF_PROG_ATTACH将 eBPF 程序挂载到 lirc 设备仅限 raw IR 接收器用 eBPF 程序为内核补充内核自带解码器不支持的协议解码能力。源码中其依赖为BPF_SYSCALL、RC_COREy和LIRC。Remote controller decodersRC_DECODERS选择内核可识别的 IR 协议NEC、RC-5、RC-6、Sony、JVC、Sanyo、Sharp 等。文档建议除非要刻意禁用某个解码器否则保持全部子选项启用。Remote Controller devicesRC_DEVICES选择适配你硬件的 IR 接收/发射驱动。4.1 实战用 scripts/config 配置 ITE 遥控器驱动文档给出了一个完整的脚本化示例支持 ITE 遥控器驱动常见于 Intel NUC 及部分华硕 x86 台式机即ite-cir模块$ scripts/config -e INPUT $ scripts/config -e ACPI $ scripts/config -e MODULES $ scripts/config -m RC_CORE $ scripts/config -e RC_DEVICES $ scripts/config -e RC_DECODERS $ scripts/config -m IR_RC5_DECODER $ scripts/config -m IR_ITE_CIR从 drivers/media/rc/Kconfig 中IR_ITE_CIR的定义可以看到它的依赖为PNP || COMPILE_TEST与HAS_IOPORT——这解释了上面命令里ACPI被启用PNP/ACPI 是这类集成 IR 硬件的发现通道。此外文档脚注强调如果你要使用某些 TV 卡驱动即使不需要 IR也应启用 RC_CORE因为那些驱动可能依赖遥控器核心支持否则无法编译。五、启用 HDMI CEC 支持HDMI CEC 支持在驱动需要时自动被选中你只需启用一个需要它的显卡驱动或某个现有 HDMI CEC 驱动即可无需手工打开 CEC 核心。HDMI 专用驱动位于HDMI CEC drivers菜单。文档给出的示例菜单内容脚注说明实际可选项取决于系统架构随内核版本可能变化--- HDMI CEC drivers ChromeOS EC CEC driver Amlogic Meson AO CEC driver Amlogic Meson G12A AO CEC driver Generic GPIO-based CEC driver Samsung S5P CEC driver STMicroelectronics STiH4xx HDMI CEC driver STMicroelectronics STM32 HDMI CEC driver Tegra HDMI CEC driver SECO Boards HDMI CEC driver [ ] SECO Boards IR RC5 support Pulse Eight HDMI CEC RainShadow Tech HDMI CEC六、启用 Media 支持选中Multimedia support后你会看到如下菜单--- Media support [ ] Filter media drivers [*] Autoselect ancillary drivers Media device types --- Media core support --- Video4Linux options --- Media controller options --- Digital TV options --- HDMI CEC options --- Media drivers --- Media ancillary drivers ---6.1 Autoselect ancillary drivers文档强烈建议除非你完全清楚自己在做什么或正在为 SoC 平台构建驱动否则保持Autoselect ancillary drivers开启。它会为你自动选中所需的 I²C 附属驱动调谐器、传感器、前端等。源码印证drivers/media/Kconfig 中MEDIA_SUBDRV_AUTOSELECT的帮助文本警告误关附属驱动会导致设备无法调谐或缺少所需解调器并且该选项默认y if MEDIA_SUPPORT_FILTER同时select I2C/select I2C_MUX。6.2 路径一Filter media drivers 过滤菜单面向 PC/笔记本Filter media drivers菜单专为 PC 与笔记本硬件设计先声明你需要哪类媒体驱动构建系统会自动挑选支持这些功能所需的核心驱动。可选项为[ ] Cameras and video grabbers [ ] Analog TV [ ] Digital TV [ ] AM/FM radio receivers/transmitters [ ] Software defined radio [ ] Platform-specific devices [ ] Test drivers例如只要摄像头/采集卡选第一项即可可以多选。从 drivers/media/Kconfig 可见这七个选项正是MEDIA_CAMERA_SUPPORT、MEDIA_ANALOG_TV_SUPPORT、MEDIA_DIGITAL_TV_SUPPORT、MEDIA_RADIO_SUPPORT、MEDIA_SDR_SUPPORT、MEDIA_PLATFORM_SUPPORT、MEDIA_TEST_SUPPORT且它们均default y if !MEDIA_SUPPORT_FILTER——即一旦关闭过滤全部默认打开。两个值得注意的细节均来自 Kconfig 帮助文本与文档 note 呼应混合电视卡多数 TV 卡是混合卡同时支持模拟与数字 TV。持有混合卡时可能需要在菜单中同时启用Analog TV和Digital TV。默认核心功能够用使用过滤选项后媒体核心功能的默认值通常已足以提供驱动的基本功能你也可以手动进入下列子菜单启用额外可选功能Media core support --- Video4Linux options --- Media controller options --- Digital TV options --- HDMI CEC options ---选中过滤条件后符合条件的驱动将出现在Media support → Media drivers子菜单中。6.3 路径二关闭过滤手工面对 Media Core Support如果关闭Filter media drivers那么所有依赖条件满足的驱动都会显示在Media drivers菜单中。但文档提醒此时你必须先确保Media Core Support菜单包含了你的驱动所需的全部核心功能否则对应的设备驱动根本不会显示出来。源码印证drivers/media/Kconfig 中MEDIA_SUPPORT_FILTER的帮助文本明确写了不勾选它时所有非可选的媒体核心功能都会被启用所有媒体设备驱动都会被显示。核心支持由类型开关自动推导例如VIDEO_DEVVideo4Linux core的默认值由MEDIA_CAMERA_SUPPORT || MEDIA_ANALOG_TV_SUPPORT || MEDIA_RADIO_SUPPORT || MEDIA_SDR_SUPPORT || MEDIA_PLATFORM_SUPPORT || MEDIA_TEST_SUPPORT之一置位DVB_CORE依赖MEDIA_DIGITAL_TV_SUPPORTMEDIA_CONTROLLERMedia Controller API在摄像头/模拟 TV/数字 TV/平台设备任一项启用时默认打开。七、完整示例为 cx231xx USB 电视卡构建模块化支持文档给出的实战案例为 cx231xx 卡列表 中列出的某块板卡启用模块化支持media 核心全部为模块。此时.config应包含CONFIG_MODULESy CONFIG_USBy CONFIG_I2Cy CONFIG_INPUTy CONFIG_RC_COREm CONFIG_MEDIA_SUPPORTm CONFIG_MEDIA_SUPPORT_FILTERy CONFIG_MEDIA_ANALOG_TV_SUPPORTy CONFIG_MEDIA_DIGITAL_TV_SUPPORTy CONFIG_MEDIA_USB_SUPPORTy CONFIG_VIDEO_CX231XXy CONFIG_VIDEO_CX231XX_DVBy这份配置与源码依赖链完全吻合drivers/media/usb/cx231xx/Kconfig 中VIDEO_CX231XX的依赖为VIDEO_DEV I2C I2C_MUX——所以必须同时有USB、I2C且它select了VIDEO_TUNER、VIDEO_TVEEPROM、VIDEOBUF2_VMALLOC、VIDEO_CX25840、VIDEO_CX2341X等附属组件对应菜单中的 Autoselect 机制。VIDEO_CX231XX_DVB依赖DVB_CORE并在MEDIA_SUBDRV_AUTOSELECT开启时自动select一批调谐器MEDIA_TUNER_XC5000、MEDIA_TUNER_TDA18271、DVB_SI2165等——这正是混合卡同时打开 Analog TV 与 Digital TV在 Kconfig 层面的体现。八、构建并安装新内核.config就绪后构建与安装的完整流程为$ make $ sudo make modules_install $ sudo make install九、只构建新的 media 驱动与核心backports 方案从开发树运行整套新内核通常有风险可能包含有 bug 的实验性改动因此更稳妥的做法是只把新的 media 驱动编译成模块叠加到你现有的稳定内核上。文档介绍了两条途径Linux Kernel backports 项目包含针对稳定内核编译的新版驱动LinuxTV 维护的 media_build 回移树git.linuxtv.org/media_build.git/仅含 media 驱动从最新内核每日更新。文档对该树的免责声明必须了解用于测试相对安全但不保证在任意随机内核上能编译或工作——它按best-efforts原则维护。发现问题可向 media 子系统邮件列表mediavger.kernel.org提交补丁主题行加[PATCH media-build]前缀。使用流程$ ./build三条注意事项文档 note 原文要点若media-build树更新过可能需要在更新后再运行一次./build如果之前针对不同版本的内核构建过该树可能需要先执行make distclean默认情况下它会复用你当前运行内核中的 media 配置选项。若要选择不同驱动或不同配置选项$ make menuconfig然后构建并安装新驱动$ make sudo make install这将覆盖你内核此前使用的 media 驱动从而在不换内核的情况下获得最新 media 子系统的功能。十、要点回顾Media 子系统的配置入口是Device Drivers下的Remote Controller supportRC_CORE、HDMI CEC三项与Multimedia supportMEDIA_SUPPORTRC 与 CEC 核心不依赖MEDIA_SUPPORT可独立存在drivers/media/Kconfig 顶部注释明确说明。干净配置启用 media 后务必补齐 I²C、INPUT以及按驱动需要补齐 PCI/USB 等总线支持。遥控器配置链为INPUT → RC_CORE → RC_MAP/RC_DECODERS/RC_DEVICESeBPF 解码扩展额外要求BPF_SYSCALL LIRC。PC 场景优先使用Filter media driversAutoselect ancillary drivers混合电视卡要同时勾选 Analog 与 Digital TV。不想换内核时用 backports / media_build 树单独构建 media 模块./build后make sudo make install即可覆盖旧驱动。配置语义的最终依据是 drivers/media/Kconfig、drivers/media/rc/Kconfig、drivers/media/cec/Kconfig 与各驱动自身的 Kconfig 文件官方文档见 Documentation/admin-guide/media/building.rst。【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/30 17:03:44

RPCS3模拟器快速上手:在PC上跑起PS3游戏

RPCS3模拟器快速上手:在PC上跑起PS3游戏 【免费下载链接】rpcs3 PlayStation 3 emulator and debugger 项目地址: https://gitcode.com/GitHub_Trending/rp/rpcs3 RPCS3模拟器是一个免费开源的PlayStation 3模拟器,用C编写,能把PS3游戏…

2026/10/30 17:03:29

Java进阶学习之路:从JVM底层到工程实践的核心修炼指南

1. 别急着刷框架,先把“编程内功”理清楚“Java进阶学习之路”这个话题,网上一搜一大把,绝大多数是列书单、贴脑图、挂视频链接。作为一个写了十几年Java的老开发,我想换一种方式聊:不给你一份永远看不完的课程表&…

2026/10/26 20:12:34

FAM Hydrazide糖蛋白标记全流程:醛基靶向的绿色荧光探针方案

一支FAM Hydrazide(CAS 2183440-65-3)到手后,我做的第一件事不是直接稀释去标记,而是先把它放在暗盒里冷静了半小时——因为之前吃过太多次“荧光试剂一开瓶就受潮降解”的亏。这支试剂的定位很明确:高亮度绿色荧光探针…

2026/10/30 17:00:27

JDBC元数据驱动的XML自动生成工具

简介:这是一款面向Java开发人员与数据库管理员的XML自动化生成工具,解决手动编写XML易出错、效率低的问题,特别适用于需频繁将数据库查询结果导出为结构化XML配置文件或数据交换文档的场景。资源包共4个文件,含1个可执行程序&…

2026/10/30 17:00:27

SpringBoot 3.2.1校园服务平台生产级落地实践

简介:本资源是一套面向计算机专业本科生的毕业设计实战项目,基于Spring Boot 3.2.1框架开发的校园服务平台源码,适用于Java后端开发入门到进阶学习者,解决高校信息化系统开发中常见的模块集成、权限管理与前后端协同问题。压缩包共…

2026/10/30 17:00:27

adb 1.0.39 Windows版部署与Android安全设备画像实战

简介:面向 Android 开发、测试与安全调试场景的 adb 1.0.39 Windows 版工具包,适合需要在本机完成设备连接、应用部署与日志排查的初中级开发者使用。压缩包共收录 1716 个文件,整体约 9.53MB,除 adb、fastboot 等可执行文件与 dl…

2026/10/30 17:00:27

云资源治理操作系统:从成本优化到动态权限的实战指南

1. 项目概述:这不是一个“平台”,而是一套可落地的云资源治理操作系统 “云管理平台实践指南”这八个字,乍看平平无奇,像极了某本被束之高阁的厂商白皮书封面。但在我过去十年服务过三十多家中大型企业的实操经验里,它…

2026/10/30 16:55:26

C# TCP北斗服务器:工业级RDSS短报文解析与高精度授时实现

简介:这是一套基于C#开发的北斗卫星通信转发服务器网络版实现,面向物联网通信、嵌入式网关开发及北斗短报文应用领域的中高级开发者,解决多北斗客户端统一接入、数据实时转发与集中管理问题。资源包共29个文件,含10个核心C#源码文…

2026/10/29 17:05:52

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/29 17:06:02

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/29 17:06:13

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/30 0:00:46

NCP1342高频准谐振反激控制器:从设计约束到验收的完整方案

简介:NCP1342 高频准谐振反激控制器应用介绍译文文档,面向电源设计工程师、硬件研发人员及开关电源学习者,帮助读者跨越英文原版资料的语言门槛,系统理解这款高集成度 QR Flyback 控制器的设计要点。文档围绕芯片核心特性展开&…

2026/10/30 0:00:46

NCP1342准谐振反激电源设计:从选型到验收的全流程解析

简介:这份文档面向电源设计工程师与开关电源学习者,系统梳理NCP1342高频准谐振反激控制器的应用要点,帮助读者快速理解这款高集成度离线电源变换器控制芯片的工作机制与设计方法。内容涵盖芯片核心特性、引脚功能定义、电气特性参数表、最大额…

2026/10/30 0:00:46

Web系统自动登出机制设计与实现全解析

1. 系统自动登出机制的设计初衷在各类Web应用和后台管理系统中,自动登出功能早已成为标配。这个看似简单的功能背后,实际上涉及用户安全、资源管理和体验优化的多重考量。作为从业十多年的老开发,我见过太多因为登出逻辑设计不当导致的安全事…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑