У меня есть устройство, процессор которого armv7, но без процессора.
Я могу скомпилировать узел с опцией —with-arm-float-abi = soft, но когда я запускаю «node», происходит «Недопустимая инструкция (сбрасывается ядро)»
root@router:/tmp/target/bin# ./node -v
v4.2.4
root@router:/tmp/target/bin# ./node --v8-options | head -2
target arm v7 vfp3 soft
ARMv7=1 VFP3=1 VFP32DREGS=0 NEON=0 SUDIV=0 UNALIGNED_ACCESSES=1
MOVW_MOVT_IMMEDIATE_LOADS=0 COHERENT_CACHE=0 USE_EABI_HARDFLOAT=0
Инструмент objdump показал мне, что существуют инструкции (такие как vpush, vpop …), которые не поддерживаются моим процессором (arm v7 без fpu).
Для дальнейшего я нашел openssl и v8 в источнике узла, используя инструкции fpu.
строка конфигурации, как показано ниже
./configure \
--prefix=target \
--dest-cpu=arm \
--dest-os=linux \
--without-snapshot \
--with-arm-float-abi=soft \
--fully-static
Может кто-нибудь сказать мне, как скомпилировать node-v4.2.4 без поддержки fpu?
исходный код: nodejs-v4.2.2
версия руки: Cortex-A9 с плавающей запятой (FPU) (опция)
После многих попыток я использовал взамен node-v0.10.14, который хорошо работает без поддержки fpu. 😉
Так что я до сих пор не знаю, как скомпилировать nodejs-v4.2.2 без поддержки fpu.
Это невозможно.
V8 не поддерживает режим fpu с 3.18 (https://github.com/nodejs/node/issues/4447#issuecomment-168549889), предполагается, что ядро может эмулировать для вас FPU. И NodeJS основан на V8.
Relavant комментарий в исходном коде:
https://github.com/v8/v8/blob/master/src/arm/assembler-arm.cc#L174
Это уточняется в Список рассылки v8-пользователей тоже.