Настраиваю виртуальную машину специально для кросскомпиляции под armv7l. В качестве теста решил собрать busybox, и пока сама кросскомпиляция работает нормально, при загрузке полученного бинарника на роутер с правильной архитектурой бинарник жалуется на ./busybox: line 1: syntax error: unexpected word (expecting ")")
У меня не было этой проблемы при компиляции для x86, и поэтому я считаю, что проблема связана с моей средой сборки.
Он основан на сервере ubuntu18, и я установил следующие пакеты:
gcc-arm-linux-gnueabi
binutils-arm-linux-gnueabi
libncurses5-dev
gawk
build-essentials
make
мой скрипт сборки:
export ac_cv_linux_vers=2
export CC=/usr/local/arm-2011.09/bin/arm-none-linux-gnueabi-gcc
export GCC=/usr/local/arm-2011.09/bin/arm-none-linux-gnueabi-gcc
export CXX=/usr/local/arm-2011.09/bin/arm-none-linux-gnueabi-g++
export CPP=/usr/local/arm-2011.09/bin/arm-none-linux-gnueabi-cpp
export LD=/usr/local/arm-2011.09/bin/arm-none-linux-gnueabi-ld
export AR=/usr/local/arm-2011.09/bin/arm-none-linux-gnueabi-ar
export AS=/usr/local/arm-2011.09/bin/arm-none-linux-gnueabi-as
export NM=/usr/local/arm-2011.09/bin/arm-none-linux-gnueabi-nm
export RANLIB=/usr/local/arm-2011.09/arm-none-linux-gnueabi/bin/ranlib
export CC1=/usr/local/arm-2011.09/libexec/gcc/arm-none-linux-gnueabi/4.6.1/cc1
export PATH=/usr/local/arm-2011.09/bin:/usr/local/arm-2011.09/:/usr/local/arm-2011.09/lib:/usr/local/arm-2011.09/libexec/gcc/arm-none-linux-gnueabi/4.6.1:$PATH
export ac_cv_func_getpgrp_void=yes
export ac_cv_func_setpgrp_void=yes
export LDFLAGS = "-static"
export CFLAGS = "-Os -s"
# I already did make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
make install
Какие-нибудь очевидные недостатки в моем процессе сборки?
Платформа, на которой я пытаюсь запустить busybox:
# cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 1 (v7l)
BogoMIPS : 1594.16
Features : swp half thumb fastmult edsp thumbee tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x4
CPU part : 0xc09
CPU revision : 1
CPU physical :0
processor : 1
model name : ARMv7 Processor rev 1 (v7l)
BogoMIPS : 1594.16
Features : swp half thumb fastmult edsp thumbee tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x4
CPU part : 0xc09
CPU revision : 1
CPU physical :1
Hardware : Hisilicon A9
Revision : 0000
Serial : 0000000000000000
# uname -m
armv7l
Решил это. Оказалось, что мой make menuconfig
был неполным.
Busybox Settings -> Build Options -> Build Busybox as a static binary (no shared libs)
Busybox Settings -> Build Options -> Cross compiler prefix -> Set this option equal to "arm-linux-gnueabi-"
Busybox Settings -> Installation Options -> Don't use /usr -> Enable
Linux Module Utilities -> () Default directory containing modules -> blank
после этого двоичный файл, созданный сценарием сборки, заработал как положено