交叉编译Node.js到OpenWrt(HG255D)
操作系统:deepin linux 2013 或 ubuntu 13.04
1、安装交叉编译前。须要安装的包
sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt xsltproc
2、下载OpenWrt的源码
git clone git://git.openwrt.org/openwrt.git
cd openwrt
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig
make prereq
make menuconfig
依照下图选择相应的项目
3.关键的一步
cd package
mkdir node
sudo gedit Makefile
#
# Copyright (C) 2006-2011 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
# include $(TOPDIR)/rules.mk PKG_NAME:=node
#眼下最新版本号
PKG_VERSION:=v0.10.28
PKG_RELEASE:=2 PKG_SOURCE:=node-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://nodejs.org/dist/${PKG_VERSION}
#更改版本号时也要改动
PKG_MD5SUM:=87768be7065d2120e71619948ab4bb2d GYP_DEFINES:=v8_use_mips_abi_hardfloat=false v8_can_use_fpu_instructions=false
LIBS:=-I$(TOOLCHAIN_DIR)/mipsel-openwrt-linux-uclibc/include/c++/4.8.3/ -I$(TOOLCHAIN_DIR)/mipsel-openwrt-linux-uclibc/include/c++/4.8.3/mipsel-openwrt-linux-uclibc/ include $(INCLUDE_DIR)/package.mk define Package/node
DEPENDS:=+libpthread +librt +uclibcxx
SECTION:=lang
CATEGORY:=Languages
TITLE:=Node.js is a platform built on Chrome's JavaScript runtime
URL:=http://nodejs.org/
endef define Package/node/description
Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
endef define Build/Prepare
$(call Build/Prepare/Default)
$(CP) node.patch $(PKG_BUILD_DIR)/
(cd $(PKG_BUILD_DIR); \
patch -p1 < node.patch; \
);
endef define Build/Configure
(cd $(PKG_BUILD_DIR); \
export LIBS="$(LIBS)"; \
export CFLAGS="$(TARGET_CFLAGS) $(LIBS)"; \
export CXXFLAGS="$(TARGET_CXXFLAGS) $(LIBS)"; \
export GYPFLAGS="$(GYPFLAGS)"; \
./configure --dest-cpu=mipsel --dest-os=linux --without-ssl --without-snapshot --with-arm-float-abi=soft; \
);
endef define Build/Compile
$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) GYP_DEFINES="$(GYP_DEFINES)" CC="$(TARGET_CC)" CXX="$(TARGET_CXX)" CFLAGS="$(TARGET_CFLAGS) $(LIBS)" CXXFLAGS="$(TARGET_CXXFLAGS) $(LIBS) -nostdinc++" LDFLAGS="$(TARGET_LDFLAGS) -nodefaultlibs -luClibc++ -lc -lgcc -lgcc_s -lpthread" || touch $(PKG_BUILD_DIR)/deps/v8/build/common.gypi
$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) GYP_DEFINES="$(GYP_DEFINES)" CC="$(TARGET_CC)" CXX="$(TARGET_CXX)" CFLAGS="$(TARGET_CFLAGS) $(LIBS)" CXXFLAGS="$(TARGET_CXXFLAGS) $(LIBS) -nostdinc++" LDFLAGS="$(TARGET_LDFLAGS) -nodefaultlibs -luClibc++ -lc -lgcc -lgcc_s -lpthread"
endef define Package/node/install
mkdir -p $(1)/usr/bin
$(CP) $(PKG_BUILD_DIR)/out/Release/node $(1)/usr/bin/
ln -s /usr/bin/node $(1)/usr/bin/nodejs
endef $(eval $(call BuildPackage,node))
4.保存配置文件后编译: make V=99 (參数为输出调试信息)
5.把openwrt/bin/ramips/packages下的
node_v0.10.28-2_ramips_24kec.ipk
uclibcxx_0.2.4-1_ramips_24kec.ipk
复制到路由器,先安装uclibcxx_0.2.4-1_ramips_24kec.ipk库,再安装node_v0.10.28-2_ramips_24kec.ipk,安装node的时候要耐心等待,我第一次安装的时候等了一会没有响应。以为编译失败了,终止了安装进程。因此而耗费了非常多时间。
后记:
看到恩山WIFI论坛网友soonco的帖子把编译过程中可能遇到的问题说得非常明确,当时我也走过类似的弯路。便摘录下来作为补充
http://www.right.com.cn/forum/thread-141085-1-1.html
HG255D的CPU是Ralink RT3052。mipsel的make
要是启用ssl功能就把“--without-ssl”删掉
假设是ar71xx的u请把里面的mipsel替换成mips
假设是arm的cpu请把替换
LIBS:=-I$(TOOLCHAIN_DIR)/arm-openwrt-linux/include/c++/{gcc版本}/ -I$(TOOLCHAIN_DIR)/arm-openwrt-linux/include/c++/{gcc版本}/arm-openwrt-linux-uclibcgnueabi/
和
./configure --dest-cpu=arm --dest-os=linux --without-ssl --without-snapshot --with-arm-float-abi=soft;
以此类推
无论什么版本号的openwrt版本号里面的node make文件都是出自 https://github.com/giorrrgio/nodejs-linino
(实际上我文章中提到的make文件是出自https://github.com/brimstone/nodejs-openwrt,可是也有參考过nodejs-linino)
mips的建议用attitude adjustment分支编译,不然总出错
mipsel直接用trunk就成了
特别注意:attitude adjustment的gcc版本号是4.6.3,而trunk的gcc是4.8.3
各个版本号md5值:8b905b6013b82fb7076b02a6c881f9a6 node-v0.10.18.tar.gz
ea0be82fa626a991d140444644a08001 node-v0.10.19.tar.gz
784e7d7a8e29dfec88ddb2e72a895407 node-v0.10.20.tar.gz
774bc17875c042ac42ad2d96b9c96734 node-v0.10.21.tar.gz
1f1948de2ef50a1d8e2303a6ed6c0e45 node-v0.10.22.tar.gz
90d75d6d12890cad4ec9cdfefa5f3a3e node-v0.10.23.tar.gz
186726490c9a715cb7ee2ed37ccb5eb3 node-v0.10.24.tar.gz
153bdbf77b4473df2600b8ce123ef331 node-v0.10.25.tar.gz
15e9018dadc63a2046f61eb13dfd7bd6 node-v0.10.26.tar.gz
6a087d80ca490c16afbbeaf3ebdbb946 node-v0.10.27.tar.gz
87768be7065d2120e71619948ab4bb2d node-v0.10.28.tar.gz
e14ea9f46f9beecdf4e9423fb626c70b node-v0.10.29.tar.gz
应网友要求。提供下载地址例如以下
链接: http://pan.baidu.com/s/1dDrN78H password: taet
交叉编译Node.js到OpenWrt(HG255D)的更多相关文章
- Use Node.js DDP Client on Arduino Yun to Access Meteor Server
Use Node.js DDP Client on Arduino Yun to Access Meteor Server 概述 在Arduino Yun上安装 Node.js, 并測试与 Meteo ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 利用Node.js的Net模块实现一个命令行多人聊天室
1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...
- Node.js:进程、子进程与cluster多核处理模块
1.process对象 process对象就是处理与进程相关信息的全局对象,不需要require引用,且是EventEmitter的实例. 获取进程信息 process对象提供了很多的API来获取当前 ...
- Node.js:理解stream
Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类 ...
- Node.js:Buffer浅谈
Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意.Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该 ...
- node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法
1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
- Node.js入门(一)
一.Node.js本质上是js的运行环境. 二.可以解析js代码(没有浏览器安全级的限制): 提供系统级的API:1.文件的读写 2.进程的管理 3.网络通信 三.可以关注的四个网站: 1.https ...
随机推荐
- Matlab 2018b 新特性
新特性简要介绍 一.实时编辑器 所创建的脚本不仅可以捕获代码,还可以讲述与人分享的故事.自动化的上下文提示可让您在编程时快速推进,并且将结果与可视化内容和您的代码一起显示. 二.App Designe ...
- 【转载】Redis在新浪微博中的应用
转载自文章 http://blog.me115.com/2013/12/19/redis-e5-9c-a8-e6-96-b0-e6-b5-aa-e5-be-ae-e5-8d-9a-e4-b8-ad-e ...
- DGN格式转化为shp格式 【转】
其实本来,我就是需要把一个autocad的dwg/dgn格式的东西导入到google earth里面:但是首先我对dwg/dgn格式的东西根本就不熟:其次我拿到的dwg/dgn格式文件是用的HK80 ...
- JavaScript hash
location.hash -- 返回URL#后面的内容,如果没有#,返回空 hash,中文"哈希" 引用网址:http://www.dreamdu.com/javascript/ ...
- Morton Code
莫顿码 ,实现了一维与二维(或多维)的转换.它通过交叉存储两个数的位产生一个数,即莫顿码. 可以应用于为一个整数对产生一个唯一索引. 例如,对于坐标系中的坐标点使用莫顿编码生成的莫顿码,可以唯一索引对 ...
- 数据库插入数据返回当前自增主键ID值的方法
当我们插入一条数据的时候,我们很多时候都想立刻获取当前插入的主键值返回以做它用.我们通常的做法有如下几种: 1. 先 select max(id) +1 ,然后将+1后的值作为主键插入数据库: 2. ...
- Android -- Vibrator
Vibrator public c ...
- 当Intellij IDEA 遇到 Mac
当Intellij IDEA 遇到 Mac alt+insert变为control+N
- SVM 总结
SVM有一个核心函数SMO,也就是序列最小最优化算法.SMO基本是最快的二次规划优化算法,其核心就是找到最优参数α,计算超平面后进行分类.SMO方法可以将大优化问题分解为多个小优化问题求解,大大简化求 ...
- share_ptr
1.为了保证不会重复释放内存,auto_ptr的copy构造和copy赋值都是破坏性操作,执行后,导致右操作数的指针为0.这就出现了,copy构造或者copy赋值后,两个对象不相等了. 2.auto_ ...