[freebsd] Кросс компилиция для arm

Eugene Grosbein eugen at grosbein.net
Fri Sep 6 04:11:19 EEST 2019


06.09.2019 0:49, Nick Kostirya пишет:

> Привет.
> Подскажите, пожалуйста, как на FreeBSD 11.2 amd64 скомпилировать бинарник для FreeBSD-11.2-RELEASE-arm-armv6-BANANAPI.img.xz ?
> 
> Пробую при помощи clang так:
> mdconfig -a -t vnode -u 0 -f FreeBSD-11.2-RELEASE-arm-armv6-BANANAPI.img
> mount /dev/md0s2a  /mnt/
> cc -target armv6-freebsd-eabi 1.c --sysroot /mnt -v
> 
> И получаю следующую ошибку:
> 
> FreeBSD clang version 6.0.0 (tags/RELEASE_600/final 326565) (based on LLVM 6.0.0)
> Target: armv6--freebsd-eabi
> Thread model: posix
> InstalledDir: /usr/bin
>  "/usr/bin/cc" -cc1 -triple armv6kz--freebsd-eabi -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name 1.c -mrelocation-model static -mthread-model posix -mdisable-fp-elim -masm-verbose -mconstructor-aliases -target-cpu arm1176jzf-s -target-feature +soft-float -target-feature +soft-float-abi -target-feature -neon -target-feature -crypto -target-feature +strict-align -target-abi aapcs -msoft-float -mfloat-abi soft -fallow-half-arguments-and-returns -dwarf-column-info -debugger-tuning=gdb -v -resource-dir /usr/lib/clang/6.0.0 -isysroot /mnt -fdebug-compilation-dir /home/nick/FreeBSD/arm -ferror-limit 19 -fmessage-length 144 -fno-signed-char -fobjc-runtime=gnustep -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/1-bc2ddd.o -x c 1.c
> clang -cc1 version 6.0.0 based upon LLVM 6.0.0 default target x86_64-unknown-freebsd11.2
> #include "..." search starts here:
> #include <...> search starts here:
>  /usr/lib/clang/6.0.0/include
>  /mnt/usr/include
> End of search list.
>  "/usr/bin/ld" --sysroot=/mnt --eh-frame-hdr -dynamic-linker /libexec/ld-elf.so.1 --enable-new-dtags -o a.out /mnt/usr/lib/crt1.o /mnt/usr/lib/crti.o /mnt/usr/lib/crtbegin.o -L/mnt/usr/lib /tmp/1-bc2ddd.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /mnt/usr/lib/crtend.o /mnt/usr/lib/crtn.o
> /mnt/usr/lib/crt1.o: file not recognized: File format not recognized
> cc: error: linker command failed with exit code 1 (use -v to see invocation)

Чтобы не бороться с ветряными мельницами, лучше всего развернуть скажем в /home/arm6
готовый мир для FreeBSD/arm6 (взять из образа) и использовать qemu-user-static из портов:

mount -t devfs devfs /home/arm6/dev
# если нужны порты
mount -t nullfs /usr/ports /home/arm6/usr/ports
chroot /home/arm6 /usr/local/bin/qemu-arm-static /bin/sh -E

Получаешь обычный шелл, который работает с ядром amd64,
но он сам и исполняемые им бинари от ARM, включая компилятор.

Я так порты собирал, правда для MIPS32, но суть та же. Потом результат запускал на реальном железе.





More information about the freebsd mailing list