10 Aug, 2020

1 commit

  • To build host programs, you need to add the program names to 'hostprogs'
    to use the necessary build rule, but it is not enough to build them
    because there is no dependency.

    There are two types of host programs: built as the prerequisite of
    another (e.g. gen_crc32table in lib/Makefile), or always built when
    Kbuild visits the Makefile (e.g. genksyms in scripts/genksyms/Makefile).

    The latter is typical in Makefiles under scripts/, which contains host
    programs globally used during the kernel build. To build them, you need
    to add them to both 'hostprogs' and 'always-y'.

    This commit adds hostprogs-always-y as a shorthand.

    The same applies to user programs. net/bpfilter/Makefile builds
    bpfilter_umh on demand, hence always-y is unneeded. In contrast,
    programs under samples/ are added to both 'userprogs' and 'always-y'
    so they are always built when Kbuild visits the Makefiles.

    userprogs-always-y works as a shorthand.

    Signed-off-by: Masahiro Yamada
    Acked-by: Miguel Ojeda

    Masahiro Yamada
     

14 Jun, 2020

1 commit


11 Jun, 2020

1 commit

  • Even after commit c624adc9cb6e ("samples: fix binderfs sample"), this
    sample is never compiled.

    'hostprogs' teaches Kbuild that this is a host program, but not enough
    to order to compile it. You must add it to 'always-y' to really compile
    it.

    Since this sample has never been compiled in upstream, various issues
    are left unnoticed.

    [1] compilers without are still widely used

    is only available since commit c13295ad219d
    ("binderfs: rename header to binderfs.h"), i.e., Linux 5.0

    If your compiler is based on UAPI headers older than Linux 5.0, you
    will see the following error:

    samples/binderfs/binderfs_example.c:16:10: fatal error: linux/android/binderfs.h: No such file or directory
    #include
    ^~~~~~~~~~~~~~~~~~~~~~~~~~
    compilation terminated.

    You cannot rely on compilers having such a new header.

    The common approach is to install UAPI headers of this kernel into
    usr/include, and then add it to the header search path.

    I added 'depends on HEADERS_INSTALL' in Kconfig, and '-I usr/include'
    compiler flag in Makefile.

    [2] compile the sample for target architecture

    Because headers_install works for the target architecture, only the
    native compiler was able to build sample code that requires
    '-I usr/include'.

    Commit 7f3a59db274c ("kbuild: add infrastructure to build userspace
    programs") added the new syntax 'userprogs' to compile user-space
    programs for the target architecture.

    Use it, and then 'ifndef CROSS_COMPILE' will go away.

    I added 'depends on CC_CAN_LINK' because $(CC) is not necessarily
    capable of linking user-space programs.

    [3] use subdir-y to descend into samples/binderfs

    Since this directory does not contain any kernel-space code, it has no
    point in generating built-in.a or modules.order.

    Replace obj-$(CONFIG_...) with subdir-$(CONFIG_...).

    [4] -Wunused-variable warning

    If I compile this, I see the following warning.

    samples/binderfs/binderfs_example.c: In function 'main':
    samples/binderfs/binderfs_example.c:21:9: warning: unused variable 'len' [-Wunused-variable]
    21 | size_t len;
    | ^~~

    I removed the unused 'len'.

    [5] CONFIG_ANDROID_BINDERFS is not required

    Since this is a user-space standalone program, it is independent of
    the kernel configuration.

    Remove 'depends on ANDROID_BINDERFS'.

    Fixes: 9762dc1432e1 ("samples: add binderfs sample program")
    Fixes: c624adc9cb6e ("samples: fix binderfs sample")
    Signed-off-by: Masahiro Yamada
    Acked-by: Christian Brauner

    Masahiro Yamada
     

05 May, 2020

1 commit

  • A routine check for misspelled Kconfig symbols showed on instance
    from last year, the correct symbol name is CONFIG_ANDROID_BINDERFS,
    not CONFIG_CONFIG_ANDROID_BINDERFS, so the extra prefix must
    be removed in the Kconfig file to allow enabling the sample.

    As the actual sample fails to build as a kernel module, change the
    Makefile enough to get to build as a hostprog instead.

    Fixes: 9762dc1432e1 ("samples: add binderfs sample program")
    Signed-off-by: Arnd Bergmann
    Acked-by: Christian Brauner
    Link: https://lore.kernel.org/r/20200428212555.2806258-1-arnd@arndb.de
    Signed-off-by: Jonathan Corbet

    Arnd Bergmann
     

21 May, 2019

1 commit


15 Jan, 2019

1 commit

  • This adds a simple sample program mounting binderfs and adding, then
    removing a binder device. Hopefully, it will be helpful to users who want
    to know how binderfs is supposed to be used.

    Signed-off-by: Christian Brauner
    Signed-off-by: Jonathan Corbet

    Christian Brauner