移植nodejs到嵌入式linux,让终端支持可使用js做些功能
Node.js是一个基于Chrome V8引擎的JavaScript运行环境.Node.js使用了一个事件驱动,非阻塞式I / O的模型,使其轻量又高效。
嵌入式开发C / C ++和安卓原生使用的java的属于一个周期长和研发成本较高的工作,但是随着技术的发展,某些前端语言技术在大行其道,所以使用JS进行一些简单的对CPU负载要求低的工作可以使用,这样前端的人员就会扩展到服务器后端工作或者嵌入式工作,这样,保证跨平台开发的高效和前端和服务器端,嵌入式式终端开发的高效。
移植很简单,基本上是零错误。
我的配置如下:
先配置交叉工具链:
export CC = arm-linux-gnueabihf-gcc CXX = arm-linux-gnueabihf-g ++ LD = arm-linux-gnueabihf-ld RANLIB = arm-linux-gnueabihf-ranlib AR = arm-linux-gnueabihf-ar CFLAGS = -static CXXFLAGS = -static LDFLAGS = -static
配置配置
./configure --prefix = / usr / local / H8 / Ubuntu / node-6.10.0 --dest-cpu = arm --dest-os = linux --without-snapshot --with-arm-float-abi =硬
最后做,
make install
放到开发板上试下:
root @ b503_lcd:/ bin#。/ node -v v0.12.6 root @ b503_lcd:/ bin#node > a = 1 1 > b = 2 2 > var http = require('http'); undefined > var querystring = require('querystring');
写一个测试的JS文件,测试下:
var http = require('http');
var querystring = require('querystring');
var data = {
a: 123,
time: new Date().getTime()};//这是需要提交的数据
var content = querystring.stringify(data);
var options = {
hostname: '192.168.51.28',
port: 3000,
path: '/pay/pay_callback?' + content,
method: 'GET'
};
var req = http.request(options, function (res) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});
req.on('error', function (e) {
console.log('problem with request: ' + e.message);
});
req.end();
测试结果如下:
root @ b503_lcd:/ bin#node test.js 请求问题:connect ECONNREFUSED 192.168.51.28:3000 由于机器没联网,也没开后台web服务器,所有提示了联网错误。
解析json更是方便:
root@b503_lcd:/usr/bin# node >
> JSON.stringify("a=1") '"a=1"' > var person = new Object(); undefined > person.name = 'chy'; 'chy' > person.age = 24; 24 > person.city= ['FuZhou', 'XiaMen']; [ 'FuZhou', 'XiaMen' ] > JSON.stringify(person); '{"name":"chy","age":24,"city":["FuZhou","XiaMen"]}'
测试结果:虽然运行启动慢了点儿,但是想到可以用它来使用JS写些功能,做些东西,还是很不错的。
比如访问HTTP,处理文件,处理JSON等。
不过要想完全用它来做应用,估计还比较冒险,因为机器主频和性能都受限。不知道稳定性,速度和体验效果会是什么样。
不过这也是嵌入式开发的一种尝试,如果后续有机会,可以尝试下。
其实呢,也不用自己移植的,官网直接提供了ARM平台上可以用的编译好的版本。版本新,且稳定亲测,可以运行。
比如这个最新版本:
root @ b503_lcd:/ bin#node -v v10.12.0
如果需要调用的NodeJSç语言写的驱动?可通过FFI在node.js的中调用动态链接库。
- 1657: [Usaco2006 Mar]Mooo 奶牛的歌声
- 1610: [Usaco2008 Feb]Line连线游戏
- 1012: [JSOI2008]最大数maxnumber
- 1430: 小猴打架
- 1202: [HNOI2005]狡猾的商人
- 1059: [ZJOI2007]矩阵游戏
- 3039: 玉蟾宫
- 大公司都有哪些开源项目之腾讯
- Vue拖拽组件开发实例
- 一小时培训之神经网络入门
- 【LeetCode 290】 关关的刷题日记28 Word Pattern
- Redis知识点速查
- 上传伪技术~很多人都以为判断了后缀,判断了ContentType,判断了头文件就真的安全了。是吗?
- SpringBoot的微信点餐系统后台开发要点
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- WebDriverIO教程:处理Selenium中的警报和覆盖
- TensorBoard可视化
- Java自动化测试(Maven 8)
- Java自动化测试(HashSet和HashMap 7)
- 构建模型的3种方法
- 训练模型的3种方法
- 干货 | 携程APP/Web功能和视觉测试平台-Watcher
- FPGA中的亚稳态
- 蜂鸟E203系列——定时器中断设计
- FPGA信号截位策略
- 数字IC设计经典笔试题之【verilog篇】
- 蜂鸟E203系列——Windows下运行hello world例程
- 蜂鸟E203系列——Windows开发工具
- FPGA奇数分频
- 形式化分析工具:在虚拟操作系统和主机操作系统之间配置共享文件夹