我一直在linux X86机器上使用node-serialport,效果很好。现在我试图在运行arm linux的嵌入式平台上安装node-serialport。我设法交叉编译节点本身,并能够在目标平台上运行node / npm。
但是,仅运行npm install serialport
不起作用:
binary not available for your platform
然后npm使用node-gyp启动构建。不幸的是,构建需要Python,这在我的嵌入式平台上是不可用的(尝试交叉编译python而没有成功:()
任何人都可以帮我在我的linux机器上交叉编译串口吗?我在网上尝试了很多方法,但是所有这些方法都因一个原因或其他原因而失败
答案 0 :(得分:2)
我设法最终使用最丑的方法进行交叉编译串口:)以下是有效的方法:
在原生x86 linux机箱上,
cd <your work area>
设置cross_compiler工具环境变量:
export AR=arm-marvell-linux-gnueabi-ar
export CC=arm-marvell-linux-gnueabi-gcc
export CXX=arm-marvell-linux-gnueabi-g++
export LINK=arm-marvell-linux-gnueabi-g++
export npm_config_arch=arm
export npm_config_nodedir=/home/ysoni/node
现在运行npm install。请注意,因为npm install坚持我应该编译64位包,所以我不得不手动提供--package_name, - atom_path等。我从serialport网站获得了这些参数。
npm install serialport --arch=x64 --target_arch=arm --remote_path=./serialport/v1.4.0/Release/ --package_name=node-v11-linux-ia32.tar.gz --staged_tarball=build/stage/serialport/v1.4.0/Release/node-v11-linux-ia32.tar.gz --hosted_path=https://node-serialport.s3.amazonaws.com/serialport/v1.4.0/Release/ --hosted_tarball=https://node-serialport.s3.amazonaws.com/serialport/v1.4.0/Release/node-v11-linux-ia32.tar.gz
将生成包含.bin和serialport文件夹的node_modules目录。 现在,将node_modules的内容复制到target_platform。 我编写了一个示例.js脚本来测试是否可以打开串行设备。该脚本必须与node_modules位于同一目录中。
预计必须有最后一个路障!很奇怪,我不得不做一些重命名。您的平台可能不需要这样做:
busybox mv node_modules/serialport/build/serialport/v1.4.2/Release/node-v11-linux-arm/ node_modules/serialport/build/serialport/v1.4.2/Release/v8-3.11-linux-arm/
最后,我可以打开serialport和ready内容。我真的希望那里有更简单的方法!
快乐的黑客!!
答案 1 :(得分:0)
对于任何遇到过这篇文章的人(我知道它已经过时),你可以直接在设备上为ARM构建,例如Raspberry Pi。
我只是不希望想要使用这个库的开发人员被必须交叉编译的概念所关闭,因为我们都知道,这很痛苦!