操作系统: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)的更多相关文章

  1. 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 ...

  2. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  3. 利用Node.js的Net模块实现一个命令行多人聊天室

    1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...

  4. Node.js:进程、子进程与cluster多核处理模块

    1.process对象 process对象就是处理与进程相关信息的全局对象,不需要require引用,且是EventEmitter的实例. 获取进程信息 process对象提供了很多的API来获取当前 ...

  5. Node.js:理解stream

    Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类 ...

  6. Node.js:Buffer浅谈

    Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意.Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该 ...

  7. node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法

    1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...

  8. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

  9. Node.js入门(一)

    一.Node.js本质上是js的运行环境. 二.可以解析js代码(没有浏览器安全级的限制): 提供系统级的API:1.文件的读写 2.进程的管理 3.网络通信 三.可以关注的四个网站: 1.https ...

随机推荐

  1. Matlab 2018b 新特性

    新特性简要介绍 一.实时编辑器 所创建的脚本不仅可以捕获代码,还可以讲述与人分享的故事.自动化的上下文提示可让您在编程时快速推进,并且将结果与可视化内容和您的代码一起显示. 二.App Designe ...

  2. 【转载】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 ...

  3. DGN格式转化为shp格式 【转】

    其实本来,我就是需要把一个autocad的dwg/dgn格式的东西导入到google earth里面:但是首先我对dwg/dgn格式的东西根本就不熟:其次我拿到的dwg/dgn格式文件是用的HK80 ...

  4. JavaScript hash

    location.hash -- 返回URL#后面的内容,如果没有#,返回空 hash,中文"哈希" 引用网址:http://www.dreamdu.com/javascript/ ...

  5. Morton Code

    莫顿码 ,实现了一维与二维(或多维)的转换.它通过交叉存储两个数的位产生一个数,即莫顿码. 可以应用于为一个整数对产生一个唯一索引. 例如,对于坐标系中的坐标点使用莫顿编码生成的莫顿码,可以唯一索引对 ...

  6. 数据库插入数据返回当前自增主键ID值的方法

    当我们插入一条数据的时候,我们很多时候都想立刻获取当前插入的主键值返回以做它用.我们通常的做法有如下几种: 1. 先 select max(id) +1 ,然后将+1后的值作为主键插入数据库: 2. ...

  7. Android -- Vibrator

    Vibrator                                                                                    public c ...

  8. 当Intellij IDEA 遇到 Mac

    当Intellij IDEA 遇到 Mac alt+insert变为control+N

  9. SVM 总结

    SVM有一个核心函数SMO,也就是序列最小最优化算法.SMO基本是最快的二次规划优化算法,其核心就是找到最优参数α,计算超平面后进行分类.SMO方法可以将大优化问题分解为多个小优化问题求解,大大简化求 ...

  10. share_ptr

    1.为了保证不会重复释放内存,auto_ptr的copy构造和copy赋值都是破坏性操作,执行后,导致右操作数的指针为0.这就出现了,copy构造或者copy赋值后,两个对象不相等了. 2.auto_ ...