[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

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

最后保存设置:

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

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

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

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

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/ 谢谢!

转载于:https://www.cnblogs.com/double-win/p/3836846.html

[Openwrt 项目开发笔记]:Openwrt平台搭建(一)相关推荐

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

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

  2. 尚硅谷前端项目开发笔记

    尚硅谷前端项目开发笔记 B站视频直达,这个项目亮点在于所有 API 请求都并非在组件内编写,而是在组件内使用this.$store.dispatch() 派发任务,再由 Vuex(actions.mu ...

  3. Vue PC商城项目开发笔记与问题汇总

    Vue PC商城项目开发笔记与问题汇总 负责PC端商城项目,这也是人生第一个真正的项目.刚做了一天,就遇到不少问题,在这里列出自己的问题与解决办法,与大家交流,提升自己,希望以后不会掉进同一个坑里. ...

  4. 天天生鲜项目开发笔记

    天天生鲜项目开发笔记 说在前面的话 大学四年,忙忙碌碌,什么都学了,又好像什么都没学,总之要毕业了,毕设题目是"生鲜配送系统",B站上找到了一个天天生鲜的项目开发教程,之后文章记录 ...

  5. 京东投票项目开发笔记

    京东投票项目开发笔记 打开项目 $yarn install / $ npm install: 跑环境(把项目依赖的插件进行安装) $node admin.js: 启服务(把自己的计算机作为服务器,创建 ...

  6. 京东抽奖项目开发笔记

    京东抽奖项目开发笔记 前言: 这是一个独立项目,这个项目会由我们四个人来一起完成,所以首先就要分工合作,我是写前端的,所以我会先把基本的页面写出来 1.注册页 这是注册页的代码 <!DOCTYP ...

  7. 微信公众号项目开发笔记 一

    最近换了新工作,刚刚开始上班.需要为公司开发一个微信公众号的功能,对接系统erp接口.做一个物流信息手机签收的功能.使用.net MV4 进行项目开发,引用第三方库做微信公众号配置功能.因为之前做过公 ...

  8. 黑马瑞吉外卖项目开发笔记

    目录 软件开发整体介绍 开发流程 角色分工 软件环境 瑞吉外卖项目介绍 项目介绍 产品原型展示 技术选型 功能架构 角色 开发环境搭建 数据库环境搭建 Maven环境搭建 1.直接创建maven项目( ...

  9. 微社区项目开发笔记(后端篇)

    废话不说,先来张包结构的图片: 很明显,采用了经典MVC三层架构.除了架构所需的包以外,还添加了一个工具包tool,里面有MD5加密和生成验证码的类,具体代码如下: 1 package com.jiy ...

最新文章

  1. python运行不了程序代码_python怎么运行代码程序
  2. 统计学中的自由度 Degrees of freedom (statistics)
  3. 第一章 简单工厂模式
  4. 闲着无聊,今天就写个 dockerfile 定制 tomcat+nginx 集群
  5. IDEA:No SLF4J providers were found.
  6. 使用github托管代码以及github一些最常用的命令
  7. 在linux安装windows应用商店,Ubuntu 已在微软官方应用商店 Windows Store 上免费提供下载...
  8. 谁说中国没有 Linus?中国初代 IT 宗师封神榜
  9. Echarts地图的基本使用方法
  10. 程序设计基础II学习笔记
  11. cmt obm odm 代工模式oem_工厂有OEM,ODM,OBM之分吧,分别是什么意思?
  12. ISSN码和ISBN码的区别
  13. hotmail手机端_hotmail邮箱手机版
  14. 数据治理【数据安全管理】
  15. java实现每天定时执行任务,Spring Task定时任务每天零点执行一次的操作
  16. 【SAP Basis】SAP用户账号管理
  17. php微信支付需要哪些设置,如何申请和配置微信支付接口?
  18. shell脚本之遍历字符串数组
  19. c++未定义的引用问题总结
  20. 嵌入式——独立按键控制LED显示二进制

热门文章

  1. ubuntu安装Qt5.12
  2. 产品经理(21) #数据分析
  3. CSDN的Blog怎么了?
  4. 台达服务器XML文件,台达BA OPC XML DA使用方法 - 副本.docx
  5. 【数据压缩】调用VFW库对无压缩avi的解封装
  6. 物联网毕设 -- 智能花盆系统(蓝牙+APP)
  7. React——脚手架创建、基本操作、Typescript
  8. Linux开源IM GGTalk 8.0发布,支持在统信UOS、银河麒麟上运行!
  9. 音标课件软件测试,软件测试常用单词-字体又大又音标的哦!.doc
  10. 解决端口被占用的方法(查看端口和关闭端口)