1 .. SPDX-License-Identifier: GPL-2.0 2 3 =================================== 4 Building support for a media device 5 =================================== 6 7 The first step is to download the Kernel's sou 8 distribution-specific source file or via the K 9 10 Please notice, however, that, if: 11 12 - you're a braveheart and want to experiment w 13 - if you want to report a bug; 14 - if you're developing new patches 15 16 you should use the main media development tree 17 18 https://git.linuxtv.org/media_tree.git/ 19 20 In this case, you may find some useful informa 21 `LinuxTv wiki pages <https://linuxtv.org/wiki> 22 23 https://linuxtv.org/wiki/index.php/How_to_ 24 25 .. [1] The upstream Linux Kernel development t 26 27 https://git.kernel.org/pub/scm/li nux/ 28 29 Configuring the Linux Kernel 30 ============================ 31 32 You can access a menu of Kernel building optio 33 34 $ make menuconfig 35 36 Then, select all desired options and exit it, 37 38 The changed configuration will be at the ``.co 39 look like:: 40 41 ... 42 # CONFIG_RC_CORE is not set 43 # CONFIG_CEC_CORE is not set 44 CONFIG_MEDIA_SUPPORT=m 45 CONFIG_MEDIA_SUPPORT_FILTER=y 46 ... 47 48 The media subsystem is controlled by those men 49 50 Device Drivers ---> 51 <M> Remote Controller support ---> 52 [ ] HDMI CEC RC integration 53 [ ] Enable CEC error injection support 54 [*] HDMI CEC drivers ---> 55 <*> Multimedia support ---> 56 57 The ``Remote Controller support`` option enabl 58 remote controllers\ [2]_. 59 60 The ``HDMI CEC RC integration`` option enables 61 with Linux, allowing to receive data via HDMI 62 by a remote controller directly connected to t 63 64 The ``HDMI CEC drivers`` option allow selectin 65 that receives and/or transmits CEC codes via H 66 67 The last option (``Multimedia support``) enabl 68 audio/video grabbers and TV. 69 70 The media subsystem support can either be buil 71 Kernel or as a module. For most use cases, it 72 built as modules. 73 74 .. note:: 75 76 Instead of using a menu, the Kernel provide 77 enabling configuration options directly. To 78 and remote controller support using Kernel 79 80 $ scripts/config -m RC_CORE 81 $ scripts/config -m MEDIA_SUPPORT 82 83 .. [2] ``Remote Controller support`` should al 84 want to use some TV card drivers that m 85 controller core support. 86 87 .. [3] Please notice that the DRM subsystem al 88 that use the media HDMI CEC support. 89 90 Those GPU-specific drivers are selected 91 menu, under ``Device Drivers``. 92 93 When a GPU driver supports HDMI CEC, it 94 enable the CEC core support at the medi 95 96 Media dependencies 97 ------------------ 98 99 It should be noticed that enabling the above f 100 usually not enough. The media subsystem depend 101 core support in order to work. 102 103 For example, most media devices use a serial c 104 order to talk with some peripherals. Such bus 105 (Inter-Integrated Circuit). In order to be abl 106 for such hardware, the I²C bus support should 107 menu or with:: 108 109 ./scripts/config -m I2C 110 111 Another example: the remote controller core re 112 input devices, with can be enabled with:: 113 114 ./scripts/config -m INPUT 115 116 Other core functionality may also be needed (l 117 depending on the specific driver(s) you would 118 119 Enabling Remote Controller Support 120 ---------------------------------- 121 122 The remote controller menu allows selecting dr 123 It's menu looks like this:: 124 125 --- Remote Controller support 126 <M> Compile Remote Controller keyma 127 [*] LIRC user interface 128 [*] Support for eBPF programs att 129 [*] Remote controller decoders --- 130 [*] Remote Controller devices ---> 131 132 The ``Compile Remote Controller keymap modules 133 several popular remote controllers. 134 135 The ``LIRC user interface`` option adds enhanc 136 ``lirc`` program, by enabling an API that allo 137 from remote controllers. 138 139 The ``Support for eBPF programs attached to li 140 the usage of special programs (called eBPF) th 141 to add extra remote controller decoding functi 142 143 The ``Remote controller decoders`` option allo 144 protocols that will be recognized by the Linux 145 want to disable some specific decoder, it is s 146 sub-options enabled. 147 148 The ``Remote Controller devices`` allows you t 149 that would be needed to support your device. 150 151 The same configuration can also be set via the 152 script. So, for instance, in order to support 153 driver (found on Intel NUCs and on some ASUS x 154 155 $ scripts/config -e INPUT 156 $ scripts/config -e ACPI 157 $ scripts/config -e MODULES 158 $ scripts/config -m RC_CORE 159 $ scripts/config -e RC_DEVICES 160 $ scripts/config -e RC_DECODERS 161 $ scripts/config -m IR_RC5_DECODER 162 $ scripts/config -m IR_ITE_CIR 163 164 Enabling HDMI CEC Support 165 ------------------------- 166 167 The HDMI CEC support is set automatically when 168 all you need to do is to enable support either 169 that needs it or by one of the existing HDMI d 170 171 The HDMI-specific drivers are available at the 172 menu\ [4]_:: 173 174 --- HDMI CEC drivers 175 < > ChromeOS EC CEC driver 176 < > Amlogic Meson AO CEC driver 177 < > Amlogic Meson G12A AO CEC driver 178 < > Generic GPIO-based CEC driver 179 < > Samsung S5P CEC driver 180 < > STMicroelectronics STiH4xx HDMI 181 < > STMicroelectronics STM32 HDMI CE 182 < > Tegra HDMI CEC driver 183 < > SECO Boards HDMI CEC driver 184 [ ] SECO Boards IR RC5 support 185 < > Pulse Eight HDMI CEC 186 < > RainShadow Tech HDMI CEC 187 188 .. [4] The above contents is just an example. 189 HDMI devices depends on the system's ar 190 on new Kernels. 191 192 Enabling Media Support 193 ---------------------- 194 195 The Media menu has a lot more options than the 196 Once selected, you should see the following op 197 198 --- Media support 199 [ ] Filter media drivers 200 [*] Autoselect ancillary drivers 201 Media device types ---> 202 Media core support ---> 203 Video4Linux options ---> 204 Media controller options ---> 205 Digital TV options ---> 206 HDMI CEC options ---> 207 Media drivers ---> 208 Media ancillary drivers ---> 209 210 Except if you know exactly what you're doing, 211 a driver for a SoC platform, it is strongly re 212 ``Autoselect ancillary drivers`` option turned 213 the needed I²C ancillary drivers. 214 215 There are now two ways to select media device 216 below. 217 218 ``Filter media drivers`` menu 219 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 220 221 This menu is meant to easy setup for PC and La 222 by letting the user to specify what kind of me 223 with those options:: 224 225 [ ] Cameras and video grabbers 226 [ ] Analog TV 227 [ ] Digital TV 228 [ ] AM/FM radio receivers/transmitters 229 [ ] Software defined radio 230 [ ] Platform-specific devices 231 [ ] Test drivers 232 233 So, if you want to add support to a camera or 234 select just the first option. Multiple options 235 236 Once the options on this menu are selected, th 237 auto-select the needed core drivers in order t 238 functionality. 239 240 .. note:: 241 242 Most TV cards are hybrid: they support both 243 244 If you have an hybrid card, you may need to 245 and ``Digital TV`` at the menu. 246 247 When using this option, the defaults for the m 248 functionality are usually good enough to provi 249 for the driver. Yet, you could manually enable 250 functionality using the settings under each of 251 ``Media support`` sub-menus:: 252 253 Media core support ---> 254 Video4Linux options ---> 255 Media controller options ---> 256 Digital TV options ---> 257 HDMI CEC options ---> 258 259 Once you select the desired filters, the drive 260 criteria will be available at the ``Media supp 261 262 ``Media Core Support`` menu without filtering 263 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 264 265 If you disable the ``Filter media drivers`` me 266 for your system whose dependencies are met sho 267 ``Media drivers`` menu. 268 269 Please notice, however, that you should first 270 ``Media Core Support`` menu has all the core f 271 would need, as otherwise the corresponding dev 272 273 Example 274 ------- 275 276 In order to enable modular support for one of 277 :doc:`this table <cx231xx-cardlist>`, with mod 278 ``.config`` file should contain those lines:: 279 280 CONFIG_MODULES=y 281 CONFIG_USB=y 282 CONFIG_I2C=y 283 CONFIG_INPUT=y 284 CONFIG_RC_CORE=m 285 CONFIG_MEDIA_SUPPORT=m 286 CONFIG_MEDIA_SUPPORT_FILTER=y 287 CONFIG_MEDIA_ANALOG_TV_SUPPORT=y 288 CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y 289 CONFIG_MEDIA_USB_SUPPORT=y 290 CONFIG_VIDEO_CX231XX=y 291 CONFIG_VIDEO_CX231XX_DVB=y 292 293 Building and installing a new Kernel 294 ==================================== 295 296 Once the ``.config`` file has everything neede 297 is to run the ``make`` command:: 298 299 $ make 300 301 And then install the new Kernel and its module 302 303 $ sudo make modules_install 304 $ sudo make install 305 306 Building just the new media drivers and core 307 ============================================ 308 309 Running a new development Kernel from the deve 310 because it may have experimental changes that 311 some ways to build just the new drivers, using 312 313 There is the `Linux Kernel backports project 314 <https://backports.wiki.kernel.org/index.php/M 315 newer drivers meant to be compiled against sta 316 317 The LinuxTV developers, with are responsible f 318 subsystem also maintains a backport tree, with 319 daily updated from the newest kernel. Such tre 320 321 https://git.linuxtv.org/media_build.git/ 322 323 It should be noticed that, while it should be 324 ``media_build`` tree for testing purposes, the 325 it would work (or even build) on a random Kern 326 using a "best-efforts" principle, as time perm 327 328 If you notice anything wrong on it, feel free 329 Linux media subsystem's mailing list: media@vg 330 add ``[PATCH media-build]`` at the e-mail's su 331 patch for the media-build. 332 333 Before using it, you should run:: 334 335 $ ./build 336 337 .. note:: 338 339 1) you may need to run it twice if the ``m 340 updated; 341 2) you may need to do a ``make distclean`` 342 in the past for a different Kernel vers 343 currently using; 344 3) by default, it will use the same config 345 the ones defined on the Kernel you're r 346 347 In order to select different drivers or differ 348 use:: 349 350 $ make menuconfig 351 352 Then, you can build and install the new driver 353 354 $ make && sudo make install 355 356 This will override the previous media drivers 357 using.
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.