All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH RFC 0/4] Basic support for 64-bit kernel and 32-bit userland
@ 2021-05-18 11:36 Thomas De Schampheleire
  2021-05-18 11:36 ` [Buildroot] [PATCH 1/4] arch: move definition of KERNEL_ARCH to Config.in.<arch> files Thomas De Schampheleire
                   ` (3 more replies)
  0 siblings, 4 replies; 18+ messages in thread
From: Thomas De Schampheleire @ 2021-05-18 11:36 UTC (permalink / raw)
  To: buildroot

From: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>

Hello,

Even though there are already cases where a 64-bit kernel is combined with
32-bit userland, like MIPS64n32, that Buildroot can support out-of-the-box,
there are other combinations that don't currently work.

At work, we have two such cases:
- 64-bit x86_64 kernel with 32-bit i386 userspace
- 64-bit aarch64 kernel with 32-bit arm userspace

This series adds basic support for these cases, with the limitation that the
user still needs to know what they are doing.

Patch 1 is a general improvement and can land even if you don't agree
with the rest.

Patch 2 handles the realization that 'KERNEL_ARCH' can mean two different
things, and that we need two separate variables.

Patch 3 makes it possible for users to specify the kernel architecture that
differs from the Buildroot notion of userspace architecture.

Patch 4 fixes the build of perf in this mixed 64-bit-kernel+32-bit-userspace
case.


As hinted above, users that would like to employ such scenarios still need to
know what they are doing:

- the correct value of BR2_KERNEL_ARCH_OVERRIDE is to be known by the user

- the toolchain should be capable of generating both 64-bit (kernel) output as
  well as 32-bit userspace output. This is typically done with a multilib
  toolchain, where the default output is 64-bit so that the kernel build does
  not require additional changes, while passing the correct '-mXXX' flag as
  BR2_TARGET_OPTIMIZATION for the userspace compilations.

- it is not possible to create one multilib toolchain that supports Aarch64 and
  (32-bit) ARM output. We have solved it by packaging two individual toolchains
  in one archive, with symlinks at top-level to the 32-bit toolchain, and
  some additional changes in Buildroot to make sure the 64-bit toolchain is
  used where needed (kernel, bootloader)

- BR2_KERNEL_64_USERLAND_32 is not automatically passed.


An alternative implementation would be to explicitly support certain
combinations, but this is less flexible.

Best regards,
Thomas



Thomas De Schampheleire (4):
  arch: move definition of KERNEL_ARCH to Config.in.<arch> files
  core: introduce NORMALIZED_ARCH as non-kernel replacement for
    KERNEL_ARCH
  core: introduce BR2_KERNEL_ARCH_OVERRIDE
  perf: fix compilation in case of i386 userspace with x86_64 kernel

 Makefile                                      | 22 +++++--------------
 arch/Config.in                                | 18 +++++++++++++++
 arch/Config.in.arc                            |  3 +++
 arch/Config.in.arm                            |  4 ++++
 arch/Config.in.csky                           |  3 +++
 arch/Config.in.m68k                           |  3 +++
 arch/Config.in.microblaze                     |  3 +++
 arch/Config.in.mips                           |  3 +++
 arch/Config.in.nds32                          |  3 +++
 arch/Config.in.nios2                          |  3 +++
 arch/Config.in.or1k                           |  3 +++
 arch/Config.in.powerpc                        |  3 +++
 arch/Config.in.riscv                          |  3 +++
 arch/Config.in.s390x                          |  3 +++
 arch/Config.in.sh                             |  3 +++
 arch/Config.in.sparc                          |  4 ++++
 arch/Config.in.x86                            |  4 ++++
 arch/Config.in.xtensa                         |  3 +++
 boot/barebox/barebox.mk                       | 10 ++++-----
 boot/uboot/uboot.mk                           |  6 ++---
 package/busybox/busybox.mk                    |  2 +-
 .../environment-setup/environment-setup.mk    |  2 +-
 package/kvmtool/kvmtool.mk                    |  4 ++--
 package/libselinux/libselinux.mk              |  2 +-
 package/linux-tools/linux-tool-perf.mk.in     |  7 ++++--
 .../linux-tools/linux-tool-selftests.mk.in    |  6 ++---
 package/olsr/olsr.mk                          |  4 ++--
 package/pciutils/pciutils.mk                  |  2 +-
 package/uboot-tools/uboot-tools.mk            | 10 ++++-----
 29 files changed, 104 insertions(+), 42 deletions(-)

-- 
2.26.3

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2022-01-15 19:45 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-18 11:36 [Buildroot] [PATCH RFC 0/4] Basic support for 64-bit kernel and 32-bit userland Thomas De Schampheleire
2021-05-18 11:36 ` [Buildroot] [PATCH 1/4] arch: move definition of KERNEL_ARCH to Config.in.<arch> files Thomas De Schampheleire
2022-01-13 20:48   ` Romain Naour
2021-05-18 11:36 ` [Buildroot] [PATCH 2/4] core: introduce NORMALIZED_ARCH as non-kernel replacement for KERNEL_ARCH Thomas De Schampheleire
2022-01-13 21:30   ` Romain Naour
2022-01-14 12:27     ` Thomas De Schampheleire
2022-01-15 14:55       ` Romain Naour
2021-05-18 11:36 ` [Buildroot] [PATCH 3/4] core: introduce BR2_KERNEL_ARCH_OVERRIDE Thomas De Schampheleire
2022-01-09 23:27   ` Romain Naour
2022-01-12 11:04     ` Thomas De Schampheleire
2022-01-12 19:10       ` Arnout Vandecappelle
2022-01-12 20:06         ` Romain Naour
2022-01-13 22:05   ` Romain Naour
2022-01-15 19:31     ` Thomas De Schampheleire
2022-01-15 19:45     ` Thomas De Schampheleire
2021-05-18 11:36 ` [Buildroot] [PATCH 4/4] perf: fix compilation in case of i386 userspace with x86_64 kernel Thomas De Schampheleire
2022-01-13 22:15   ` Romain Naour
2022-01-14  9:33     ` Thomas De Schampheleire

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.