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

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

    正文:

    最近开始着手进行Openwrt平台的物联网网关设计,思路有些乱,通过笔记的方式进行记录和整理。

    声明: 在本文中,有些内容摘自网上,我进行了整合,因此出处不明,在此对原文作者致歉!

    -----------------------------------------------------(分割线)-------------------------------------------------------

    一. 选择Openwrt平台的理由

    传统的路由器固件是由官方提供的。这些固件是不开源的,而且这些路由器的功能也比较单一,很难满足日益变化的智能家居需求。因此,在构建物联网核心时,需要考虑第三方固件平台。

    Openwrt、DD-Wrt以及Tomato是三个最为著名的第三方路由器固件平台。当然还有其他一些更加小众的版本,和很多从这三大固件衍生出来的修改版固件,在此我就不赘述了。

    选择Openwrt而不选择DD-Wrt或者Tomato的理由如下:

    1. DD-WRT:是三个固件平台中第三方软件支持最为丰富一个平台。

    对于新的路由器的支持也是非常迅速的。然而,正是由于各种丰富的软件或工具的加入,导致DD-WRT的系统不稳定,经常会出现Bug,使得用户体验不友好。往往在一个版本中修改过的Bug,在下一次版本check的时候,又会出现,对于开发者来说比较头疼。

    此外,DD-WRT对于无线信号处理方面能力较弱,Qos功能更是被许多玩家吐槽。(由于智能家居需要多设备同时接入,并且不同设备之间会存在流量的冲突,因此Qos显得比较重要,基于该原因)

    2. Tomato:官方的Tomato固件是三个平台中最为稳定的。

    Tomato较为封闭,对于新的路由器支持力度不够,特别是对于Atheros主控支持力度很小。于是, 我果断放弃了Tomato。

    3. Openwrt:三大固件中扩展性最好的。

    对于版本的控制较为严谨,通常以往出现的bug在新的版本中极少出现,在稳定性上较之DD-WRT有了很大的提升。

    Openwrt对于Qos的功能做了优化,其性能可以媲美Tomato。

    Openwrt是基于Linux的,适合开发者进行二次开发。(此外,Openwrt的固件有许多功能是远超过路由器本身的功能的,例如samba局域网文件共享,transmission脱机下载,ushare,uPnP等),这正是我想要的!!

    当然,Openwrt本身的web,luci界面是比较丑的,系统设置也没有DD-WRT方便,易用性不是很好。(这个问题嘛,可以通过第三方软件进行改进,对于我来说就不是问题了)

    4. 其他平台的固件,我就没有深究了(在此声明一下,并非其他平台的固件不好,只是开发方便,通用固件的使用率高一些,在开发中遇到问题也更方便查找)。

    二、Openwrt平台搭建

    1. 在平台搭建之前,有几点需要说明一下的:

    所谓的平台搭建,不仅包括固件的烧写,还包括开发,编译和调试的环境搭建。

    Openwrt平台是基于Linux的,其支持虚拟机安装,对于手边没有设备的亲们,可以通过安装虚拟机感受一下(木有图形界面,需要命令行控制)。

    2. Openwrt开发环境搭建流程(仅列出我本人所搭建的环境,以Atheros 9344为例):

    (1)操作系统: Ubuntu12.04。(版本有点老,推荐使用更行的版本)。

    (2)在Ubuntu下搭建Openwrt开发环境:

    安装依赖库:

    apt-get install g++
    apt-get install libncurses5-dev 
    apt-get install zlib1g-dev 
    apt-get install bison 
    apt-get install flex 
    apt-get install unzip 
    apt-get install autoconf 
    apt-get install gawk 
    apt-get install make 
    apt-get install gettext 
    apt-get install gcc
    apt-get install binutils 
    apt-get install patch 
    apt-get install bzip2 
    apt-get install libz-dev 
    apt-get install asciidoc 
    apt-get install subversion

    下载官方源码(以Atheros9344为例):

    cd /home/XXX# XXX: user name 
    mkdir attitude_adjustment 
    svn co svn://svn.openwrt.org/openwrt/tags/attitude_adjustment_12.09

    上述命令,会将svn上的源码check到本地attitude_adjustment目录下.

    我使用的是attitude_adjustment版本,这个版本较为稳定,且

    进行源码版本更新:

    cd attitude_adjustment/
    svn up
    ./scripts/feeds update -a 
    ./scripts/feeds install -a

    到目前为止,Openwrt的开发环境已经搭好了.

    (3)Openwrt系统的首次编译(p.s. 在编译过程中,程序会自动通过feed机制,在网上下载相应的依赖文件,这要求编译者所在网络环境良好!):

    进行环境检查,查看编译所需依赖库是否都安装:

    make defconfig

    若提示有某个依赖库没有安装,请按照提示按照对应的依赖库. 直到上述检查无返回。

    进行编译配置:

    make menuconfig

    image

    对目标固件进行配置. 由于首次编译时间会较长,因此我创建一个无外加软件的固件:(下面三幅图,分别对应于Target System,Subtarget和Target Profile)

    image

    image

    image

     

    最后保存设置:

    image

    之后就是漫长的编译的时间了:

    make #默认安装,无提示 make V=99 #显示编译日志,并打印在shell中

    等待漫长的时间之后,如果成功,可在编译目录下 bin/

    image

    可以看到多个.bin文件,这些.bin文件中

    image

    openwrt-ar71xx-generic-db120-kernel.bin:对应于只烧写内核固件

    openwrt-ar71xx-generic-db120-rootfs-squashfs.bin:对应于文件系统固件

    openwrt-ar71xx-generic-db120-squashfs-sysupgrade.bin:对应于完整的固件

    至此,一个可以烧写的固件就编译好了。当然,可以看出这个系统只能将路由器启动,能够正常加电运转,但是其没有任何功能。(在后面,我们需要对其添加各种软件支持,甚至是通过编译内核的方式添加软件应用)

    (4)  固件烧写

    对于固件烧写呢,有多种方式,我仅将我所使用过的方式列出来:

    ++Web在线固件升级,这个一般适用于原厂固件升级,或者Openwrt镜像烧写。此方法难度低,如果固件没有问题并且少些过程中没有断电的话,都能成功烧写。

    ++tftp方式升级,本人使用的Atheros9344路由,机身自带有console口,可以通过网线直连的方式,直接通过PC进行烧写。

          此过程难度较高,需要有一定的开发基础。

    此外,还有好多方法,在网上都能找到,由于暂时不需要,我就不一一列出了。

    (5) 路由重启,测试

    进入这一步,整个开发、编译、调试和烧写的过程就到最后了。

    在后续的文章中,我将会把Openwrt基本设置、USB挂载、USB启动、Samba局域网文件共享、ftp server、Transmission脱机下载等功能一一整理。

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

  • 相关阅读:
    Azkaban的使用
    Azkaban安装
    Kafka 启动失败,报错Corrupt index found以及org.apache.kafka.common.protocol.types.SchemaException: Error reading field 'version': java.nio.BufferUnderflowException
    Kafka 消费者设置分区策略及原理
    Kafka利用Java API自定义生产者,消费者,拦截器,分区器等组件
    zookeeper群起总是有那么几个节点起不来的问题解决
    flume 启动agent报No appenders could be found for logger的解决
    Flume 的监控方式
    Flume 自定义 组件
    Source r1 has been removed due to an error during configuration java.lang.IllegalArgumentException: Required parameter bind must exist and may not be null & 端口无法连接
  • 原文地址:https://www.cnblogs.com/double-win/p/3836846.html
Copyright © 2011-2022 走看看