Help Compiling armv6 Ports from x64

Sean Bruno sbruno at ignoranthack.me
Thu Dec 25 01:17:01 UTC 2014


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

On 12/24/14 16:34, Jeremy Brown wrote:
> I have a VM running FreeBSD 10.1 x64 that I'm trying to use to
> create an image that will run on a Raspberry Pi. I've managed to
> get the base system working, but I can't figure out how to compile
> ports for the image. I know my cross-compilation toolchain is
> working, as I can build the kernel and world without issue.
> 
> For sake of example, say my arm root is at /tmp/rootfs, my
> toolchain is at /usr/armv6-freebsd/usr/bin and some other assorted
> cross-compilation items are at /usr/obj/armv6-freebsd.
> 
> Some of the commands I have tried to build a port are:
> 
> PATH=/path/to/toolchain:${PATH} make TARGET=arm TARGET_ARCH=armv6
> install (this typically fails during compilation)
> 
> PATH=/path/to/toolchain:${PATH} make TARGET=arm TARGET_ARCH=armv6
> configure install (this typically fails during configuration, the
> error I get is something along the lines of "cannot read C-compiled
> file"; in addition the configure script never notices that I am
> trying to cross-compile)
> 
> PATH=/path/to/toolchain:${PATH} make
> CONFIGURE_ARGS="--host=armv6-freebsd" configure install (this
> typically fails during compilation for varying reasons, but at
> least it'll recognize that I'm cross-compiling; including TARGET
> and TARGET_ARCH makes no difference)
> 
> make TARGET=arm TARGET_ARCH=armv6 DESTDIR=/tmp/rootfs install
> (this was what I originally tried, when the chroot kicked in it
> would try to run the ARM version of /bin/sh; as the VM is x64 this
> would always give an exec format error before failing)
> 
> make TARGET=arm TARGET_ARCH=armv6 DESTDIR=/tmp/rootfs CHROOTED=no
> install (this would seem to work, but would install the port to the
> VM instead of the filesystem for the image, and in addition would
> be compiled x64 instead of armv6)
> 
> There are others, but these are the ones I can remember the best
> right now. I understand there won't be any precompiled ports, and I
> don't want to have to build my desired ports on the Pi itself
> (despite the fact that doing so would be agonizingly slow, the
> space required to store the ports tree and compile what I need
> would explode the size of the image from ~400MB to
>> 2GB).
> 
> I've tried many different websites (see here
> <http://www.cruwe.de/?p=78>, here 
> <http://allskyee.blogspot.com/2014/02/freebsd-10-ports-cross-compile-amd64-to.html>
>
> 
, here
> <http://ray-freebsd.blogspot.kr/2011/09/cross-compiling-ports-for-freebsd.html>
>
> 
, here <http://blog.ignoranthack.me/?p=221>, here
> <http://lists.freebsd.org/pipermail/freebsd-current/2012-November/037469.html>),
>
> 
but none of their methods have resulted in a successful compilation.
> 
> Do you know of a method to compile armv6 ports on an x64 machine,
> or can you direct me to someone who might?
> 
> -Jeremy

At this point, poudriere can build packages by default.

If you want armv6 packages for RPi or BBB, get poudriere 3.1 on your
system with qemu-bsd-user.

Setup this arcane binmiscctl(8) command:
/usr/sbin/binmiscctl add armv6 --interpreter "/usr/local/bin/qemu-arm" \
- --magic
"\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00"
\
- --mask
"\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff"
\
- --size 20 --set-enabled


That is the command that will redirect execution of armv6 binaries to
qemu-bsd-user.

Build an armv6 jail with:

poudriere jail -c -j armv6 -m svn -v head -a arm.armv6 -x

And build your ports with poudriere via:
poudriere bulk -j amrv6 <listofports>

You can fetch packages from the freebsd cluster arm builder if you
wish as well:

http://chips.ysv.freebsd.org/packages/11armv6-11armv6/

Sean



-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQF8BAEBCgBmBQJUm2WBXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w
ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwAAoJEBIB78oecn5kDx0H/0UnXCslpqnT1JrHDCuN+trS
IvC2eMIaaLa2jZ/6BM6FVqmMdRpt+sGnToZSL/3iaFyLQhgadOqojBtsuna8W2rd
jagvmhQaZtG0TOfCBPI6B0LDAZMwzAcczgSc+ta+39rU3sGrI3u9Cu7aUf6xWOJZ
GMmbvH3idiLLcyVzwKSL2D8B3y7mg1E+cNB5y61nNxpnrIsQNLmaASjikaJXOif4
8AV7/yzq5tLkeiBkxjnsq0t3UBCUh/omMwGwQn6jXD8qa4JfjtFWFN23hpVyPBpi
jfL6IycR7JauqXK1JQzYHiNCgGD8JthNNCwp4UQvvDfY8w/0cwFwXPdzy4qedYc=
=lkbv
-----END PGP SIGNATURE-----


More information about the freebsd-embedded mailing list