[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html

正文:

昨晚上熬夜写了[Openwrt项目开发笔记]:Openwrt平台搭建(一),虽然洋洋洒洒地写了不少东西,但我还是感觉忽略的一些东西。在本文中,我试着将我能想到的一些点列出来:

一、关于Openwrt版本的选择

  Openwrt官方wiki:http://wiki.openwrt.org/about/history 列出了Openwrt的版本演变历史。

  (1)可以看到我所选择的Attitude_adjustment为目前最新的稳定版本。

  (2)由于我还有一台Netgear Wndr3700路由器,所以我也尝试过编译backfire10.03。

  (3)主干版本trunk,是持续变化的一个版本,对于开发者来说,是一个既爱又恨的版本。一则,trunk版本往往对新出的硬件是最早提供支持的,开发者可以针对新出的硬件做开发;二则,trunk版本变化较大,往往在上一个版本支持的路由产品,在下一个版本中可能由于Bug较多而被舍弃,对开发者造成困扰。

  (4)需要特别的指出的是,在国内也有一个团队在做基于Openwrt的开源项目,其内部开发版本为Openwrt-DreamBox,大家如果有兴趣可以参与一下https://dev.openwrt.org.cn/wiki/WikiStart

  官方给出的Openwrt的版本路线图如下,有兴趣的朋友可以关注一下:

  

  (图片转自Openwrt官方wiki http://wiki.openwrt.org/about/history )

二、关于Openwrt的编译

1. feeds机制  

  传统的Linux系统在安装或者编译某一个软件的时候,会检查其依赖库是否安装,如果没有安装,则会报错,安装或编译退出。

  这种机制使得开发者在安装一个软件之前,不得不查找该软件所需的依赖库,并手动去安装这些软件,有时候碰到比较娇贵的软件时,嵌套式的安装依赖文件,会使得开发者头昏脑涨。

  好在Openwrt通过引入feeds机制,较好的解决了这个问题。下文是Openwrt的官方wiki对于feeds的表述:

"In OpenWrt, a "feed" is a collection of packages which share a common location. Feeds may reside on a remote server, in a version control system, on the local filesystem, orin any other location addressable by a single name (path/URL) over a protocol with a supported feed method."
Feeds are additional predefined package build recipes for OpenWrt Buildroot.

  我个人的理解是: 在Openwrt系统中,“feed”是一系列的软件包,这些软件包需要通过一个统一的接口地址进行访问。“feed”软件包中的软件包可能分布在远程服务器上、在svn上、在本地文件系统中或者其他的地方,用户可以通过一种支持feed机制的协议,通过同一个地址进行访问。(有些绕,简单来说,就是系统将一系列的软件包进行了地址映射,只能通过同一个接口进行访问)。

  这样做有什么好处呢?我们下载的Openwrt源码是较为纯净的系统,feeds提供了我们在编译固件时所需的的许多额外扩展软件。

  

  当我们下载了Openwrt对应源码之后,进行如下操作:

$ ./scripts/feeds update -a
$ ./scripts/feeds install -a

上述操作,就是从feeds提供的接口地址将Openwrt所需的一些扩展软件先行下载。

2. Openwrt在编译的过程中,系统会根据Makefile自动的去判断和下载软件的依赖库。

  在Makefile文件中,设置了自动查找软件依赖。如果某个依赖文件在本地文件系统中不存在,那么系统就会根据feeds所示下载路径去下载对应的依赖文件。在首次编译的过程中,之所以耗时比后续编译时间长,其中一个原因就是系统需要下载很多的依赖文件。特别地,在TC编译Openwrt的时候,会出现有些依赖文件所在的url无法访问,从而报错。那么,没有别的办法了,要么在网上查找对应的替代源,要么就FQ吧。。。

三、关于Openwrt的固件烧写

这个部分呢,没有统一的标准,针对不同的路由硬件环境,其烧写的方式不同。

有些设备可以通过web的方式进行升级,有些则没有提供相应的接口。

有些设备可以通过tftp的方式进行升级,而有些不能。

此处,我就不细讲了,仅把我所使用的Netgear Wndr3700v1固件烧写的方式列一下,如果有对应Wndr3700 v2,v3以及Wndr3800设备的朋友可以参考一下:

1. 原装官方系统刷Openwrt

  这个过程极为简单

  (1)下载对应路由型号的Openwrt映像文件,我的设备Wndr3700 v1,因此固件为 “openwrt-ar71xx-wndr3700-squashfs-factory.img”

  (2) 将PC用无线连接到路由器;

  (3) 通过浏览器输入“192.168.1.1”进入路由器的管理界面。

    进入“高级”》》“管理”》》“路由器升级”,点击“浏览”,从本地文件夹中找到Openwrt固件,点击上传。之后就是大概4~5分钟的等待,当电源变成绿灯,并且不再闪烁时,路由已经成功启动了。

    (p.s. 此过程设备不能断电,否则可能发生未知的情况)

   (4)若成功刷入Openwrt,将PC与路由器通过网线直连的方式(将网线与路由器连接一端插入4个LAN口中任意一个即可)连接。

    将PC的本地网卡IP设置为“192.168.1.X” X可以为2~254 任意一个数字。

    在浏览器中输入“192.168.1.1”,如果能进入Openwrt欢迎界面,则成功输入Openwrt。

2.通过TFTP的方式刷回原版官方固件

  对于Netgear Wndr3700来说,该设备背面有一个红色圆孔“Restore Factory Settings”,我们需要通过该按钮进行回刷操作。

进入restore factory settings的步骤是这样的:
. 关闭路由器
. 按住Reset键,打开路由器(reset键即为红色圆孔,使用较细的笔尖或者牙签,伸进该圆孔,进行按压,在下一步完成前请勿松手)
  该步骤的功能是擦除Flash,为后续TFTP传入数据做准备。
. 直到power灯开始闪绿色,松开reset键(大约45秒)

  首先在netgear的官网上下载对应固件版本,我以“WNDR3700-V1.0.16.98.img”为例。

  然后将改固件放入C:或者D:的根目录下,打开cmd,进入对应的盘符分区:(WNDR3700-v1.0.16.98.img放在D盘根目录下)

  

  输入如下命令:

具体命令的内容如下:
(1)使用 win+R组合键,输入cmd进入Windows Shell。
(2)进入固件存放位置,我将固件放在D盘根目录下,因此输入下面的命令,跳转到D盘下面:
  C:\Users\Administrater>D:
(3)输入tftp命令上传固件: tftp -i 192.168.1.1 put XXXX.bin ; 其中XXXX.bin 为固件的名称

  

  之后呢,就是默默的等待了(大概1~2分钟),之后路由器会重启。之后进行1中步骤(4)操作。

从下一篇开始,就进入Openwrt软件设置,开始一步一步搭建物联网网关!

转载请注明出处: http://www.cnblogs.com/double-win/ 谢谢!

[Openwrt 项目开发笔记]:Openwrt平台搭建(一)补遗的更多相关文章

  1. [Openwrt 项目开发笔记]:Openwrt平台搭建(一)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 最近开始着手进行Openwrt平台的物联网网关设 ...

  2. [openwrt 项目开发笔记]: 传送门

    “Openwrt 项目开发笔记”系列传送门: [Openwrt 项目开发笔记]:Openwrt平台搭建(一) (2014-07-11 00:11) [Openwrt 项目开发笔记]:Openwrt平台 ...

  3. [Openwrt 项目开发笔记]:Samba服务&vsFTP服务(四)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我们讲述了如何在路由器上挂载U盘,以 ...

  4. [Openwrt 项目开发笔记]:PHP+Nginx安装(七)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我们已经搭建了MySQL数据库了,因 ...

  5. [Openwrt 项目开发笔记]:MySQL配置(六)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在本人的项目中,运行在路由器上的服务器采用Ngi ...

  6. [Openwrt 项目开发笔记]:Openwrt必要设置(二)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 前面的两篇blog中,我将如何搭建Openwrt ...

  7. [Openwrt 项目开发笔记]:DDNS设置(五)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我主要讲述了如何在Openwrt上安 ...

  8. [Openwrt 项目开发笔记]:USB挂载& U盘启动(三)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一篇中,我结合Netgear Wndr370 ...

  9. C# 项目开发笔记

    这里主要记录一些容易错的内容,在项目开发中总结出来的经验和教训. 1 语法 (1)判断float是否为Nan,不能使用 xxx = flaot.Nan去做,要使用float.IsNan去做. (2)u ...

随机推荐

  1. Asp.net中FileUpload控件实现图片上传并带预览显示

    单一图片上传——“选择”+“上传”,.NET默认模式: 1.实现原理:     采用FileUpload控件默认的使用方式,先由“选择”按钮选择图片,然后单击“上传”按钮完成上传,并可在“上传”按钮的 ...

  2. TIME_WAIT状态的作用

    TIME_WAIT状态: 主动关闭的那端最后经历的状态,一般为2MSL秒(1~4分钟). 两个原因: 保证当最后一个ack丢失后,能收到对端重传的fin包. 保证ack包消失,不会影响下一个连接. 关 ...

  3. .NET格式化字符串详细说明

    DataFormatString属性:{0:Bxx}B为取值类型 C 以货币格式显示数值. D 以十进制格式显示数值. E 以科学记数法(指数)格式显示数值. F 以固定格式显示数值. G 以常规格式 ...

  4. iOS 7.0.2 的bug记录

    在iOS 7.0.2 版本上,如果从主屏幕进入webapp且webapp进入全屏模式,那么alert和修改window.location到某产品对应的itunes下载页面则无效. 可参考下面的代码示例 ...

  5. JSF控件的immediate属性和页面生命周期

    JSF中的控件基本都有immediate属性,对于这个属性的使用总结如下,更详细内容可参考Oracle官方文档. 1,为了更好的理解immediate属性,先看一下JSF页面的生命周期: JSF页面的 ...

  6. js 递归调用

    js递归调用 function fact(num) { ) { ; } else { ); } } 以下代码可导致出错: var anotherFact = fact; fact = null; al ...

  7. C#设计模式之简单工厂模式(过渡模式)

    一.引言 之所以写这个系列,是了为了自己更好的理解设计模式,也为新手提供一些帮助,我都是用最简单的.最生活化的实例来说明.在上一篇文章中讲解了单例模式,今天就给大家讲一个比较简单的模式——简单工厂模式 ...

  8. mysql thread_cache 和 thread_pool 之间的关系

    线程池是Mysql5.6的一个核心功能,对 于服务器应用而言,无论是web应用服务还是DB服务,高并发请求始终是一个绕不开的话题.当有大量请求并发访问时,一定伴随着资源的不断创建和释放,导 致资源利用 ...

  9. boost基础环境搭建

    因为现在手上的老的基类库经常出现丢包,以及从ServiceAClient 发送消息到 ServiceBServer时出现消息失败的情况,以及现有的莫名其妙的内存泄露的问题,以及目前还是c++0x,准确 ...

  10. git 记住用户名和密码

    git 记住用户名和密码 在使用 git 时,如果用的是 HTTPS 的方式,则每次提交,都会让输入用户名和密码,久而久之,就会感觉非常麻烦,那么该如何解决呢? 1. 使用 SSH,添加 ssh ke ...