From owner-freebsd-embedded@FreeBSD.ORG Thu Dec 25 01:56:07 2014 Return-Path: Delivered-To: freebsd-embedded@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 0C21C494 for ; Thu, 25 Dec 2014 01:56:07 +0000 (UTC) Received: from mail.ignoranthack.me (ignoranthack.me [199.102.79.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id DDA1B3441 for ; Thu, 25 Dec 2014 01:56:06 +0000 (UTC) Received: from [192.168.200.211] (unknown [50.136.155.142]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: sbruno@ignoranthack.me) by mail.ignoranthack.me (Postfix) with ESMTPSA id A4F8F192A3B; Thu, 25 Dec 2014 01:56:05 +0000 (UTC) Message-ID: <549B6EB3.90204@ignoranthack.me> Date: Wed, 24 Dec 2014 17:56:03 -0800 From: Sean Bruno Reply-To: sbruno@freebsd.org User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0 MIME-Version: 1.0 To: Jeremy Brown Subject: Re: Help Compiling armv6 Ports from x64 References: <549B6584.3000608@ignoranthack.me> In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: freebsd-embedded@freebsd.org X-BeenThere: freebsd-embedded@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Dedicated and Embedded Systems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 25 Dec 2014 01:56:07 -0000 -----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 > 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 > 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 >>>> , 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 , 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 > > > 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-----