将Nodejs移植到Arm

    最近在做一个项目,硬件平台是ARM Cortex A8的处理器,软件平台当然是GNU/linux。本来计划全部是用C写的,嵌入式吗。可以老板偏爱node.js,认为很是高大上。

    没办法,移植吧。Baidu了一下,网上node.js移植到arm的内容不太多,发现了一篇文章,CSDN上,王山二的《将node.js移植到arm开发板》,很是有启发。但是为啥叫山二呢,小二多好听大笑。还有几个是介绍raspberryPi下移植的,姑且参考一下吧。

    硬件平台差不多,都是Cortex A8,不过我的是Ti的AM3357处理器。收集好资料后,上node的网站上看看。中文网最新的是8.4,英文网最新的是8.5(现在已更新到8.6).好吧,我对这个有偏执,当然用最新的8.5。到下载页面一看,耶,有移植好的耶。如下图:


    本人一向很懒的,能坐着绝不站着。这款处理器是ARMv7l的平台,正好有移植好的可用。

    下载,node-v8.5.0-linux-armv7l.tar.xz。

    安装,将文件复制到/usr目录下。

                xz -d node-v8.5.0-linux-armv7l.tar.xz

               tar -vxf node-v8.5.0-linux-armv7l.tar.xz

               在usr/下建立了一个node-v8.5.0-linux-armv7l的目录。

      然后配置路径,方法是sudo vi /etc/profile,在里面将相关的路径加进去。网上相关文章很多,这里就不重复了。配置好有,source /etc/profile。

     然后node -v。啥?!提示:

           ‘node’: No such file or directory

???,看路径配置没问题呀。 

cd /node-v8.5.0-linux-armv7l/bin

 然后ls -al:


权限配置也无问题。

然后在此目录下直接执行 node -v,提示依旧。

file node,看看:

应该在问题呀。将百度过来的资料反复看,无果。怎么办?只能自己编译试试了。这是山二兄弟的文章就可以参考了。

打开我的ubutun虚拟机,我的是ubutun Kylin 17.04。为啥用kylin呢,主要是习惯了windows的界面,搜狗输入法和WPS。

因为是ARM v7l的内核,需要的交叉编译器为gcc-linaro-6.3.1-2017.05-i686_arm-linux-gnueabihf,下载并且安装到

/usr/gcc-linaro-6.3.1-2017.05-i686_arm-linux-gnueabihf目录下,然后设置环境变量:

在/etc/profile文件增加:

export PATH=$PATH:/usr/gcc-linaro-6.3.1-2017.05-i686_arm-linux-gnueabihf/bin

export CC=arm-linux-gnueabihf-gcc export CXX=arm-linux-gnueabihf-g++ export LD=arm-linux-gnueabihf-ld export RAINLIB=arm-linux-gnueabihf-rainlib export AR=arm-linux-gnueabihf-ar

保存后然后执行source /etc/profile,交叉编译环境设置成功。因为本机已经安装过编译环境,所以

yum install gcc gcc-c++ autoconf automake和 yum install openssl openssl-devel这两个步骤是不用了。

node的配置文件生成需要Python2.7以上版本,因为ubutun 17里面已经配置好,所以不用配置。

下载node v8.5.0源码文件,并解压到/home,会建立一个/home/node v8.5.0的目录。

mkdir /home/armnodejs --->编译后node.js的二进制文件放到此目录。

cd /home/node v8.5.0 ,然后执行:

./configure --prefix=/home//armnodejs --dest-cpu=arm --dest-os=linux --cross-compiling -- fully-static --with-arm-float-abi=hard --without-snapshot

这里编译参数说明可以参考configure --help。

其中--fully-static表示是静态编译,不采用动态库方式。

--dest-cpu=arm表示目标代码是arm。

如果没有其他错误,这时会自动生成相应的make文件。然后执行:

make -j4

make install

这是相应的二进制目标文件会安装到armnodejs目录中。

将该目录打包:

tar -cf armnodejs.tar armnodejs

将其拷贝到目标系统中,这里我是拷贝到目标系统的opt目录下了。

执行解压:

tar -vxf armnodejs.tar

vi /etc/profile,添加如下内容:


保存退出后,执行 source /etc/profile

然后测试一下,node -v,提示:v8.5.0。编译成功。

这是进入到armnodejs/bin目录中,file node:


和官网上下载的移植好的,只有一个是shared linked,这个是statically linked不同。那么试验一下,编译的时候将-- fully-static参数删掉,

重新生成二进制文件。然后拷贝到目标板上执行。结果和官网上下载的提示完全一样。不知道为啥我这个目标板的linux系统有这个问题,如果有

哪位大咖遇到此类问题并解决的,希望告知,将不胜感谢。

node.js可以使用了,但是还有一个问题,不能裸奔呀,有很多好的node.js插件可以大大加快我们编程的速度。比如think.js。

想干就干,

npm install -g think-cli

  结果,又悲催了:


居然,居然安装出错。难过 查找若干资料,试验若干插件express,koa......,结果全部一样。快哭了

哥不是一个技术控,没有那个时间和信心去专研node.js的源码。那么只能曲线救国了,就是在ubutun中安装各种插件,然后拷贝过来使用。

需要的只是修改相应package.json中的内容。比如think-cli,拷贝过来后,将package包中相应的路径改为当前的路径,然后用ln指令设置一个软连接

ln -s ../lib/node_modules/think-cli/index.js thinkjs即可。

那么测试一下thinkjs。别忙,建立think项目的时候是要执行npm install的,可想而知,在目标板直接执行是不会成功的。方法同安装think一样,

在ubutun下执行:

$ thinkjs new demo;

$ cd demo;

$ npm install; 

之后将项目文件夹demo拷贝到目标板上,逐一修改runtime/config/development.json、pm2.json及package.json里面的相关路径指向目标板的当前路径。

执行npm start:

> thinkjs-application@1.0.0 start /opt/demo

> node development.js

[2017-09-27 19:38:52.770] [2143] [INFO] - Server running at http://127.0.0.1:8360

[2017-09-27 19:38:52.813] [2143] [INFO] - ThinkJS version: 3.2.1

[2017-09-27 19:38:52.817] [2143] [INFO] - Enviroment: development

[2017-09-27 19:38:52.819] [2143] [INFO] - Workers: 1

[2017-09-27 19:39:15.889] [2149] [INFO] - GET /favicon.ico 404 84ms

[2017-09-27 19:39:16.215] [2149] [INFO] - GET / 200 196ms

表示node.js服务已经正常运行。

这时用浏览器在地址栏输入:http://127.0.0.1:8360。如果目标板没有GUI,则用远程计算机连接:http://10.100.1.61:8360(我的目标板的IP),


现在一切OK。如果需要安装其他插件,方法同上。

最后说一下,我的目标板是致远电子的9608。如果想彻底解决node.js的安装问题,只能以后有时间琢磨或者自己裁剪linux了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yifan3605

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值