zoukankan      html  css  js  c++  java
  • [Openwrt 项目开发笔记]:Openwrt平台搭建(一)补遗

    [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的步骤是这样的: 
    1. 关闭路由器 
    2. 按住Reset键,打开路由器(reset键即为红色圆孔,使用较细的笔尖或者牙签,伸进该圆孔,进行按压,在下一步完成前请勿松手) 
      该步骤的功能是擦除Flash,为后续TFTP传入数据做准备。
    3. 直到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:UsersAdministrater>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/ 谢谢!

  • 相关阅读:
    无线鼠标换电池了
    Jython Interactive Servlet Console YOU WILL NEVER KNOW IT EXECLLENT!!! GOOD
    Accessing Jython from Java Without Using jythonc
    jython podcast cool isnt't it?
    Python里pycurl使用记录
    Creating an Interactive JRuby Console for the Eclipse Environment
    微软为AJAX和jQuery类库提供CDN服务
    Download A File Using Cygwin and cURL
    What is JMRI?这个是做什么用的,我真没看懂但看着又很强大
    用curl 发送指定的大cookie的http/https request
  • 原文地址:https://www.cnblogs.com/double-win/p/3838112.html
Copyright © 2011-2022 走看看