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二。