[Buildroot] [RFC v1] libv4l: build utils only on MMU (with fork support) platforms

Peter Seiderer ps.report at gmx.net
Mon Jul 24 17:38:22 UTC 2017


Hello Hugues,

On Mon, 24 Jul 2017 08:08:45 +0000, Hugues FRUCHET <hugues.fruchet at st.com> wrote:

> Hi Peter,
> 
> Sorry, typo in patch, this one should work as expected.
> 
> Best regards,
> Hugues.
> 

Yes, the new version of the patch works:

	$ make libv4l
[...]
Applying 0010-configure.ac-disable-libv4l-if-no-fork.patch using patch:
[...]
compile time options summary
============================

    Host OS                    : linux-uclibc
    X11                        : no
    GL                         : no
    glu                        : no
    libjpeg                    :
    libudev                    : no
    pthread                    : yes
    fork                       : no
    QT version                 : none
    ALSA support               : no

    build dynamic libs         : yes
    build static libs          : no

    gconv                      : no

    libv4l                     : no
    dynamic libv4l             : yes
    v4l_plugins                : yes
    v4l_wrappers               : yes
    libdvbv5                   : no
    dvbv5-daemon               : no
    v4lutils                   : yes
    qv4l2                      : no
    v4l2-ctl uses libv4l       : yes
    v4l2-compliance uses libv4l: yes
[...]

	$ ls -ltr target/usr/bin/
[...]
-rwxr-xr-x 1 seiderer users 259172 Jul 24 19:29 decode_tm6000
-rwxr-xr-x 1 seiderer users  13988 Jul 24 19:29 ivtv-ctl
-rwxr-xr-x 1 seiderer users 198868 Jul 24 19:29 ir-ctl
-rwxr-xr-x 1 seiderer users  12240 Jul 24 19:29 cx18-ctl
-rwxr-xr-x 1 seiderer users 215068 Jul 24 19:29 ir-keytable
-rwxr-xr-x 1 seiderer users  53452 Jul 24 19:29 media-ctl
-rwxr-xr-x 1 seiderer users 206532 Jul 24 19:29 v4l2-compliance
-rwxr-xr-x 1 seiderer users 265676 Jul 24 19:29 v4l2-ctl
-rwxr-xr-x 1 seiderer users 188496 Jul 24 19:29 v4l2-sysfs-path
-rwxr-xr-x 1 seiderer users 154228 Jul 24 19:29 cec-ctl
-rwxr-xr-x 1 seiderer users 122344 Jul 24 19:29 cec-compliance
-rwxr-xr-x 1 seiderer users  69860 Jul 24 19:29 cec-follower

	$ ls -ltr target/usr/lib
drwxr-xr-x 3 seiderer users    4096 Jul 11 19:06 libv4l
-rwxr-xr-x 1 seiderer users   39408 Jul 11 19:06 libv4l2.so.0.0.0
-rwxr-xr-x 1 seiderer users   17032 Jul 11 19:06 libv4l1.so.0.0.0
-rwxr-xr-x 1 seiderer users  105432 Jul 11 19:06 libv4lconvert.so.0.0.0
-rwxr-xr-x 1 seiderer users   18384 Jul 11 19:06 libv4l2rds.so.0.0.0

Thanks for your efforts...

Regards,
Peter


