【物联网】 AR9344开发环境的搭建和编译固件
一. 选择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方便,易用性不是很好。(这个问题嘛,可以通过第三方软件进行改进,对于我来说就不是问题了)
二、Openwrt平台搭建
1. 在平台搭建之前,有几点需要说明一下的:
所谓的平台搭建,不仅包括固件的烧写,还包括开发,编译和调试的环境搭建。
Openwrt平台是基于Linux的,其支持虚拟机安装,对于手边没有设备的亲们,可以通过安装虚拟机感受一下(推荐用最新的稳定的ubuntu)。
2. Openwrt开发环境搭建流程(以Atheros 9344为例):
(1)操作系统: Ubuntu12.04 Server。(公司服务器)。
(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版本,这个版本较为稳定,且
进行源码版本更新: update all feeds, re-create index files, install symlinks
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中 make -j8 V=s 用8个线程编译,并且显示编译过程等待漫长的时间之后,如果成功,可在编译目录下 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进行烧写。
此过程难度较高,需要有一定的开发基础。
此外,还有好多方法,在网上都能找到,由于暂时不需要,我就不一一列出了。
本人用tftp烧写固件的:
方法如下:
$ tftp 0x80060000 openwrt-ar71xx-generic-ap135-kernel.bin
$ erase 0x9fe80000 +$filesize
$ cp.b $fileaddr 0x9fe80000 0x160000
$ tftp 0x80060000 openwrt-ar71xx-generic-ap135-rootfs-squashfs.bin
$ erase 0x9f050000 +$filesize
$ cp.b $fileaddr 0x9f050000 $filesize
$ setenv bootcmd 'bootm 0x9fe80000'
$ saveenv
(5) 路由重启,测试
(6) 启动后如下,测试
【物联网】 AR9344开发环境的搭建和编译固件相关推荐
- AR9344开发环境的搭建和编译固件
原文: https://blog.csdn.net/dengjin20104042056/article/details/50440231 一. 选择Openwrt平台的理由 传统的路由器固件是由官方 ...
- 物联网LoRa系列-8:LoRa终端应用程序开发环境的搭建
目录: 一. LoRa终端应用程序开发环境的目标 二. LoRa终端应用程序开发环境的搭建步骤 一. LoRa终端应用程序开发环境的目标 (1)Protel 99SE:是硬件原理图和PCB开发的工具 ...
- 编译vuejs html,VueJs(2)---VueJs开发环境的搭建和讲解index.html如何被渲染
VueJs开发环境的搭建和讲解初始框架 有关如何搭建vue.js框架我这看了一篇文章,自己也根据它进行搭建环境. 接下来对初始的框架进行讲解,只讲index.html是如何被渲染出来的. 一.启动项目 ...
- ESP32开发环境的搭建和 ESP-IDF支持以下调试方法
ESP32开发环境的搭建 ESP-IDF 支持以下调试方法: 一. JTAG 二. GDB调试 三. 日志系统 四. Core Dump 五. esp32 heap 内存管理简析 ESP32开发环境的 ...
- Java开发环境的搭建以及使用eclipse从头一步步创建java项目
原文:出自本人的Linux博客http://blog.csdn.net/unix21/article/details/18813173 一.Java 开发环境的搭建 这里主要说windows环境下怎么 ...
- Java开发环境的搭建以及使用eclipse创建项目
一.Java 开发环境的搭建 这里主要说windows环境下怎么配置Java环境.如果是Linux环境参考本博客另一篇文章即可: Linux环境安装卸载JDK 1.首先安装JDK java的SDK简称 ...
- 《python 与数据挖掘 》一1.3 Python开发环境的搭建
本节书摘来自华章出版社<python 与数据挖掘 >一书中的第1章,第1.3节,作者张良均 杨海宏 何子健 杨 征,更多章节内容可以访问云栖社区"华章计算机"公众号查看 ...
- java刚工作搭建环境_Java开发环境的搭建
一.java 开发环境的搭建 这里主要说的是在windows 环境下怎么配置环境. 1.首先安装JDK 点击下载好的exe文件安装即可. 2.接下来我们需要配置环境变量 xp系统下 右键'我的电脑' ...
- python语言编程环境-day02--编程语言的分类与Python开发环境的搭建
一.编程语言的分类 机器语言:机器语言是二进制代码表示的计算机能够直接识别和执行的一种机器指令的集合. 汇编语言:汇编语言是一种比机器语言稍微高级的编程语言,它使用助记符代表机器指令的操作码,用地址符 ...
最新文章
- ORACLE HANDBOOK系列之十四:变化通知(Change Notification)
- HoloLens开发手记 - 语音输入 Voice input
- 如何开发一个Node脚手架
- 获取当天时间的开始和结束 00:00:00和23:59:59
- HD 1176 免费馅饼 (DP)
- python绘制dotplot
- CenterOS 服务器之MySQL卸载与安装,并远程连接
- linux网络文件系统包括,Linux文件系统
- 如何将lnmp 0.5里面的php5.2.14升级到php 5.3.3???
- Spark中导入scalax
- Spring mvc @ModelAttribute
- Text-CNN 和 fastText
- linux vi 命令详解
- linux opendir,linux opendir和readdir的使用
- zip命令 – 压缩文件
- java 二维卡尔曼滤波_卡尔曼滤波 – Kalman Filtering
- android 7 评测,iQOO 7 评测:性能出众,操控全面升级的横屏旗舰
- 数据库应用——MyCat代理MySQL集群
- 【金融数量分析之:马科维茨均值方差模型和CAPM定价模型的代码实现】
- 谷歌阻止苹果,谁来阻止谷歌
热门文章
- 使用while 循环实现输出 1, 2, 3, 4, 5, 7, 8, 9, 11, 12(提示:输出结果为一行,没有6和10,12后面没有逗号)
- demod函数_MATLAB信号处理工具箱函数 | 学步园
- Java黑皮书课后题第8章:*8.26(行排序)用下面的方法实现一个二维数组中的行排序。返回新数组,且原数组保持不变。编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵
- 正态分布图_用EXCEL简易制作正态分布图
- Docker入门-构建第一个Java程序
- VS2008 Tips #008 如何创建ASP.NET Web 用户控件并包含在Web 页面中
- mongoose 验证
- 九章算法班L3 Dynamic Programming Ⅰ
- 面向对象——案例练习(3)判断两个立方体是否相等
- 20165234 [第二届构建之法论坛] 预培训文档(Java版) 学习总结