* [PATCH 0/4] Improve media admin-guide @ 2020-04-16 11:36 Mauro Carvalho Chehab 2020-04-16 11:36 ` [PATCH 1/4] media: admin-guide: add a card list for cx231xx boards Mauro Carvalho Chehab ` (3 more replies) 0 siblings, 4 replies; 7+ messages in thread From: Mauro Carvalho Chehab @ 2020-04-16 11:36 UTC (permalink / raw) To: Linux Media Mailing List; +Cc: Mauro Carvalho Chehab, Hans Verkuil Currently, the media admin-guide is just a random set of documents. Add an introductory chapter and a building guide at the beginning. While here, add a cardlist for cx231xx boards and update the em28xx cardlist. Mauro Carvalho Chehab (4): media: admin-guide: add a card list for cx231xx boards media: admin-guide: update em28xx cardlist media: admin-guide: Add an introduction chapter media: admin-guide: add a generic building guide Documentation/admin-guide/media/building.rst | 357 ++++++++++++++++++ Documentation/admin-guide/media/cardlist.rst | 1 + .../admin-guide/media/cx231xx-cardlist.rst | 99 +++++ .../admin-guide/media/em28xx-cardlist.rst | 4 + Documentation/admin-guide/media/index.rst | 3 + Documentation/admin-guide/media/intro.rst | 25 ++ 6 files changed, 489 insertions(+) create mode 100644 Documentation/admin-guide/media/building.rst create mode 100644 Documentation/admin-guide/media/cx231xx-cardlist.rst create mode 100644 Documentation/admin-guide/media/intro.rst -- 2.25.2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/4] media: admin-guide: add a card list for cx231xx boards 2020-04-16 11:36 [PATCH 0/4] Improve media admin-guide Mauro Carvalho Chehab @ 2020-04-16 11:36 ` Mauro Carvalho Chehab 2020-04-16 11:36 ` [PATCH 2/4] media: admin-guide: update em28xx cardlist Mauro Carvalho Chehab ` (2 subsequent siblings) 3 siblings, 0 replies; 7+ messages in thread From: Mauro Carvalho Chehab @ 2020-04-16 11:36 UTC (permalink / raw) To: Linux Media Mailing List; +Cc: Mauro Carvalho Chehab It is interesting to have a card list also for cx231xx driver, as it currently supports 27 different boards. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> --- Documentation/admin-guide/media/cardlist.rst | 1 + .../admin-guide/media/cx231xx-cardlist.rst | 99 +++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 Documentation/admin-guide/media/cx231xx-cardlist.rst diff --git a/Documentation/admin-guide/media/cardlist.rst b/Documentation/admin-guide/media/cardlist.rst index 5c9c3c97bcb2..527188ee9697 100644 --- a/Documentation/admin-guide/media/cardlist.rst +++ b/Documentation/admin-guide/media/cardlist.rst @@ -9,6 +9,7 @@ Cards List au0828-cardlist bttv-cardlist cx18-cardlist + cx231xx-cardlist cx23885-cardlist cx88-cardlist em28xx-cardlist diff --git a/Documentation/admin-guide/media/cx231xx-cardlist.rst b/Documentation/admin-guide/media/cx231xx-cardlist.rst new file mode 100644 index 000000000000..d374101be047 --- /dev/null +++ b/Documentation/admin-guide/media/cx231xx-cardlist.rst @@ -0,0 +1,99 @@ +.. SPDX-License-Identifier: GPL-2.0 + +cx231xx cards list +================== + +.. tabularcolumns:: |p{1.4cm}|p{10.0cm}|p{6.5cm}| + +.. flat-table:: + :header-rows: 1 + :widths: 2 12 19 + :stub-columns: 0 + + * - Card number + - Card name + - USB IDs + * - 0 + - Unknown CX231xx video grabber + - 0572:5A3C + * - 1 + - Conexant Hybrid TV - CARRAERA + - 0572:58A2 + * - 2 + - Conexant Hybrid TV - SHELBY + - 0572:58A1 + * - 3 + - Conexant Hybrid TV - RDE253S + - 0572:58A4 + * - 4 + - Conexant Hybrid TV - RDU253S + - 0572:58A5 + * - 5 + - Conexant VIDEO GRABBER + - 0572:58A6, 07ca:c039 + * - 6 + - Conexant Hybrid TV - rde 250 + - 0572:589E + * - 7 + - Conexant Hybrid TV - RDU 250 + - 0572:58A0 + * - 8 + - Hauppauge EXETER + - 2040:b120, 2040:b140 + * - 9 + - Hauppauge USB Live 2 + - 2040:c200 + * - 10 + - Pixelview PlayTV USB Hybrid + - 4000:4001 + * - 11 + - Pixelview Xcapture USB + - 1D19:6109, 4000:4001 + * - 12 + - Kworld UB430 USB Hybrid + - 1b80:e424 + * - 13 + - Iconbit Analog Stick U100 FM + - 1f4d:0237 + * - 14 + - Hauppauge WinTV USB2 FM (PAL) + - 2040:b110 + * - 15 + - Hauppauge WinTV USB2 FM (NTSC) + - 2040:b111 + * - 16 + - Elgato Video Capture V2 + - 0fd9:0037 + * - 17 + - Geniatech OTG102 + - 1f4d:0102 + * - 18 + - Kworld UB445 USB Hybrid + - 1b80:e421 + * - 19 + - Hauppauge WinTV 930C-HD (1113xx) / HVR-900H (111xxx) / PCTV QuatroStick 521e + - 2040:b130, 2040:b138, 2013:0259 + * - 20 + - Hauppauge WinTV 930C-HD (1114xx) / HVR-901H (1114xx) / PCTV QuatroStick 522e + - 2040:b131, 2040:b139, 2013:025e + * - 21 + - Hauppauge WinTV-HVR-955Q (111401) + - 2040:b123, 2040:b124 + * - 22 + - Terratec Grabby + - 1f4d:0102 + * - 23 + - Evromedia USB Full Hybrid Full HD + - 1b80:d3b2 + * - 24 + - Astrometa T2hybrid + - 15f4:0135 + * - 25 + - The Imaging Source DFG/USB2pro + - 199e:8002 + * - 26 + - Hauppauge WinTV-HVR-935C + - 2040:b151 + * - 27 + - Hauppauge WinTV-HVR-975 + - 2040:b150 -- 2.25.2 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/4] media: admin-guide: update em28xx cardlist 2020-04-16 11:36 [PATCH 0/4] Improve media admin-guide Mauro Carvalho Chehab 2020-04-16 11:36 ` [PATCH 1/4] media: admin-guide: add a card list for cx231xx boards Mauro Carvalho Chehab @ 2020-04-16 11:36 ` Mauro Carvalho Chehab 2020-04-16 11:36 ` [PATCH 3/4] media: admin-guide: Add an introduction chapter Mauro Carvalho Chehab 2020-04-16 11:36 ` [PATCH 4/4] media: admin-guide: add a generic building guide Mauro Carvalho Chehab 3 siblings, 0 replies; 7+ messages in thread From: Mauro Carvalho Chehab @ 2020-04-16 11:36 UTC (permalink / raw) To: Linux Media Mailing List; +Cc: Mauro Carvalho Chehab A new em28xx card was added upstream. Update cards list accordingly. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> --- Documentation/admin-guide/media/em28xx-cardlist.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Documentation/admin-guide/media/em28xx-cardlist.rst b/Documentation/admin-guide/media/em28xx-cardlist.rst index cb2e693a56a2..a5f0e6d22a1a 100644 --- a/Documentation/admin-guide/media/em28xx-cardlist.rst +++ b/Documentation/admin-guide/media/em28xx-cardlist.rst @@ -430,3 +430,7 @@ EM28xx cards list - Magix USB Videowandler-2 - em2861 - 1b80:e349 + * - 104 + - PCTV DVB-S2 Stick (461e v2) + - em28178 + - 2013:0461, 2013:0259 -- 2.25.2 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/4] media: admin-guide: Add an introduction chapter 2020-04-16 11:36 [PATCH 0/4] Improve media admin-guide Mauro Carvalho Chehab 2020-04-16 11:36 ` [PATCH 1/4] media: admin-guide: add a card list for cx231xx boards Mauro Carvalho Chehab 2020-04-16 11:36 ` [PATCH 2/4] media: admin-guide: update em28xx cardlist Mauro Carvalho Chehab @ 2020-04-16 11:36 ` Mauro Carvalho Chehab 2020-04-17 9:00 ` Hans Verkuil 2020-04-16 11:36 ` [PATCH 4/4] media: admin-guide: add a generic building guide Mauro Carvalho Chehab 3 siblings, 1 reply; 7+ messages in thread From: Mauro Carvalho Chehab @ 2020-04-16 11:36 UTC (permalink / raw) To: Linux Media Mailing List; +Cc: Mauro Carvalho Chehab, Hans Verkuil The media's admin guide is currently just a group of not-connected docs. Add an introduction chapter for it to start making sense to a random reader. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> --- Documentation/admin-guide/media/index.rst | 2 ++ Documentation/admin-guide/media/intro.rst | 25 +++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 Documentation/admin-guide/media/intro.rst diff --git a/Documentation/admin-guide/media/index.rst b/Documentation/admin-guide/media/index.rst index 6e5e6bdb6d4b..f79d4f1e05ba 100644 --- a/Documentation/admin-guide/media/index.rst +++ b/Documentation/admin-guide/media/index.rst @@ -34,6 +34,8 @@ Video4Linux (V4L) driver-specific documentation :maxdepth: 5 :numbered: + intro + cardlist v4l-with-ir diff --git a/Documentation/admin-guide/media/intro.rst b/Documentation/admin-guide/media/intro.rst new file mode 100644 index 000000000000..9b6399fd904f --- /dev/null +++ b/Documentation/admin-guide/media/intro.rst @@ -0,0 +1,25 @@ +============ +Introduction +============ + +The media subsystem consists on Linux support for several different types +of devices: + +- Audio and video grabbers; +- PC and Laptop Cameras; +- Complex cameras found on Embedded hardware; +- Analog and digital TV; +- HDMI Customer Electronics Control (CEC); +- Multi-touch input devices; +- Remote Controllers; +- Media encoders and decoders. + +Due to the diversity of devices, the subsystem provides several different +APIs: + +- Remote Controller API; +- HDMI CEC API; +- Video4Linux API; +- Media controller API; +- Video4Linux Request API (experimental); +- Digital TV API (also known as DVB API). -- 2.25.2 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 3/4] media: admin-guide: Add an introduction chapter 2020-04-16 11:36 ` [PATCH 3/4] media: admin-guide: Add an introduction chapter Mauro Carvalho Chehab @ 2020-04-17 9:00 ` Hans Verkuil 0 siblings, 0 replies; 7+ messages in thread From: Hans Verkuil @ 2020-04-17 9:00 UTC (permalink / raw) To: Mauro Carvalho Chehab, Linux Media Mailing List On 16/04/2020 13:36, Mauro Carvalho Chehab wrote: > The media's admin guide is currently just a group of > not-connected docs. > > Add an introduction chapter for it to start making sense > to a random reader. > > Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> > --- > Documentation/admin-guide/media/index.rst | 2 ++ > Documentation/admin-guide/media/intro.rst | 25 +++++++++++++++++++++++ > 2 files changed, 27 insertions(+) > create mode 100644 Documentation/admin-guide/media/intro.rst > > diff --git a/Documentation/admin-guide/media/index.rst b/Documentation/admin-guide/media/index.rst > index 6e5e6bdb6d4b..f79d4f1e05ba 100644 > --- a/Documentation/admin-guide/media/index.rst > +++ b/Documentation/admin-guide/media/index.rst > @@ -34,6 +34,8 @@ Video4Linux (V4L) driver-specific documentation > :maxdepth: 5 > :numbered: > > + intro > + > cardlist > > v4l-with-ir > diff --git a/Documentation/admin-guide/media/intro.rst b/Documentation/admin-guide/media/intro.rst > new file mode 100644 > index 000000000000..9b6399fd904f > --- /dev/null > +++ b/Documentation/admin-guide/media/intro.rst > @@ -0,0 +1,25 @@ > +============ > +Introduction > +============ > + > +The media subsystem consists on Linux support for several different types > +of devices: I'd rephrase this to: The media subsystem supports several different types of devices: > + > +- Audio and video grabbers; I'd say 'Video and audio grabbers' since video is the main use-case. > +- PC and Laptop Cameras; I'd replace 'PC' with 'Webcams'. > +- Complex cameras found on Embedded hardware; > +- Analog and digital TV; > +- HDMI Customer Electronics Control (CEC); Customer -> Consumer > +- Multi-touch input devices; > +- Remote Controllers; > +- Media encoders and decoders. Add: - AM/FM Radio and RDS receivers/transmitters - Software Defines Radio receivers/transmitters > + > +Due to the diversity of devices, the subsystem provides several different > +APIs: > + > +- Remote Controller API; > +- HDMI CEC API; > +- Video4Linux API; > +- Media controller API; > +- Video4Linux Request API (experimental); I think this can be dropped since it is part of the Media controller API. It's not a separate API as such. > +- Digital TV API (also known as DVB API). > Regards, Hans ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 4/4] media: admin-guide: add a generic building guide 2020-04-16 11:36 [PATCH 0/4] Improve media admin-guide Mauro Carvalho Chehab ` (2 preceding siblings ...) 2020-04-16 11:36 ` [PATCH 3/4] media: admin-guide: Add an introduction chapter Mauro Carvalho Chehab @ 2020-04-16 11:36 ` Mauro Carvalho Chehab 2020-04-17 9:21 ` Hans Verkuil 3 siblings, 1 reply; 7+ messages in thread From: Mauro Carvalho Chehab @ 2020-04-16 11:36 UTC (permalink / raw) To: Linux Media Mailing List; +Cc: Mauro Carvalho Chehab, Hans Verkuil Several of the existing documents under the media admin-guide contain build procedures. Add an specific chapter describing it. This document was partially inspired on the modifications I made to the bttv.rst file. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> --- Documentation/admin-guide/media/building.rst | 357 +++++++++++++++++++ Documentation/admin-guide/media/index.rst | 1 + 2 files changed, 358 insertions(+) create mode 100644 Documentation/admin-guide/media/building.rst diff --git a/Documentation/admin-guide/media/building.rst b/Documentation/admin-guide/media/building.rst new file mode 100644 index 000000000000..c898e3a981c1 --- /dev/null +++ b/Documentation/admin-guide/media/building.rst @@ -0,0 +1,357 @@ +.. SPDX-License-Identifier: GPL-2.0 + +=================================== +Building support for a media device +=================================== + +The first step is to download the Kernel's source code, either via a +distribution-specific source file or via the Kernel's main git tree\ [1]_. + +Please notice, however, that, if: + +- you're a braveheart and want to experiment with new stuff; +- if you want to report a bug; +- if you're developing new patches + +you should use the main media development tree ``master`` branch: + + https://git.linuxtv.org/media_tree.git/ + +In this case, you may find some useful information at the +`LinuxTv wiki pages <https://linuxtv.org/wiki>`_: + + https://linuxtv.org/wiki/index.php/How_to_Obtain,_Build_and_Install_V4L-DVB_Device_Drivers + +.. [1] The upstream Linux Kernel development tree is located at + + https://git.kernel.org/pub/scm/li nux/kernel/git/torvalds/linux.git/ + +Configuring the Linux Kernel +============================ + +You can access a menu of Kernel building options with:: + + $ make menuconfig + +Then, select all desired options and exit it, saving the configuration. + +The changed configuration will be at the ``.config`` file. It would +look like:: + + ... + # CONFIG_RC_CORE is not set + # CONFIG_CEC_CORE is not set + CONFIG_MEDIA_SUPPORT=m + CONFIG_MEDIA_SUPPORT_FILTER=y + ... + +The media subsystem is controlled by those menu configuration options:: + + Device Drivers ---> + <M> Remote Controller support ---> + [ ] HDMI CEC RC integration + [ ] Enable CEC error injection support + [*] HDMI CEC drivers ---> + <*> Multimedia support ---> + +The ``Remote Controller support`` option enables the core support for +remote controllers\ [2]_. + +The ``HDMI CEC RC integration`` option enables integration of HDMI CEC +with Linux, allowing to receive data via HDMI CEC as if it were produced +by a remote controller directly connected to the machine. + +The ``HDMI CEC drivers`` option allow selecting platform and USB drivers +that receives and/or transmits CEC codes via HDMI interfaces\ [3]_. + +The last option (``Multimedia support``) enables support for cameras, +audio/video grabbers and TV. + +The media subsystem support can either be built together with the main +Kernel or as a module. For most use cases, it is preferred to have it +built as modules. + +.. note:: + + Instead of using a menu, the Kernel provides a script with allows + enabling configuration options directly. To enable media support + and remote controller support using Kernel modules, you could use:: + + $ scripts/config -m RC_CORE + $ scripts/config -m MEDIA_SUPPORT + +.. [2] ``Remote Controller support`` should also be enabled if you + want to use some TV card drivers that may depend on the remote + controller core support. + +.. [3] Please notice that the DRM subsystem also have drivers for GPUs + that use the media HDMI CEC support. + + Those GPU-specific drivers are selected via the ``Graphics support`` + menu, under ``Device Drivers``. + + When a GPU driver supports supports HDMI CEC, it will automatically + enable the CEC core support at the media subsystem. + +Media dependencies +------------------ + +It should be noticed that enabling the above from a clean config is +usually not enough. The media subsystem depends on several other Linux +core support in order to work. + +For example, most media devices use a serial communication bus in +order to talk with some peripherals. Such bus is called I²C +(Inter-Integrated Circuit). In order to be able to build support +for such hardware, the I²C bus support should be enabled, either via +menu or with:: + + ./scripts/config -m I2C + +Another example: the remote controller core requires support for +input devices, with can be enabled with:: + + ./scripts/config -m INPUT + +Other core functionality may also be needed (like PCI and/or USB support), +depending on the specific driver(s) you would like to enable. + +Enabling Remote Controller Support +---------------------------------- + +The remote controller menu allows selecting drivers for specific devices. +It's menu looks like this:: + + --- 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 ---> + +The ``Compile Remote Controller keymap modules`` option creates key maps for +several popular remote controllers. + +The ``LIRC user interface`` option adds enhanced functionality when using the +``lirc`` program, by enabling an API that allows userspace to receive raw data +from remote controllers. + +The ``Support for eBPF programs attached to lirc devices`` option allows +the usage of special programs (called eBPF) that would allow aplications +to add extra remote controller decoding functionality to the Linux Kernel. + +The ``Remote controller decoders`` option allows selecting the +protocols that will be recognized by the Linux Kernel. Except if you +want to disable some specific decoder, it is suggested to keep all +sub-options enabled. + +The ``Remote Controller devices`` allows you to select the drivers +that would be needed to support your device. + +The same configuration can also be set via the ``script/config`` +script. So, for instance, in order to support the ITE remote controller +driver (found on Intel NUCs and on some ASUS x86 desktops), you could do:: + + $ 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 + +Enabling HDMI CEC Support +------------------------- + +The HDMI CEC support is set automatically when a driver requires it. So, +all you need to do is to enable support either for a graphics card +that needs it or by one of the existing HDMI drivers. + +The HDMI-specific drivers are available at the ``HDMI CEC drivers`` +menu\ [4]_:: + + --- 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 + +.. [4] The above contents is just an example. The actual options for + HDMI devices depends on the system's architecture and may vary + on new Kernels. + +Enabling Media Support +---------------------- + +The Media menu has a lot more options than the remote controller menu. +Once selected, you should see the following options:: + + --- 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 ---> + +Except if you know exactly what you're doing, or if you want to build +a driver for a SoC platform, it is strongly recommended to keep the +``Autoselect ancillary drivers`` option turned on, as it will auto-select +the needed I²C ancillary drivers. + +There are now two ways to select media device drivers, as described +below. + +``Filter media drivers`` menu +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This menu is meant to easy setup for PC and Laptop hardware. It works +by letting the user to specify what kind of media drivers are desired, +with those options:: + + [ ] Cameras and video grabbers + [ ] Analog TV + [ ] Digital TV + [ ] AM/FM radio receivers/transmitters + [ ] Software defined radio + [ ] Platform-specific devices + [ ] Test drivers + +So, if you want to add support to a camera or video grabber only, +select just the first option. Multiple options are allowed. + +Once the options on this menu are selected, the building system will +auto-select the needed core drivers in order to support the selected +functionality. + +.. note:: + + Most TV cards are hybrid: they support both Analog TV and Digital TV. + + If you have an hybrid card, you may need to enable both ``Analog TV`` + and ``Digital TV`` at the menu. + +When using this option, the defaults for the the media support core +functionality are usually good enough to provide the basic functionality +for the driver. Yet, you could manually enable some desired extra (optional) +functionality using the settings under each of the following +``Media support`` sub-menus:: + + Media core support ---> + Video4Linux options ---> + Media controller options ---> + Digital TV options ---> + HDMI CEC options ---> + +Once you select the desired filters, the drivers that matches the filtering +criteria will be available at the ``Media support->Media drivers`` sub-menu. + +``Media Core Support`` menu without filtering +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If you disable the ``Filter media drivers`` menu, all drivers available +for your system whose dependencies are met should be shown at the +``Media drivers`` menu. + +Please notice, however, that you should first ensure that the +``Media Core Support`` menu has all the core functionality your drivers +would need, as otherwise the corresponding device drivers won't be shown. + +Example +------- + +In order to enable modular support for one of the boards listed on +:doc:`this table <cx231xx-cardlist>`, with modular media core modules, the +``.config`` file should contain those lines:: + + CONFIG_MODULES=y + CONFIG_USB=y + CONFIG_I2C=y + CONFIG_INPUT=y + CONFIG_RC_CORE=m + CONFIG_MEDIA_SUPPORT=m + CONFIG_MEDIA_SUPPORT_FILTER=y + CONFIG_MEDIA_ANALOG_TV_SUPPORT=y + CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y + CONFIG_MEDIA_USB_SUPPORT=y + CONFIG_VIDEO_CX231XX=y + CONFIG_VIDEO_CX231XX_DVB=y + +Building and installing a new Kernel +==================================== + +Once the ``.config`` file has everything needed, all it takes to build +is to run the ``make`` command:: + + $ make + +And then install the new Kernel and its modules:: + + $ sudo make modules_install + $ sudo make install + +Building just the new media drivers and core +============================================ + +Running a new development Kernel from the development tree is usually risky, +because it may have experimental changes that may have bugs. So, there are +some ways to build just the new drivers, using alternative trees. + +There is the `Linux Kernel backports project +<https://backports.wiki.kernel.org/index.php/Main_Page>`_, with contains +newer drivers meant to be compiled against stable Kernels. + +The LinuxTV developers, with are responsible for maintaining the media +subsystem also maintains a backport tree, with just the media drivers +daily updated from the newest kernel. Such tree is available at: + +https://git.linuxtv.org/media_build.git/ + +It should be noticed that, while it should be relatively safe to use the +``media_build`` tree for testing purposes, there are not warranties that +it would work (or even build) on a random Kernel. This tree is maintained +using a "best-efforts" principle, as time permits us to fix issues there. + +If you notice anything wrong on it, feel free to submit patches at the +Linux media subsystem's mailing list: media@vger.kernel.org. Please +add ``[PATCH media-build]`` at the e-mail's subject if you submit a new +patch for the media-build. + +Before using it, you should run:: + + $ ./build + +.. note:: + + 1) you may need to run it twice if the ``media-build`` tree gets + updated; + 2) you may need to do a ``make distclean`` if you had built it + in the past for a different Kernel version than the one you're + currently using; + 3) by default, it will use the same config options for media as + the ones defined on the Kernel you're running. + +In order to select different drivers or different config options, +use:: + + $ make menuconfig + +Then, you can build and install the new drivers:: + + $ make && sudo make install + +This will override the previous media drivers that your Kernel were +using. diff --git a/Documentation/admin-guide/media/index.rst b/Documentation/admin-guide/media/index.rst index f79d4f1e05ba..ecaf28effa6a 100644 --- a/Documentation/admin-guide/media/index.rst +++ b/Documentation/admin-guide/media/index.rst @@ -35,6 +35,7 @@ Video4Linux (V4L) driver-specific documentation :numbered: intro + building cardlist -- 2.25.2 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 4/4] media: admin-guide: add a generic building guide 2020-04-16 11:36 ` [PATCH 4/4] media: admin-guide: add a generic building guide Mauro Carvalho Chehab @ 2020-04-17 9:21 ` Hans Verkuil 0 siblings, 0 replies; 7+ messages in thread From: Hans Verkuil @ 2020-04-17 9:21 UTC (permalink / raw) To: Mauro Carvalho Chehab, Linux Media Mailing List On 16/04/2020 13:36, Mauro Carvalho Chehab wrote: > Several of the existing documents under the media admin-guide > contain build procedures. > > Add an specific chapter describing it. This document was > partially inspired on the modifications I made to the bttv.rst > file. > > Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> > --- > Documentation/admin-guide/media/building.rst | 357 +++++++++++++++++++ > Documentation/admin-guide/media/index.rst | 1 + > 2 files changed, 358 insertions(+) > create mode 100644 Documentation/admin-guide/media/building.rst > > diff --git a/Documentation/admin-guide/media/building.rst b/Documentation/admin-guide/media/building.rst > new file mode 100644 > index 000000000000..c898e3a981c1 > --- /dev/null > +++ b/Documentation/admin-guide/media/building.rst > @@ -0,0 +1,357 @@ > +.. SPDX-License-Identifier: GPL-2.0 > + > +=================================== > +Building support for a media device > +=================================== > + > +The first step is to download the Kernel's source code, either via a > +distribution-specific source file or via the Kernel's main git tree\ [1]_. > + > +Please notice, however, that, if: Remove comma after 'that' > + > +- you're a braveheart and want to experiment with new stuff; > +- if you want to report a bug; > +- if you're developing new patches > + > +you should use the main media development tree ``master`` branch: > + > + https://git.linuxtv.org/media_tree.git/ > + > +In this case, you may find some useful information at the > +`LinuxTv wiki pages <https://linuxtv.org/wiki>`_: > + > + https://linuxtv.org/wiki/index.php/How_to_Obtain,_Build_and_Install_V4L-DVB_Device_Drivers > + > +.. [1] The upstream Linux Kernel development tree is located at > + > + https://git.kernel.org/pub/scm/li nux/kernel/git/torvalds/linux.git/ Spurious spaces in the middle of 'linux'?! > + > +Configuring the Linux Kernel > +============================ > + > +You can access a menu of Kernel building options with:: > + > + $ make menuconfig > + > +Then, select all desired options and exit it, saving the configuration. Comma after 'Then' is not needed. > + > +The changed configuration will be at the ``.config`` file. It would > +look like:: > + > + ... > + # CONFIG_RC_CORE is not set > + # CONFIG_CEC_CORE is not set > + CONFIG_MEDIA_SUPPORT=m > + CONFIG_MEDIA_SUPPORT_FILTER=y > + ... > + > +The media subsystem is controlled by those menu configuration options:: those -> these > + > + Device Drivers ---> > + <M> Remote Controller support ---> > + [ ] HDMI CEC RC integration > + [ ] Enable CEC error injection support > + [*] HDMI CEC drivers ---> Looking at this I think it would be better if this would be just one submenu: "HDMI CEC support". And move the two CEC options above it into that submenu. > + <*> Multimedia support ---> > + > +The ``Remote Controller support`` option enables the core support for > +remote controllers\ [2]_. > + > +The ``HDMI CEC RC integration`` option enables integration of HDMI CEC > +with Linux, allowing to receive data via HDMI CEC as if it were produced > +by a remote controller directly connected to the machine. > + > +The ``HDMI CEC drivers`` option allow selecting platform and USB drivers > +that receives and/or transmits CEC codes via HDMI interfaces\ [3]_. > + > +The last option (``Multimedia support``) enables support for cameras, > +audio/video grabbers and TV. > + > +The media subsystem support can either be built together with the main > +Kernel or as a module. For most use cases, it is preferred to have it Kernel -> kernel It's used like that elsewhere as well, it should just be lower-case 'kernel'. > +built as modules. > + > +.. note:: > + > + Instead of using a menu, the Kernel provides a script with allows > + enabling configuration options directly. To enable media support > + and remote controller support using Kernel modules, you could use:: > + > + $ scripts/config -m RC_CORE > + $ scripts/config -m MEDIA_SUPPORT > + > +.. [2] ``Remote Controller support`` should also be enabled if you > + want to use some TV card drivers that may depend on the remote > + controller core support. > + > +.. [3] Please notice that the DRM subsystem also have drivers for GPUs have -> has GPUs -> HDMI interfaces (CEC isn't part of a GPU, it is tied to HDMI interfaces) > + that use the media HDMI CEC support. > + > + Those GPU-specific drivers are selected via the ``Graphics support`` > + menu, under ``Device Drivers``. > + > + When a GPU driver supports supports HDMI CEC, it will automatically GPU -> HDMI > + enable the CEC core support at the media subsystem. > + > +Media dependencies > +------------------ > + > +It should be noticed that enabling the above from a clean config is > +usually not enough. The media subsystem depends on several other Linux > +core support in order to work. > + > +For example, most media devices use a serial communication bus in > +order to talk with some peripherals. Such bus is called I²C Such -> Such a > +(Inter-Integrated Circuit). In order to be able to build support > +for such hardware, the I²C bus support should be enabled, either via > +menu or with:: > + > + ./scripts/config -m I2C > + > +Another example: the remote controller core requires support for > +input devices, with can be enabled with:: > + > + ./scripts/config -m INPUT > + > +Other core functionality may also be needed (like PCI and/or USB support), > +depending on the specific driver(s) you would like to enable. > + > +Enabling Remote Controller Support > +---------------------------------- > + > +The remote controller menu allows selecting drivers for specific devices. > +It's menu looks like this:: It's -> Its > + > + --- 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 ---> > + > +The ``Compile Remote Controller keymap modules`` option creates key maps for > +several popular remote controllers. > + > +The ``LIRC user interface`` option adds enhanced functionality when using the > +``lirc`` program, by enabling an API that allows userspace to receive raw data > +from remote controllers. > + > +The ``Support for eBPF programs attached to lirc devices`` option allows > +the usage of special programs (called eBPF) that would allow aplications usage -> use aplications -> applications > +to add extra remote controller decoding functionality to the Linux Kernel. > + > +The ``Remote controller decoders`` option allows selecting the > +protocols that will be recognized by the Linux Kernel. Except if you > +want to disable some specific decoder, it is suggested to keep all > +sub-options enabled. > + > +The ``Remote Controller devices`` allows you to select the drivers > +that would be needed to support your device. > + > +The same configuration can also be set via the ``script/config`` > +script. So, for instance, in order to support the ITE remote controller > +driver (found on Intel NUCs and on some ASUS x86 desktops), you could do:: > + > + $ 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 > + > +Enabling HDMI CEC Support > +------------------------- > + > +The HDMI CEC support is set automatically when a driver requires it. So, > +all you need to do is to enable support either for a graphics card > +that needs it or by one of the existing HDMI drivers. > + > +The HDMI-specific drivers are available at the ``HDMI CEC drivers`` > +menu\ [4]_:: > + > + --- 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 I wouldn't copy lists of available drivers in this document: it will quickly become outdated. Documenting high-level configs makes sense, but listing drivers doesn't IMHO. > + > +.. [4] The above contents is just an example. The actual options for > + HDMI devices depends on the system's architecture and may vary > + on new Kernels. > + > +Enabling Media Support > +---------------------- > + > +The Media menu has a lot more options than the remote controller menu. > +Once selected, you should see the following options:: > + > + --- 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 ---> > + > +Except if you know exactly what you're doing, or if you want to build Except if -> Unless > +a driver for a SoC platform, it is strongly recommended to keep the > +``Autoselect ancillary drivers`` option turned on, as it will auto-select > +the needed I²C ancillary drivers. > + > +There are now two ways to select media device drivers, as described > +below. > + > +``Filter media drivers`` menu > +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > + > +This menu is meant to easy setup for PC and Laptop hardware. It works > +by letting the user to specify what kind of media drivers are desired, > +with those options:: Drop "with those options", so 'desired,' becomes 'desired::'. > + > + [ ] Cameras and video grabbers > + [ ] Analog TV > + [ ] Digital TV > + [ ] AM/FM radio receivers/transmitters > + [ ] Software defined radio > + [ ] Platform-specific devices > + [ ] Test drivers > + > +So, if you want to add support to a camera or video grabber only, > +select just the first option. Multiple options are allowed. > + > +Once the options on this menu are selected, the building system will > +auto-select the needed core drivers in order to support the selected > +functionality. > + > +.. note:: > + > + Most TV cards are hybrid: they support both Analog TV and Digital TV. > + > + If you have an hybrid card, you may need to enable both ``Analog TV`` > + and ``Digital TV`` at the menu. > + > +When using this option, the defaults for the the media support core > +functionality are usually good enough to provide the basic functionality > +for the driver. Yet, you could manually enable some desired extra (optional) > +functionality using the settings under each of the following > +``Media support`` sub-menus:: > + > + Media core support ---> This option is only available without filtering, but this example is with filtering on, so this menu item doesn't exist. > + Video4Linux options ---> > + Media controller options ---> > + Digital TV options ---> > + HDMI CEC options ---> This last line is outdated since HDMI CEC was moved out of this menu. > + > +Once you select the desired filters, the drivers that matches the filtering > +criteria will be available at the ``Media support->Media drivers`` sub-menu. > + > +``Media Core Support`` menu without filtering > +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > + > +If you disable the ``Filter media drivers`` menu, all drivers available > +for your system whose dependencies are met should be shown at the > +``Media drivers`` menu. > + > +Please notice, however, that you should first ensure that the > +``Media Core Support`` menu has all the core functionality your drivers > +would need, as otherwise the corresponding device drivers won't be shown. FYI: if I disable items in this Core support menu I see all sorts of messages appearing. Also, if Video4Linux core is enabled, then I can't change the 'Media Controller API' menu item. Only if I disable Video4Linux core can I change that MC API option. That can't be right, can it? > + > +Example > +------- > + > +In order to enable modular support for one of the boards listed on > +:doc:`this table <cx231xx-cardlist>`, with modular media core modules, the > +``.config`` file should contain those lines:: > + > + CONFIG_MODULES=y > + CONFIG_USB=y > + CONFIG_I2C=y > + CONFIG_INPUT=y > + CONFIG_RC_CORE=m > + CONFIG_MEDIA_SUPPORT=m > + CONFIG_MEDIA_SUPPORT_FILTER=y > + CONFIG_MEDIA_ANALOG_TV_SUPPORT=y > + CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y > + CONFIG_MEDIA_USB_SUPPORT=y > + CONFIG_VIDEO_CX231XX=y > + CONFIG_VIDEO_CX231XX_DVB=y > + > +Building and installing a new Kernel > +==================================== > + > +Once the ``.config`` file has everything needed, all it takes to build > +is to run the ``make`` command:: > + > + $ make > + > +And then install the new Kernel and its modules:: > + > + $ sudo make modules_install > + $ sudo make install > + > +Building just the new media drivers and core > +============================================ > + > +Running a new development Kernel from the development tree is usually risky, > +because it may have experimental changes that may have bugs. So, there are > +some ways to build just the new drivers, using alternative trees. > + > +There is the `Linux Kernel backports project > +<https://backports.wiki.kernel.org/index.php/Main_Page>`_, with contains > +newer drivers meant to be compiled against stable Kernels. > + > +The LinuxTV developers, with are responsible for maintaining the media > +subsystem also maintains a backport tree, with just the media drivers > +daily updated from the newest kernel. Such tree is available at: > + > +https://git.linuxtv.org/media_build.git/ > + > +It should be noticed that, while it should be relatively safe to use the > +``media_build`` tree for testing purposes, there are not warranties that warranties -> guarantees > +it would work (or even build) on a random Kernel. This tree is maintained > +using a "best-efforts" principle, as time permits us to fix issues there. > + > +If you notice anything wrong on it, feel free to submit patches at the > +Linux media subsystem's mailing list: media@vger.kernel.org. Please > +add ``[PATCH media-build]`` at the e-mail's subject if you submit a new > +patch for the media-build. > + > +Before using it, you should run:: > + > + $ ./build > + > +.. note:: > + > + 1) you may need to run it twice if the ``media-build`` tree gets > + updated; > + 2) you may need to do a ``make distclean`` if you had built it > + in the past for a different Kernel version than the one you're > + currently using; > + 3) by default, it will use the same config options for media as > + the ones defined on the Kernel you're running. > + > +In order to select different drivers or different config options, > +use:: > + > + $ make menuconfig > + > +Then, you can build and install the new drivers:: > + > + $ make && sudo make install > + > +This will override the previous media drivers that your Kernel were > +using. > diff --git a/Documentation/admin-guide/media/index.rst b/Documentation/admin-guide/media/index.rst > index f79d4f1e05ba..ecaf28effa6a 100644 > --- a/Documentation/admin-guide/media/index.rst > +++ b/Documentation/admin-guide/media/index.rst > @@ -35,6 +35,7 @@ Video4Linux (V4L) driver-specific documentation > :numbered: > > intro > + building > > cardlist > > Regards, Hans ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-04-17 9:21 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-04-16 11:36 [PATCH 0/4] Improve media admin-guide Mauro Carvalho Chehab 2020-04-16 11:36 ` [PATCH 1/4] media: admin-guide: add a card list for cx231xx boards Mauro Carvalho Chehab 2020-04-16 11:36 ` [PATCH 2/4] media: admin-guide: update em28xx cardlist Mauro Carvalho Chehab 2020-04-16 11:36 ` [PATCH 3/4] media: admin-guide: Add an introduction chapter Mauro Carvalho Chehab 2020-04-17 9:00 ` Hans Verkuil 2020-04-16 11:36 ` [PATCH 4/4] media: admin-guide: add a generic building guide Mauro Carvalho Chehab 2020-04-17 9:21 ` Hans Verkuil
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.