> On 07/22/2017 11:36 PM, Peter Seiderer wrote:
> > Hello Hugues,
> > 
> > On Tue, 18 Jul 2017 09:08:18 +0000, Hugues FRUCHET <hugues.fruchet at st.com> wrote:
> > 
> >> Hi Peter,
> >>
> >> On 07/17/2017 08:09 PM, Peter Seiderer wrote:
> >>> Hello Hugues,
> >>>
> >>> On Mon, 17 Jul 2017 10:07:07 +0000, Hugues FRUCHET <hugues.fruchet at st.com> wrote:
> >>>
> >>>> Hi Peter,
> >>>>
> >>>> I have tested on STM32 platform running Cortex F family having no MMU,
> >>>> shared libraries are disabled (no dlopen) and no fork supported on our
> >>>> setup.
> >>>>
> >>>> libv4lconvert should not have been built at all, because entire lib/
> >>>> folder build is conditional to shared library support:
> >>>> * configure.ac
> >>>> AM_CONDITIONAL([WITH_LIBV4L],       [test x$enable_libv4l    != xno -a
> >>>> x$enable_shared != xno])
> >>>> * Makefile.am
> >>>> [...]
> >>>> +if WITH_LIBV4L
> >>>> +SUBDIRS += lib
> >>>> +endif
> >>>
> >>> A little bit confused, one of the patches you introduced changed it to:
> >>>
> >>> - without WITH_LIBV4L: no libv4l libraries at all
> >>> - without WITH_DYN_LIBV4L: only static libraries, no dynamic libraries
> >>>
> >>> And from configure --help:
> >>>
> >>>     --disable-libv4l        disable libv4l compilation
> >>>     --disable-dyn-libv4l    disable dynamic libv4l support
> >>
> >> This package is named "libv4l" in buildroot but repo name is "v4l-utils"
> >> which contains:
> >> 1) some library plugins on top of V4L kernel interface in order to
> >> intercept user calls and hook/convert to the appropriate kernel call.
> >> => so called "libv4l" and located in "lib/" folder
> >> 2) some utilities located in "utils/" folder, such as the V4L compliancy
> >> tool "v4l2-compliance" or the CEC compliancy tool "cec-compliance" which
> >> are calling either the libv4l interface (default), the libv4l interface
> >> but statically linked inside utilities (--disable-dyn-libv4l) or the V4L
> >> kernel interface directly (--disable-libv4l).
> >> Hope that helps to better understand the options.
> >>
> >>>
> >>>>
> >>>> But checking your log I see that --enable-shared is set, so it seems
> >>>> that you are supporting shared libraries on no-MMU platform but without
> >>>> fork() support, is my understanding correct ?
> >>>>
> >>>
> >>> Yes...
> >>>
> >>>> What you can do to fix build is to force disabling of libs inside libv4l
> >>>> package:
> >>>>
> >>>> package/libv4l/libv4l.mk
> >>>> +ifeq ($(BR2_USE_MMU),)
> >>>> +LIBV4L_CONF_OPTS += --disable-libv4l
> >>>> +endif
> >>>
> >>> Works, but feels wrong: A package named libv4l enabled and building/installing
> >>> nothing (except when LIBV4L_UTILS is enabled)...
> >>
> >> Right.
> >> The aim of the no-MMU dependency removal patchset was to enable build of
> >> "utils" even on no-MMU platform. This is required to build at least the
> >> 2 mandatory compliancy tools:
> >> - v4l-compliance: its test report is required by V4L maintainers and is
> >> to be attached to the cover letter of any V4L driver pushed upstream.
> >> - cec-compliance: the same for CEC drivers.
> >>
> >>
> >> Please note that you cannot use the libv4l plugins mechanism without
> >> having fork() support, see libv4lconvert/helper.c,
> >> v4lconvert_helper_start().
> > 
> > Yes, but only libv4lconvert needs fork, all other libraries not...,
> > without fork support only libv4lconvert (and all dependent utils)
> > should not be built...
> > 
> >> Means that only V4L utilities can be currently supported on no-MMU
> >> platforms.
> >>
> >> Back to your exact build issue, the best fix on my opinion is to add a
> >> dependency on fork() symbol in configure.ac instead of the one proposed
> >> in libv4l.mk, find attached a patch proposal.
> > 
> > Patch did not work:
> > 
> > 	$ make libv4l
> > [...]
> > compile time options summary
> > ============================
> > 
> >      Host OS                    : linux-uclibc
> >      X11                        : no
> >      GL                         : no
> >      glu                        : no
> >      libjpeg                    :
> >      libudev                    : no
> >      pthread                    : yes
> >      fork                       : no
> >      QT version                 : none
> >      ALSA support               : no
> > 
> >      build dynamic libs         : yes
> >      build static libs          : no
> > 
> >      gconv                      : no
> > 
> >      libv4l                     : yes
> >      dynamic libv4l             : yes
> >      v4l_plugins                : yes
> >      v4l_wrappers               : yes
> >      libdvbv5                   : no
> >      dvbv5-daemon               : no
> >      v4lutils                   : yes
> >      qv4l2                      : no
> >      v4l2-ctl uses libv4l       : yes
> >      v4l2-compliance uses libv4l: yes
> > [...]
> > helper.c: In function ‘v4lconvert_helper_start’:
> > helper.c:64:25: warning: implicit declaration of function ‘fork’ [-Wimplicit-function-declaration]
> >    data->decompress_pid = fork();
> >                           ^~~~
> > [...]
> >    CXXLD    v4l2-compliance
> > .../build_bfin_libv4l_fix_fork_001/build/libv4l-1.12.5/lib/libv4lconvert/.libs/libv4lconvert.so: undefined reference to `fork'
> > collect2: error: ld returned 1 exit status
> > 
> > Regards,
> > Peter
> > 
> > 
> >>
> >>
> >> Regards,
> >> Hugues.
> >>>
> >>> Regards,
> >>> Peter
> >>>
> >>>>
> >>>> Hoping that helps.
> >>>>
> >>>> Best regards,
> >>>> Hugues.
> >>>>
> >>>> On 07/11/2017 07:26 PM, Peter Seiderer wrote:
> >>>>> Fixes [1]:
> >>>>>
> >>>>>        CXXLD    v4l2-compliance
> >>>>>      .../output/build/libv4l-1.12.5/lib/libv4lconvert/.libs/libv4lconvert.so: undefined reference to `fork'
> >>>>>      collect2: error: ld returned 1 exit status
> >>>>>
> >>>>> [1] http://autobuild.buildroot.net/results/7e8/7e8fbd99a8c091d7bbeedd16066297682bbe29fe
> >>>>>
> >>>>> Signed-off-by: Peter Seiderer <ps.report at gmx.net>
> >>>>> ---
> >>>>> The libv4l build for noMMU platforms was enabled with commit 'package/libv4l:
> >>>>> allow build of v4l2 utilities on noMMU platforms' (see [2]). But libv4lconvert uses
> >>>>> fork internally, so all utils linking against fail to build. Fix this by disabling
> >>>>> the utils on noMMU platforms (so keep building all libraries).
> >>>>>
> >>>>> Alternatives would be:
> >>>>>
> >>>>> - disable libv4l on all noMMU platforms (not only the utils), revert a part
> >>>>>      of commit [2]
> >>>>>
> >>>>> - create a patch to disable only libv4lconvert (and all dependend utils)
> >>>>>      on noMMU platforms
> >>>>>
> >>>>> [2] https://git.buildroot.net/buildroot/commit/?id=f837251785e9389f53d695ddb8a094707865171b
> >>>>> ---
> >>>>>     package/libv4l/Config.in | 1 +
> >>>>>     1 file changed, 1 insertion(+)
> >>>>>
> >>>>> diff --git a/package/libv4l/Config.in b/package/libv4l/Config.in
> >>>>> index e7f78dc70f..61c290f251 100644
> >>>>> --- a/package/libv4l/Config.in
> >>>>> +++ b/package/libv4l/Config.in
> >>>>> @@ -19,6 +19,7 @@ comment "libv4l JPEG support not enabled"
> >>>>>     
> >>>>>     config BR2_PACKAGE_LIBV4L_UTILS
> >>>>>     	bool "v4l-utils tools"
> >>>>> +	depends on BR2_USE_MMU # fork(), used in libv4lconvert linked by various utils eg. v4l2-compliance
> >>>>>     	help
> >>>>>     	  v4l-utils is a collection of various video4linux and DVB utilities.
> >>>>>     	  Enable this if you want to build the following tools:
> >>>>>
> >>>> _______________________________________________
> >>>> buildroot mailing list
> >>>> buildroot at busybox.net
> >>>> http://lists.busybox.net/mailman/listinfo/buildroot
> >>>
> > 




More information about the buildroot mailing list