Help Compiling armv6 Ports from x64
Sean Bruno
sbruno at ignoranthack.me
Thu Dec 25 01:56:07 UTC 2014
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
On 12/24/14 17:29, Jeremy Brown wrote:
> Sean,
>
> Does poudriere work with previously-established roots or does it
> have to generate its own? I'm using crochet
> <https://github.com/kientzle/crochet-freebsd> to create my image,
> so I can do whatever I want to the filesystem it creates and have
> it apply to the image.
>
Poudirere's main purpose is to create a package repo for remote
installation.
So, I'm guessing that you don't want that.
What you "want" is the magical binmiscctl command on your host system
and then copy /usr/local/qemu-user-arm into your jail.
Modify the binmiscctl(8) command I pointed you at below to point to
/usr/local/bin/qemu-user-arm.
Then you should be able to "chroot" into your existing chroot and it
will act like an arm box. It will be slow, but currently there's no
reliable way that I am aware of to get what you and other need done.
sean
> Also, will poudriere actually install a package and modify
> necessary files to let the system know a port is installed, or does
> it only create the package and leave it to me to install?
>
> -Jeremy
>
> On Wed, Dec 24, 2014 at 8:16 PM, Sean Bruno
> <sbruno at ignoranthack.me> wrote:
>
> 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
iQF8BAEBCgBmBQJUm26wXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w
ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwAAoJEBIB78oecn5kcoAH/RqUaEJdWYo3hjimFzaTWlR6
v6DzcuV3agbc5pf47JU7OszU2BQC7oSlRKfgL3yPqosK6gVGYwr5ZxIXet5YKvnG
aaLQ6b++7PjXm9WvLRufShYusO1QVuwa5Witj3zAKbjgC3F6e0qFyRdX/wbOpnFW
871Jc/QdxNrgHWw2o31m3GsVi4OtondB2Fifz7us9bSYNFn84S3pz73Nf8DV9KtS
HXG42qDGNFz7Ov/k9apDC1Jr1ejMhfP3sX9Jnsg1z2vqDHZC2KuB6fGOEvL9n1DJ
45R2H5UYgXH/T+rJ36lrTkVxVSvwt+s+oEIdDDFbOsGJx/rqP79adrAcWUzWD/I=
=uOZl
-----END PGP SIGNATURE-----
More information about the freebsd-embedded
mailing list