Node.js PowerPC 440EP和PowerPC E300C3上的“非法指令”

我不能在PowerPC 440EP上运行node.js,我只得到错误“非法指令”。

硬件信息:

cat /proc/cpuinfo processor : 0 cpu : 440EP Rev. C clock : 533.333332MHz revision : 24.212 (pvr 4222 18d4) bogomips : 1066.66 timebase : 533333332 platform : CPU440EP model : micran,cpu440 Memory : 128 MB LD_SHOW_AUXV=1 /bin/true AT_DCACHEBSIZE: 0x20 AT_ICACHEBSIZE: 0x20 AT_UCACHEBSIZE: 0x0 AT_SYSINFO_EHDR: 0x100000 AT_HWCAP: booke mmu fpu ppc32 AT_PAGESZ: 4096 AT_CLKTCK: 100 AT_PHDR: 0x10000034 AT_PHENT: 32 AT_PHNUM: 8 AT_BASE: 0x48000000 AT_FLAGS: 0x0 AT_ENTRY: 0x1000446c AT_UID: 0 AT_EUID: 0 AT_GID: 0 AT_EGID: 0 AT_SECURE: 0 AT_RANDOM: 0xbf8c04f2 AT_EXECFN: /bin/true AT_PLATFORM: ppc440 AT_BASE_PLATFORM:ppc440 

软件信息:

我正在使用powerpc-440-linux-gnu编译器(版本5.2.0)和Linux v3.6.7。

我试图使用不同版本的来源:

 *node-0.10-ppc* from https://github.com/ibmruntimes/node *node-4.x-port* from https://github.com/ibmruntimes/node *node-v4.4.7* from https://nodejs.org/dist/v4.4.7/node-v4.4.7.tar.gz *node-6.x* from https://github.com/nodejs/node 

我正在使用以下脚本构buildnode.js:

 #!/bin/bash CROSS_COMPILER=powerpc-440-linux-gnu HOST=powerpc-linux ENDIAN=big BUILD_PATH=/home/user/node CFLAGS=-Os JOBS=4 export ARCH=ppc export CC=${CROSS_COMPILER}-gcc export CXX=${CROSS_COMPILER}-g++ export CFLAG=${CFLAGS} export AR=${CROSS_COMPILER}-ar r export LINK=${CROSS_COMPILER}-g++ export PATH=${PATH}:/home/user/powerpc-440-linux-gnu/bin ./configure --without-snapshot --prefix=${BUILD_PATH} --dest-cpu=ppc --dest-os=linux make -j ${JOBS} make install 
  • 我应该使用哪个版本的node.js?
  • 我们是否为PowerPC 440EP开发了可移植版本的node.js?

伤心的更新

我从https://github.com/nodejs上的问题页面获得了以下答案:

 [Michael Dawson] The particular chip mentioned is based on the older PowerPC cores and does not have all of the Power5+ instructions available. 

大约有两个非法指令的原因。 内存损坏会导致控制stream出轨,导致CPU尝试执行垃圾/数据。 另一个原因是你的node.js二进制文件包含了你的CPU所不知道的指令。 你的交叉编译器输出不符合你的CPU。 调查是否需要将另外的-mcpu =或-mtune =parameter passing给编译器(或者更确切地说configuration)。

由于node.js包含一个即时编译器本身,因此也有第三个选项,即node.js生成的指令不适合您的CPU变体。

我会先调查scheme二。