xref: /openbmc/linux/Documentation/admin-guide/media/building.rst (revision 9144f784f852f9a125cabe9927b986d909bfa439)
12aca74c8SMauro Carvalho Chehab.. SPDX-License-Identifier: GPL-2.0
22aca74c8SMauro Carvalho Chehab
32aca74c8SMauro Carvalho Chehab===================================
42aca74c8SMauro Carvalho ChehabBuilding support for a media device
52aca74c8SMauro Carvalho Chehab===================================
62aca74c8SMauro Carvalho Chehab
72aca74c8SMauro Carvalho ChehabThe first step is to download the Kernel's source code, either via a
82aca74c8SMauro Carvalho Chehabdistribution-specific source file or via the Kernel's main git tree\ [1]_.
92aca74c8SMauro Carvalho Chehab
102aca74c8SMauro Carvalho ChehabPlease notice, however, that, if:
112aca74c8SMauro Carvalho Chehab
122aca74c8SMauro Carvalho Chehab- you're a braveheart and want to experiment with new stuff;
132aca74c8SMauro Carvalho Chehab- if you want to report a bug;
142aca74c8SMauro Carvalho Chehab- if you're developing new patches
152aca74c8SMauro Carvalho Chehab
162aca74c8SMauro Carvalho Chehabyou should use the main media development tree ``master`` branch:
172aca74c8SMauro Carvalho Chehab
18*bffaf4cbSMauro Carvalho Chehab    https://git.linuxtv.org/media.git/
192aca74c8SMauro Carvalho Chehab
202aca74c8SMauro Carvalho ChehabIn this case, you may find some useful information at the
212aca74c8SMauro Carvalho Chehab`LinuxTv wiki pages <https://linuxtv.org/wiki>`_:
222aca74c8SMauro Carvalho Chehab
232aca74c8SMauro Carvalho Chehab    https://linuxtv.org/wiki/index.php/How_to_Obtain,_Build_and_Install_V4L-DVB_Device_Drivers
242aca74c8SMauro Carvalho Chehab
252aca74c8SMauro Carvalho Chehab.. [1] The upstream Linux Kernel development tree is located at
262aca74c8SMauro Carvalho Chehab
272aca74c8SMauro Carvalho Chehab       https://git.kernel.org/pub/scm/li  nux/kernel/git/torvalds/linux.git/
282aca74c8SMauro Carvalho Chehab
292aca74c8SMauro Carvalho ChehabConfiguring the Linux Kernel
302aca74c8SMauro Carvalho Chehab============================
312aca74c8SMauro Carvalho Chehab
322aca74c8SMauro Carvalho ChehabYou can access a menu of Kernel building options with::
332aca74c8SMauro Carvalho Chehab
342aca74c8SMauro Carvalho Chehab    $ make menuconfig
352aca74c8SMauro Carvalho Chehab
362aca74c8SMauro Carvalho ChehabThen, select all desired options and exit it, saving the configuration.
372aca74c8SMauro Carvalho Chehab
382aca74c8SMauro Carvalho ChehabThe changed configuration will be at the ``.config`` file. It would
392aca74c8SMauro Carvalho Chehablook like::
402aca74c8SMauro Carvalho Chehab
412aca74c8SMauro Carvalho Chehab    ...
422aca74c8SMauro Carvalho Chehab    # CONFIG_RC_CORE is not set
432aca74c8SMauro Carvalho Chehab    # CONFIG_CEC_CORE is not set
442aca74c8SMauro Carvalho Chehab    CONFIG_MEDIA_SUPPORT=m
452aca74c8SMauro Carvalho Chehab    CONFIG_MEDIA_SUPPORT_FILTER=y
462aca74c8SMauro Carvalho Chehab    ...
472aca74c8SMauro Carvalho Chehab
482aca74c8SMauro Carvalho ChehabThe media subsystem is controlled by those menu configuration options::
492aca74c8SMauro Carvalho Chehab
502aca74c8SMauro Carvalho Chehab    Device Drivers --->
512aca74c8SMauro Carvalho Chehab	<M> Remote Controller support  --->
522aca74c8SMauro Carvalho Chehab	[ ] HDMI CEC RC integration
532aca74c8SMauro Carvalho Chehab	[ ] Enable CEC error injection support
542aca74c8SMauro Carvalho Chehab	[*] HDMI CEC drivers  --->
552aca74c8SMauro Carvalho Chehab	<*> Multimedia support  --->
562aca74c8SMauro Carvalho Chehab
572aca74c8SMauro Carvalho ChehabThe ``Remote Controller support`` option enables the core support for
582aca74c8SMauro Carvalho Chehabremote controllers\ [2]_.
592aca74c8SMauro Carvalho Chehab
602aca74c8SMauro Carvalho ChehabThe ``HDMI CEC RC integration`` option enables integration of HDMI CEC
612aca74c8SMauro Carvalho Chehabwith Linux, allowing to receive data via HDMI CEC as if it were produced
622aca74c8SMauro Carvalho Chehabby a remote controller directly connected to the machine.
632aca74c8SMauro Carvalho Chehab
642aca74c8SMauro Carvalho ChehabThe ``HDMI CEC drivers`` option allow selecting platform and USB drivers
652aca74c8SMauro Carvalho Chehabthat receives and/or transmits CEC codes via HDMI interfaces\ [3]_.
662aca74c8SMauro Carvalho Chehab
672aca74c8SMauro Carvalho ChehabThe last option (``Multimedia support``) enables support for cameras,
682aca74c8SMauro Carvalho Chehabaudio/video grabbers and TV.
692aca74c8SMauro Carvalho Chehab
702aca74c8SMauro Carvalho ChehabThe media subsystem support can either be built together with the main
712aca74c8SMauro Carvalho ChehabKernel or as a module. For most use cases, it is preferred to have it
722aca74c8SMauro Carvalho Chehabbuilt as modules.
732aca74c8SMauro Carvalho Chehab
742aca74c8SMauro Carvalho Chehab.. note::
752aca74c8SMauro Carvalho Chehab
762aca74c8SMauro Carvalho Chehab   Instead of using a menu, the Kernel provides a script with allows
772aca74c8SMauro Carvalho Chehab   enabling configuration options directly. To enable media support
782aca74c8SMauro Carvalho Chehab   and remote controller support using Kernel modules, you could use::
792aca74c8SMauro Carvalho Chehab
802aca74c8SMauro Carvalho Chehab	$ scripts/config -m RC_CORE
812aca74c8SMauro Carvalho Chehab	$ scripts/config -m MEDIA_SUPPORT
822aca74c8SMauro Carvalho Chehab
832aca74c8SMauro Carvalho Chehab.. [2] ``Remote Controller support`` should also be enabled if you
842aca74c8SMauro Carvalho Chehab       want to use some TV card drivers that may depend on the remote
852aca74c8SMauro Carvalho Chehab       controller core support.
862aca74c8SMauro Carvalho Chehab
872aca74c8SMauro Carvalho Chehab.. [3] Please notice that the DRM subsystem also have drivers for GPUs
882aca74c8SMauro Carvalho Chehab       that use the media HDMI CEC support.
892aca74c8SMauro Carvalho Chehab
902aca74c8SMauro Carvalho Chehab       Those GPU-specific drivers are selected via the ``Graphics support``
912aca74c8SMauro Carvalho Chehab       menu, under ``Device Drivers``.
922aca74c8SMauro Carvalho Chehab
930136405fSRandy Dunlap       When a GPU driver supports HDMI CEC, it will automatically
942aca74c8SMauro Carvalho Chehab       enable the CEC core support at the media subsystem.
952aca74c8SMauro Carvalho Chehab
962aca74c8SMauro Carvalho ChehabMedia dependencies
972aca74c8SMauro Carvalho Chehab------------------
982aca74c8SMauro Carvalho Chehab
992aca74c8SMauro Carvalho ChehabIt should be noticed that enabling the above from a clean config is
1002aca74c8SMauro Carvalho Chehabusually not enough. The media subsystem depends on several other Linux
1012aca74c8SMauro Carvalho Chehabcore support in order to work.
1022aca74c8SMauro Carvalho Chehab
1032aca74c8SMauro Carvalho ChehabFor example, most media devices use a serial communication bus in
1042aca74c8SMauro Carvalho Chehaborder to talk with some peripherals. Such bus is called I²C
1052aca74c8SMauro Carvalho Chehab(Inter-Integrated Circuit). In order to be able to build support
1062aca74c8SMauro Carvalho Chehabfor such hardware, the I²C bus support should be enabled, either via
1072aca74c8SMauro Carvalho Chehabmenu or with::
1082aca74c8SMauro Carvalho Chehab
1092aca74c8SMauro Carvalho Chehab    ./scripts/config -m I2C
1102aca74c8SMauro Carvalho Chehab
1112aca74c8SMauro Carvalho ChehabAnother example: the remote controller core requires support for
1122aca74c8SMauro Carvalho Chehabinput devices, with can be enabled with::
1132aca74c8SMauro Carvalho Chehab
1142aca74c8SMauro Carvalho Chehab    ./scripts/config -m INPUT
1152aca74c8SMauro Carvalho Chehab
1162aca74c8SMauro Carvalho ChehabOther core functionality may also be needed (like PCI and/or USB support),
1172aca74c8SMauro Carvalho Chehabdepending on the specific driver(s) you would like to enable.
1182aca74c8SMauro Carvalho Chehab
1192aca74c8SMauro Carvalho ChehabEnabling Remote Controller Support
1202aca74c8SMauro Carvalho Chehab----------------------------------
1212aca74c8SMauro Carvalho Chehab
1222aca74c8SMauro Carvalho ChehabThe remote controller menu allows selecting drivers for specific devices.
1232aca74c8SMauro Carvalho ChehabIt's menu looks like this::
1242aca74c8SMauro Carvalho Chehab
1252aca74c8SMauro Carvalho Chehab         --- Remote Controller support
1262aca74c8SMauro Carvalho Chehab         <M>   Compile Remote Controller keymap modules
1272aca74c8SMauro Carvalho Chehab         [*]   LIRC user interface
1282aca74c8SMauro Carvalho Chehab         [*]     Support for eBPF programs attached to lirc devices
1292aca74c8SMauro Carvalho Chehab         [*]   Remote controller decoders  --->
1302aca74c8SMauro Carvalho Chehab         [*]   Remote Controller devices  --->
1312aca74c8SMauro Carvalho Chehab
1322aca74c8SMauro Carvalho ChehabThe ``Compile Remote Controller keymap modules`` option creates key maps for
1332aca74c8SMauro Carvalho Chehabseveral popular remote controllers.
1342aca74c8SMauro Carvalho Chehab
1352aca74c8SMauro Carvalho ChehabThe ``LIRC user interface`` option adds enhanced functionality when using the
1362aca74c8SMauro Carvalho Chehab``lirc`` program, by enabling an API that allows userspace to receive raw data
1372aca74c8SMauro Carvalho Chehabfrom remote controllers.
1382aca74c8SMauro Carvalho Chehab
1392aca74c8SMauro Carvalho ChehabThe ``Support for eBPF programs attached to lirc devices`` option allows
140dbeb56feSRandy Dunlapthe usage of special programs (called eBPF) that would allow applications
1412aca74c8SMauro Carvalho Chehabto add extra remote controller decoding functionality to the Linux Kernel.
1422aca74c8SMauro Carvalho Chehab
1432aca74c8SMauro Carvalho ChehabThe ``Remote controller decoders`` option allows selecting the
1442aca74c8SMauro Carvalho Chehabprotocols that will be recognized by the Linux Kernel. Except if you
1452aca74c8SMauro Carvalho Chehabwant to disable some specific decoder, it is suggested to keep all
1462aca74c8SMauro Carvalho Chehabsub-options enabled.
1472aca74c8SMauro Carvalho Chehab
1482aca74c8SMauro Carvalho ChehabThe ``Remote Controller devices`` allows you to select the drivers
1492aca74c8SMauro Carvalho Chehabthat would be needed to support your device.
1502aca74c8SMauro Carvalho Chehab
1512aca74c8SMauro Carvalho ChehabThe same configuration can also be set via the ``script/config``
1522aca74c8SMauro Carvalho Chehabscript. So, for instance, in order to support the ITE remote controller
1532aca74c8SMauro Carvalho Chehabdriver (found on Intel NUCs and on some ASUS x86 desktops), you could do::
1542aca74c8SMauro Carvalho Chehab
1552aca74c8SMauro Carvalho Chehab	$ scripts/config -e INPUT
1562aca74c8SMauro Carvalho Chehab	$ scripts/config -e ACPI
1572aca74c8SMauro Carvalho Chehab	$ scripts/config -e MODULES
1582aca74c8SMauro Carvalho Chehab	$ scripts/config -m RC_CORE
1592aca74c8SMauro Carvalho Chehab	$ scripts/config -e RC_DEVICES
1602aca74c8SMauro Carvalho Chehab	$ scripts/config -e RC_DECODERS
1612aca74c8SMauro Carvalho Chehab	$ scripts/config -m IR_RC5_DECODER
1622aca74c8SMauro Carvalho Chehab	$ scripts/config -m IR_ITE_CIR
1632aca74c8SMauro Carvalho Chehab
1642aca74c8SMauro Carvalho ChehabEnabling HDMI CEC Support
1652aca74c8SMauro Carvalho Chehab-------------------------
1662aca74c8SMauro Carvalho Chehab
1672aca74c8SMauro Carvalho ChehabThe HDMI CEC support is set automatically when a driver requires it. So,
1682aca74c8SMauro Carvalho Chehaball you need to do is to enable support either for a graphics card
1692aca74c8SMauro Carvalho Chehabthat needs it or by one of the existing HDMI drivers.
1702aca74c8SMauro Carvalho Chehab
1712aca74c8SMauro Carvalho ChehabThe HDMI-specific drivers are available at the ``HDMI CEC drivers``
1722aca74c8SMauro Carvalho Chehabmenu\ [4]_::
1732aca74c8SMauro Carvalho Chehab
1742aca74c8SMauro Carvalho Chehab	--- HDMI CEC drivers
1752aca74c8SMauro Carvalho Chehab	< >   ChromeOS EC CEC driver
1762aca74c8SMauro Carvalho Chehab	< >   Amlogic Meson AO CEC driver
1772aca74c8SMauro Carvalho Chehab	< >   Amlogic Meson G12A AO CEC driver
1782aca74c8SMauro Carvalho Chehab	< >   Generic GPIO-based CEC driver
1792aca74c8SMauro Carvalho Chehab	< >   Samsung S5P CEC driver
1802aca74c8SMauro Carvalho Chehab	< >   STMicroelectronics STiH4xx HDMI CEC driver
1812aca74c8SMauro Carvalho Chehab	< >   STMicroelectronics STM32 HDMI CEC driver
1822aca74c8SMauro Carvalho Chehab	< >   Tegra HDMI CEC driver
1832aca74c8SMauro Carvalho Chehab	< >   SECO Boards HDMI CEC driver
1842aca74c8SMauro Carvalho Chehab	[ ]     SECO Boards IR RC5 support
1852aca74c8SMauro Carvalho Chehab	< >   Pulse Eight HDMI CEC
1862aca74c8SMauro Carvalho Chehab	< >   RainShadow Tech HDMI CEC
1872aca74c8SMauro Carvalho Chehab
1882aca74c8SMauro Carvalho Chehab.. [4] The above contents is just an example. The actual options for
1892aca74c8SMauro Carvalho Chehab       HDMI devices depends on the system's architecture and may vary
1902aca74c8SMauro Carvalho Chehab       on new Kernels.
1912aca74c8SMauro Carvalho Chehab
1922aca74c8SMauro Carvalho ChehabEnabling Media Support
1932aca74c8SMauro Carvalho Chehab----------------------
1942aca74c8SMauro Carvalho Chehab
1952aca74c8SMauro Carvalho ChehabThe Media menu has a lot more options than the remote controller menu.
1962aca74c8SMauro Carvalho ChehabOnce selected, you should see the following options::
1972aca74c8SMauro Carvalho Chehab
1982aca74c8SMauro Carvalho Chehab	--- Media support
1992aca74c8SMauro Carvalho Chehab	[ ] Filter media drivers
2002aca74c8SMauro Carvalho Chehab	[*] Autoselect ancillary drivers
2012aca74c8SMauro Carvalho Chehab	    Media device types --->
2022aca74c8SMauro Carvalho Chehab	    Media core support --->
2032aca74c8SMauro Carvalho Chehab	    Video4Linux options --->
2042aca74c8SMauro Carvalho Chehab	    Media controller options --->
2052aca74c8SMauro Carvalho Chehab	    Digital TV options --->
2062aca74c8SMauro Carvalho Chehab	    HDMI CEC options --->
2072aca74c8SMauro Carvalho Chehab	    Media drivers --->
2082aca74c8SMauro Carvalho Chehab	    Media ancillary drivers --->
2092aca74c8SMauro Carvalho Chehab
2102aca74c8SMauro Carvalho ChehabExcept if you know exactly what you're doing, or if you want to build
2112aca74c8SMauro Carvalho Chehaba driver for a SoC platform, it is strongly recommended to keep the
2122aca74c8SMauro Carvalho Chehab``Autoselect ancillary drivers`` option turned on, as it will auto-select
2132aca74c8SMauro Carvalho Chehabthe needed I²C ancillary drivers.
2142aca74c8SMauro Carvalho Chehab
2152aca74c8SMauro Carvalho ChehabThere are now two ways to select media device drivers, as described
2162aca74c8SMauro Carvalho Chehabbelow.
2172aca74c8SMauro Carvalho Chehab
2182aca74c8SMauro Carvalho Chehab``Filter media drivers`` menu
2192aca74c8SMauro Carvalho Chehab^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2202aca74c8SMauro Carvalho Chehab
2212aca74c8SMauro Carvalho ChehabThis menu is meant to easy setup for PC and Laptop hardware. It works
2222aca74c8SMauro Carvalho Chehabby letting the user to specify what kind of media drivers are desired,
2232aca74c8SMauro Carvalho Chehabwith those options::
2242aca74c8SMauro Carvalho Chehab
2252aca74c8SMauro Carvalho Chehab	[ ] Cameras and video grabbers
2262aca74c8SMauro Carvalho Chehab	[ ] Analog TV
2272aca74c8SMauro Carvalho Chehab	[ ] Digital TV
2282aca74c8SMauro Carvalho Chehab	[ ] AM/FM radio receivers/transmitters
2292aca74c8SMauro Carvalho Chehab	[ ] Software defined radio
2302aca74c8SMauro Carvalho Chehab	[ ] Platform-specific devices
2312aca74c8SMauro Carvalho Chehab	[ ] Test drivers
2322aca74c8SMauro Carvalho Chehab
2332aca74c8SMauro Carvalho ChehabSo, if you want to add support to a camera or video grabber only,
2342aca74c8SMauro Carvalho Chehabselect just the first option. Multiple options are allowed.
2352aca74c8SMauro Carvalho Chehab
2362aca74c8SMauro Carvalho ChehabOnce the options on this menu are selected, the building system will
2372aca74c8SMauro Carvalho Chehabauto-select the needed core drivers in order to support the selected
2382aca74c8SMauro Carvalho Chehabfunctionality.
2392aca74c8SMauro Carvalho Chehab
2402aca74c8SMauro Carvalho Chehab.. note::
2412aca74c8SMauro Carvalho Chehab
2422aca74c8SMauro Carvalho Chehab   Most TV cards are hybrid: they support both Analog TV and Digital TV.
2432aca74c8SMauro Carvalho Chehab
2442aca74c8SMauro Carvalho Chehab   If you have an hybrid card, you may need to enable both ``Analog TV``
2452aca74c8SMauro Carvalho Chehab   and ``Digital TV`` at the menu.
2462aca74c8SMauro Carvalho Chehab
2470136405fSRandy DunlapWhen using this option, the defaults for the media support core
2482aca74c8SMauro Carvalho Chehabfunctionality are usually good enough to provide the basic functionality
2492aca74c8SMauro Carvalho Chehabfor the driver. Yet, you could manually enable some desired extra (optional)
2502aca74c8SMauro Carvalho Chehabfunctionality using the settings under each of the following
2512aca74c8SMauro Carvalho Chehab``Media support`` sub-menus::
2522aca74c8SMauro Carvalho Chehab
2532aca74c8SMauro Carvalho Chehab	    Media core support --->
2542aca74c8SMauro Carvalho Chehab	    Video4Linux options --->
2552aca74c8SMauro Carvalho Chehab	    Media controller options --->
2562aca74c8SMauro Carvalho Chehab	    Digital TV options --->
2572aca74c8SMauro Carvalho Chehab	    HDMI CEC options --->
2582aca74c8SMauro Carvalho Chehab
2592aca74c8SMauro Carvalho ChehabOnce you select the desired filters, the drivers that matches the filtering
2602aca74c8SMauro Carvalho Chehabcriteria will be available at the ``Media support->Media drivers`` sub-menu.
2612aca74c8SMauro Carvalho Chehab
2622aca74c8SMauro Carvalho Chehab``Media Core Support`` menu without filtering
2632aca74c8SMauro Carvalho Chehab^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2642aca74c8SMauro Carvalho Chehab
2652aca74c8SMauro Carvalho ChehabIf you disable the ``Filter media drivers`` menu, all drivers available
2662aca74c8SMauro Carvalho Chehabfor your system whose dependencies are met should be shown at the
2672aca74c8SMauro Carvalho Chehab``Media drivers`` menu.
2682aca74c8SMauro Carvalho Chehab
2692aca74c8SMauro Carvalho ChehabPlease notice, however, that you should first ensure that the
2702aca74c8SMauro Carvalho Chehab``Media Core Support`` menu has all the core functionality your drivers
2712aca74c8SMauro Carvalho Chehabwould need, as otherwise the corresponding device drivers won't be shown.
2722aca74c8SMauro Carvalho Chehab
2732aca74c8SMauro Carvalho ChehabExample
2742aca74c8SMauro Carvalho Chehab-------
2752aca74c8SMauro Carvalho Chehab
2762aca74c8SMauro Carvalho ChehabIn order to enable modular support for one of the boards listed on
2772aca74c8SMauro Carvalho Chehab:doc:`this table <cx231xx-cardlist>`, with modular media core modules, the
2782aca74c8SMauro Carvalho Chehab``.config`` file should contain those lines::
2792aca74c8SMauro Carvalho Chehab
2802aca74c8SMauro Carvalho Chehab    CONFIG_MODULES=y
2812aca74c8SMauro Carvalho Chehab    CONFIG_USB=y
2822aca74c8SMauro Carvalho Chehab    CONFIG_I2C=y
2832aca74c8SMauro Carvalho Chehab    CONFIG_INPUT=y
2842aca74c8SMauro Carvalho Chehab    CONFIG_RC_CORE=m
2852aca74c8SMauro Carvalho Chehab    CONFIG_MEDIA_SUPPORT=m
2862aca74c8SMauro Carvalho Chehab    CONFIG_MEDIA_SUPPORT_FILTER=y
2872aca74c8SMauro Carvalho Chehab    CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
2882aca74c8SMauro Carvalho Chehab    CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
2892aca74c8SMauro Carvalho Chehab    CONFIG_MEDIA_USB_SUPPORT=y
2902aca74c8SMauro Carvalho Chehab    CONFIG_VIDEO_CX231XX=y
2912aca74c8SMauro Carvalho Chehab    CONFIG_VIDEO_CX231XX_DVB=y
2922aca74c8SMauro Carvalho Chehab
2932aca74c8SMauro Carvalho ChehabBuilding and installing a new Kernel
2942aca74c8SMauro Carvalho Chehab====================================
2952aca74c8SMauro Carvalho Chehab
2962aca74c8SMauro Carvalho ChehabOnce the ``.config`` file has everything needed, all it takes to build
2972aca74c8SMauro Carvalho Chehabis to run the ``make`` command::
2982aca74c8SMauro Carvalho Chehab
2992aca74c8SMauro Carvalho Chehab    $ make
3002aca74c8SMauro Carvalho Chehab
3012aca74c8SMauro Carvalho ChehabAnd then install the new Kernel and its modules::
3022aca74c8SMauro Carvalho Chehab
3032aca74c8SMauro Carvalho Chehab    $ sudo make modules_install
3042aca74c8SMauro Carvalho Chehab    $ sudo make install
3052aca74c8SMauro Carvalho Chehab
3062aca74c8SMauro Carvalho ChehabBuilding just the new media drivers and core
3072aca74c8SMauro Carvalho Chehab============================================
3082aca74c8SMauro Carvalho Chehab
3092aca74c8SMauro Carvalho ChehabRunning a new development Kernel from the development tree is usually risky,
3102aca74c8SMauro Carvalho Chehabbecause it may have experimental changes that may have bugs. So, there are
3112aca74c8SMauro Carvalho Chehabsome ways to build just the new drivers, using alternative trees.
3122aca74c8SMauro Carvalho Chehab
3132aca74c8SMauro Carvalho ChehabThere is the `Linux Kernel backports project
3142aca74c8SMauro Carvalho Chehab<https://backports.wiki.kernel.org/index.php/Main_Page>`_, with contains
3152aca74c8SMauro Carvalho Chehabnewer drivers meant to be compiled against stable Kernels.
3162aca74c8SMauro Carvalho Chehab
3172aca74c8SMauro Carvalho ChehabThe LinuxTV developers, with are responsible for maintaining the media
3182aca74c8SMauro Carvalho Chehabsubsystem also maintains a backport tree, with just the media drivers
3192aca74c8SMauro Carvalho Chehabdaily updated from the newest kernel. Such tree is available at:
3202aca74c8SMauro Carvalho Chehab
3212aca74c8SMauro Carvalho Chehabhttps://git.linuxtv.org/media_build.git/
3222aca74c8SMauro Carvalho Chehab
3232aca74c8SMauro Carvalho ChehabIt should be noticed that, while it should be relatively safe to use the
3242aca74c8SMauro Carvalho Chehab``media_build`` tree for testing purposes, there are not warranties that
3252aca74c8SMauro Carvalho Chehabit would work (or even build) on a random Kernel. This tree is maintained
3262aca74c8SMauro Carvalho Chehabusing a "best-efforts" principle, as time permits us to fix issues there.
3272aca74c8SMauro Carvalho Chehab
3282aca74c8SMauro Carvalho ChehabIf you notice anything wrong on it, feel free to submit patches at the
3292aca74c8SMauro Carvalho ChehabLinux media subsystem's mailing list: media@vger.kernel.org. Please
3302aca74c8SMauro Carvalho Chehabadd ``[PATCH media-build]`` at the e-mail's subject if you submit a new
3312aca74c8SMauro Carvalho Chehabpatch for the media-build.
3322aca74c8SMauro Carvalho Chehab
3332aca74c8SMauro Carvalho ChehabBefore using it, you should run::
3342aca74c8SMauro Carvalho Chehab
3352aca74c8SMauro Carvalho Chehab    $ ./build
3362aca74c8SMauro Carvalho Chehab
3372aca74c8SMauro Carvalho Chehab.. note::
3382aca74c8SMauro Carvalho Chehab
3392aca74c8SMauro Carvalho Chehab    1) you may need to run it twice if the ``media-build`` tree gets
3402aca74c8SMauro Carvalho Chehab       updated;
3412aca74c8SMauro Carvalho Chehab    2) you may need to do a ``make distclean`` if you had built it
3422aca74c8SMauro Carvalho Chehab       in the past for a different Kernel version than the one you're
3432aca74c8SMauro Carvalho Chehab       currently using;
3442aca74c8SMauro Carvalho Chehab    3) by default, it will use the same config options for media as
3452aca74c8SMauro Carvalho Chehab       the ones defined on the Kernel you're running.
3462aca74c8SMauro Carvalho Chehab
3472aca74c8SMauro Carvalho ChehabIn order to select different drivers or different config options,
3482aca74c8SMauro Carvalho Chehabuse::
3492aca74c8SMauro Carvalho Chehab
3502aca74c8SMauro Carvalho Chehab    $ make menuconfig
3512aca74c8SMauro Carvalho Chehab
3522aca74c8SMauro Carvalho ChehabThen, you can build and install the new drivers::
3532aca74c8SMauro Carvalho Chehab
3542aca74c8SMauro Carvalho Chehab    $ make && sudo make install
3552aca74c8SMauro Carvalho Chehab
3562aca74c8SMauro Carvalho ChehabThis will override the previous media drivers that your Kernel were
3572aca74c8SMauro Carvalho Chehabusing.
358