[Buildroot] Best way of building for unknown architecture

Kevin Chadwick ma1l1ists at yahoo.co.uk
Fri Aug 24 15:58:20 UTC 2012


On Tue, 21 Aug 2012 09:35:27 +0200
Thomas Petazzoni wrote:

> 
> -mthumb can be added to the BR2_TARGET_OPTIMIZATION option, though at
> some point, it might be good to add an option to build ARM code with
> the ARM instruction set, or the Thumb instruction set, or the Thumb-2
> instruction set.
> 

I tried it with -pipe -mthumb and just -mthumb but I don't think it
worked because I get the following error.
________________________________________________________________________

AS lib/crt1.o
libc/sysdeps/linux/arm/crt1.S:1:0: error: target CPU does not support
ARM mode
make[1]: *** [lib/crt1.o] Error 1
make[1]: Leaving directory
`/usr/src/buildroot-toolchain/output/toolchain/uClibc-0.9.33.2'
make: ***
[/usr/src/buildroot-toolchain/output/toolchain/uClibc-0.9.33.2/.configured]
Error 2
________________________________________________________________________

This is the same error as when using the appropriate -mtune=cortex-m3
-march=armv7-m flags manually on the commandline without -mthumb. With
-mthumb added it then compiles fine from the commandline without the
"target cpu does not support ARM mode" error.
 

Is this relevent?

http://lists.uclibc.org/pipermail/buildroot/2008-December/011988.html


> 
> > I wanted to test it so I extracted a fresh buildroot and pointed the
> > external chain to the already built uclibc internal toolchain
> > (built before patching with above) where I had selected NO_MMU before
> > building.
> > 
> > When I ran make I got
> > 
> > Checking external toolchain settings
> > MMU support available in C library, please enable BR2_USE_MMU
> > 
> > This chip has no MMU but does have an MPU, do I need to rebuild the
> > toolchain with this patch, bypass/fix this error or enable MMU and
> > select not to use MMU or something else?
> 
> It is due to the fact that the uClibc headers define __ARCH_USE_MMU__.
> This is because uClibc has been built with MMU support. In fact, the
> Buildroot toolchain backend for now doesn't support building non-MMU
> toolchains. But it could probably be added relatively easily.
> 
> In toolchain/uClibc/uclibc.mk, you would have to tweak the
> uClibc .config (like we already do for many options) so as to disable
> the ARCH_USE_MMU uClibc option when BR2_USE_MMU is disabled.
> 
> Something along the lines of (completely untested):
> 
> diff --git a/toolchain/uClibc/uclibc.mk b/toolchain/uClibc/uclibc.mk
> index 9d0b6db..0eb11c0 100644
> --- a/toolchain/uClibc/uclibc.mk
> +++ b/toolchain/uClibc/uclibc.mk
> @@ -245,6 +245,9 @@ ifneq ($(UCLIBC_TARGET_ENDIAN),)
>                 -e 's/.*\(ARCH_WANTS_$(UCLIBC_TARGET_ENDIAN)_ENDIAN\).*/\1=y/g' \
>                 $(UCLIBC_DIR)/.oldconfig
>  endif
> +ifeq ($(BR2_USE_MMU),)
> +       $(SED) 's,.*ARCH_USE_MMU.*,# ARCH_USE_MMU is not set,g' $(UCLIBC_DIR)/.oldconfig
> +endif
>  ifeq ($(BR2_LARGEFILE),y)
>         $(SED) 's,.*UCLIBC_HAS_LFS.*,UCLIBC_HAS_LFS=y,g' $(UCLIBC_DIR)/.oldconfig
>  else
> 
> However, besides this option, you will also probably need to adjust the
> uClibc configuration to add support for FLAT binaries.
> 


Yep it worked but unfortunately I get

______________________________________________________________________

  CC libc/unistd/usleep.os
  AS libpthread/nptl/sysdeps/unix/sysv/linux/arm/clone.os
  AS libpthread/nptl/sysdeps/unix/sysv/linux/arm/vfork.os
  CC libpthread/nptl/sysdeps/unix/sysv/linux/arm/fork.os
In file included from
  libpthread/nptl/sysdeps/unix/sysv/linux/arm/fork.c:31:0:
  libpthread/nptl/sysdeps/unix/sysv/linux/arm/../fork.c:61:17: error:
  'fork' undeclared here (not in a function)
  libpthread/nptl/sysdeps/unix/sysv/linux/arm/../fork.c:61:23: warning:
  type defaults to 'int' in declaration of '__libc_fork'
  libpthread/nptl/sysdeps/unix/sysv/linux/arm/../fork.c:63:1: error:
  '__libc_fork' redeclared as different kind of symbol
  libpthread/nptl/sysdeps/unix/sysv/linux/arm/../fork.c:61:23: note:
  previous declaration of '__libc_fork' was here
  libpthread/nptl/sysdeps/unix/sysv/linux/arm/../fork.c:227:1: warning:
  type defaults to 'int' in declaration of 'fork'
  libpthread/nptl/sysdeps/unix/sysv/linux/arm/../fork.c:228:1: error:
  'fork' redeclared as different kind of symbol
  libpthread/nptl/sysdeps/unix/sysv/linux/arm/../fork.c:227:1: note:
  previous declaration of 'fork' was here
  libpthread/nptl/sysdeps/unix/sysv/linux/arm/../fork.c:229:1: error:
  '__EI_fork' aliased to undefined symbol '__GI_fork'
  libpthread/nptl/sysdeps/unix/sysv/linux/arm/../fork.c:229:1: error:
  '__EI_fork' aliased to undefined symbol '__GI_fork' make[1]: ***
  [libpthread/nptl/sysdeps/unix/sysv/linux/arm/fork.os] Error 1
  make[1]: Leaving directory
  `/usr/src/buildroot-toolchain-nommu/output/toolchain/uClibc-0.9.33.2'
  make: ***
  [/usr/src/buildroot-toolchain-nommu/output/toolchain/uClibc-0.9.33.2/lib/libc.a]
  Error 2
________________________________________________________________________


This link suggests it may be the kernel headers.

http://old.nabble.com/uClibc-compilation-error-with-nommu-td22424490.html


> The no-MMU support for ARM is basically non-existent for now in
> Buildroot, but I'm interested in having that integrated, so I'll try to
> help you getting this working.
> 

With blackfin working and without major changes and with ucLinux
starting as nommu, I assumed the support was mostly there. Do you think
it will be fairly trivial for us to sort out or I would be better off
looking at ucLinux or Openembedded?

Thanks,

Kc



More information about the buildroot mailing list