Embedded
用於 ARMv7 霓虹燈的 CLFS
我正在關注CLFS 書(GIT-20140613-arm 版本),在使用 armv7 和 neon 組合建構 GCC 時遇到問題。目標資訊在這裡。
我的主機是一個乾淨的 Debian 8,帶有 gawk、build-essential、texinfo 和 libncurses5-dev 軟體包。更多細節可以在這裡找到。
我製作了這個更新檔來使用 gcc-4.9 建構 binutils。
按照說明,當第一次編譯 GCC 時,它聲稱這些 arm 組合是不可能的。
checking for suffix of object files... configure: error: in `/mnt/clfs/sources/gcc-build/arm-linux-musleabihf/libgcc': configure: error: cannot compute suffix of object files: cannot compile See `config.log' for more details.
在
config.log
我們可以看到:conftest.c:1:0: error: target CPU does not support ARM mode
我在這裡連結了完整的錯誤。
在我的研究中,我發現這個問題聽起來是一樣的,但是 OP 遵循的是一本非常舊版本的 CLFS 書,我設法通過附加到來超越這個錯誤
--with-mode=thumb
,./configure
但隨後 musl 失敗了:arm-linux-musleabihf-gcc -std=c99 -nostdinc -ffreestanding -fexcess-precision=standard -frounding-math -D_XOPEN_SOURCE=700 -I./arch/arm -I./src/internal -I./include -Os -pipe -fomit-frame-pointer -fno-unwind-tables -fno-asynchronous-unwind-tables -Wa,--noexecstack -Werror=implicit-function-declaration -Werror=implicit-int -Werror=pointer-sign -Werror=pointer-arith -fno-stack-protector -c -o crt/crt1.o crt/arm/crt1.s crt/arm/crt1.s: Assembler messages: crt/arm/crt1.s:6: Error: only lo regs allowed with immediate -- `mov fp,#0' crt/arm/crt1.s:7: Error: only lo regs allowed with immediate -- `mov lr,#0' crt/arm/crt1.s:8: Error: Thumb does not support this addressing mode -- `ldr a2,[sp],#4' crt/arm/crt1.s:11: Error: lo register required -- `str fp,[sp,#-4]!' crt/arm/crt1.s:12: Error: Thumb does not support this addressing mode -- `str a1,[sp,#-4]!' crt/arm/crt1.s:13: Error: Thumb does not support this addressing mode -- `str a4,[sp,#-4]!' Makefile:112: recipe for target 'crt/crt1.o' failed make: *** [crt/crt1.o] Error 1
我也嘗試過
vfp
和vfpv3
組合,我也嘗試過使用 Linaro GCC而不是GNU one,完全沒有運氣。一旦我為 Raspberry Pi One(硬、vfp 和 armv6)成功地完成了這本書,但我在使用 Beaglebone 組合時遇到了麻煩。
我錯過了什麼?我的環境正確嗎?如果是這樣,我能做些什麼來克服這個問題?
對於 BeagleBone Black,正確的環境設置是
armv7-a
,正如我們在此處和此處看到的那樣,我們需要從此處獲取核心設置,bb.org_defconfig
並使用此處的標頭,以及此處的更新檔,並記住使用.gcc``gcc``--disable-libsanitizer
我在建構之前使用了以下命令
musl
:sed -i 's/\/dev\/null\/utmp/\/var\/run\/utmp/g;s/\/dev\/null\/wtmp/\/var\/log\/wtmp/g' include/paths.h include/utmp.h
以及在建構之前
busybox
解決wtmp
問題的以下內容:sed -i 's/\(CONFIG_\)\(.*\)\(INETD\)\(.*\)=y/# \1\2\3\4 is not set/g;s/\(CONFIG_IFPLUGD\|CONFIG_ASH_HELP\|CONFIG_FEATURE_VERBOSE\|CONFIG_UEVENT\)=y/# \1 is not set/' .config sed -i '/utmpx\.h/,/endif/s/__UCLIBC__/LIBBB_H/' include/libbb.h
完整的包裝清單:
wget -cO bootscripts-embedded-HEAD.tar.gz -c 'http://git.clfs.org/?p=bootscripts-embedded.git;a=snapshot;h=HEAD;sf=tgz' wget -cO gcc-5.2.0-musl-1.patch 'https://raw.githubusercontent.com/GregorR/musl-cross/master/patches/gcc-5.2.0-musl.diff' wget -c \ 'http://ftp.gnu.org/gnu/binutils/binutils-2.25.1.tar.bz2' \ 'http://busybox.net/downloads/busybox-1.24.0.tar.bz2' \ 'ftp://gcc.gnu.org/pub/gcc/releases/gcc-5.2.0/gcc-5.2.0.tar.bz2' \ 'http://ftp.gnu.org/gnu/gmp/gmp-5.1.3.tar.xz' \ 'http://sethwklein.net/iana-etc-2.30.tar.bz2' \ 'http://ftp.barfooze.de/pub/sabotage/tarballs/kernel-headers-3.12.6-5.tar.xz' \ 'https://github.com/beagleboard/linux/archive/4.1.tar.gz' \ 'ftp://ftp.denx.de/pub/u-boot/u-boot-2015.10.tar.bz2' \ 'ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz' \ 'ftp://ftp.gnu.org/gnu/mpfr/mpfr-3.1.3.tar.xz' \ 'http://www.musl-libc.org/releases/musl-1.1.9.tar.gz' \ 'https://matt.ucc.asn.au/dropbear/releases/dropbear-2015.68.tar.bz2' \ 'http://www.red-bean.com/~bos/netplug/netplug-1.2.9.2.tar.bz2' \ 'http://downloads.sourceforge.net/libpng/zlib-1.2.9.tar.gz' \ 'http://patches.clfs.org/embedded-dev/iana-etc-2.30-update-2.patch' \ 'http://patches.clfs.org/embedded-dev/netplug-1.2.9.2-fixes-1.patch' \ 'http://downloads.sourceforge.net/libpng/zlib-1.2.8.tar.gz'
這解決了所有問題。