转自:http://www.cnblogs.com/zmkeil/archive/2013/04/17/3027385.html
对于HG255D参照这里:http://www.right.com.cn/forum/forum.php?mod=viewthread&tid=131349
这里也可以参考:http://blog.csdn.net/eldn__/article/details/9707065

(本文在20160815有更新)

1.OpenWRT平台搭建

1.1环境准备

系统Ubuntu12.04(我用的是最新debian 7.3.0),先安装一些必要的软件包:apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev git-core gawk libssl-dev

注意,由于版本问题,需先将系统update,然后安装这些软件包,否则会导致gcc与g++版本冲突的问题。

1.2编译固件

首先下载OpenWRT:

svn checkout svn://svn.openwrt.org/openwrt/trunk。 (这个鬼东西行翻墙,大家各施各法吧)

20160815更新,好像svn.openwrt.org不好用了,连翻了强都不行,如果喜欢用trunk的,可以改用github的更方便一点:

svn checkout https://github.com/openwrt/openwrt.git

如果你想用旧版的,可以用git.openwrt.org的源码:

git clone git://git.openwrt.org/15.05/openwrt.git

20190323更新:获取最新的源码

    git clone https://git.openwrt.org/openwrt/openwrt.git/

或:

    git clone https://github.com/openwrt/openwrt.git

(如需要编译指定版本的openwrt,可以参考这里:

https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=431935)

若是之前下载的,可更新一下:

./scripts/feeds update –a

./scripts/feeds install –a    (第一次建议使用 ./feeds install -a -p luci命令,可以在下面的菜单中增加LUCI更多的选择项)

注意这里下载的只是编译固件用的控制文件,不包含源代码。

对于HG255D要修改一下:

找到trunk/target/linux/ramips/image/目录下的Makefile文件。搜索HG255D,把下列2行前面的#去掉

然后运行make menuconfig,这里注意3点:

  1. Target system,这个一定要选准;(我是给HG255D用的,所以选:(Ralink RT288x/RT3xxx))

  2. Target Image,选择固件image的格式,这里我们准备在x86的VM上运行,可以选择VMDK,直接编译出硬盘文件,并且包含grub

  3. 根据需要选择软件包,要想通过web登陆配置,4个地方要选:Base system-->uci,Libraries-->libuci-lua,LuCI全选,Network-->uhttpd。

  4. Target Profile选HG255D

注意软件可以选择M或y,前者表示只编译出.ipk安装包文件,用户需要时将它上载到路由器中,opkg install xx.ipk安装;后者表示直接编译在固件中。

最后运行make (第一次建议用 make V=99可以看到编译过程的信息,包括出错信息,以后可以直接用make -j 2运用多内核提高编译速度),开始编译。自动创建dl、build_dir两个目录,依次调用tools、toolchain、 package、target目录中的Makefile编译(前两者是工具,然后用这工具编译后两者)。自动根据指示下载所需的源码包,放在dl目录下,然后解压到build_dir目录中编译。Build_dir中有3个子目录,host中是与平台无关的一些工具,toolchain中是特定平台的工具,ulibc中是c库、应用程序等。

可以先下载一些包到/dl目录:

autoconf-2.68.tar.bz2
automake-1.11.6.tar.xz
bc-1.06.95.tar.bz2
binutils-2.22.tar.bz2
bison-3.0.2.tar.xz
cmake-2.8.12.2.tar.gz
e2fsprogs-1.42.8.tar.gz
findutils-4.4.2.tar.gz
flex-2.5.38.tar.bz2
gcc-linaro-4.8-2014.01.tar.xz
gdb-linaro-7.6-2013.05.tar.bz2
genext2fs-1.4.1.tar.gz
gmp-5.1.3.tar.xz
ipkg-utils-1.7.tar.gz
libelf-0.8.13.tar.gz
libtool-2.4.tar.gz
linux-3.10.32.tar.xz
lzma-4.65.tar.bz2
m4-1.4.17.tar.xz
mklibs_0.1.35.tar.gz
mm-common-0.9.6.tar.xz
mpc-1.0.1.tar.gz
mpfr-3.1.2.tar.bz2
mtd-utils-1.4.5.tar.gz
patch-2.7.1.tar.xz
pkg-config-0.28.tar.gz
quilt-0.61.tar.gz
scons-2.3.0.tar.gz
sed-4.2.2.tar.bz2
squashfs4.2.tar.gz
u-boot-2013.07-rc1.tar.bz2
uClibc-0.9.33.2.tar.bz2
util-macros-1.11.0.tar.bz2
xfce4-dev-tools-4.8.0.tar.bz2
xz-5.0.5.tar.bz2
yaffs2_android-2008-12-18.tar.bz2

1.3VMware中运行OpenWRT

启动VMware,新建虚拟机(Custom),以编译出的VMDK文件为硬盘,直接power on就可进入OpenWRT。在目录/bin,/sur/bin等目录下,有我们选择安装的应用程序的可执行文件,运行他们实现各种功能。

2.网络配置的简单示例

我们在虚拟机下运行,虚拟机的网络模式有三种:nat、host-only、bridge。并且安装完 VMware后,主机中新增了两块虚拟网卡VMNet1,VMnet8,前者相当于所有host-only模式的VM的交换机,所有host-only模式的VM可通过它相互通信,但不同与外界通信;后者相当于所有nat模式的VM的交换机,不同之处在于,它可以NAT到主机的实际网口,去访问外网(即相当于有个上行口)。Bridge模式指利用主机的实际网口与外界通信。

我们为OpenWRT的VM准备两块网卡,一块是bridge模式,另一块是host-only模式;同时运行另一VM(redHat),只有一块host-only模式的网卡,如下图:

OpenWRT的网络配置文件为/etc/config/network,vim写入如下

然后重启网络 /etc/init.d/network restart

再写入两条路由

Route add -net 10.10.10.0/24 dev eth0

Route add default dev eth1

再在VM-RedHat中写入两条路由(注意dev和gw的区别)

Route add -net 10.10.10.0/24 dev eth0

Route add default gw 10.10.10.130

这样,实际局域网的主机就可通过OpenWRT这个路由器与host-only虚拟局域网的主机通信了,当然前提是各主机应设一条网关路由到192.168.68.187。

3.应用程序开发

应用程序开发方法有两种。

3.1方法一

利用menuconfig,直接与固件一起编译。即预先把相关文件放到trunk/package/myapp目录下,make menuconfig时找到该软件包,选择(可以选y编译进固件中,或M只编译成.ipk包)即可。

比如,在package目录下mkdir helloworld,里面放些什么则至关重要,可以参考其他包的内容,其中的Makefile的最关键的,其他都可选,比如我们这里还放了一个src子目录,里面放helloworld.c ,Makefile(它是真正编译用的)。

Makefile的内容可参考模板,一般分为很多节,第一节一般说明程序的名称、版本等,第二节说明该软件包的基本属性(它是一般包,还是kernel包,SECTION,CATEGORY字段说明其在menuconfig中的位置,一定要写准确,该包的依赖关系等)。注意 Makefile中Tab符不能乱用,一般表示command,这里的属性字段不能用Tab,只能用空格(由emasc中的高亮显示可看出差别)。

后面几节描述了它的编译安装方法。一般就是把src里的内容copy到build_dir/uClib下,然后用toolchain来编译,最后install一节可以指明该app在固件中被放在哪个目录下(/bin,或/usr/bin等)。

3.2方法二

利用SDK,就像android开发一样,利用sdk编译出软件安装包,上传到设备,安装即可使用。首先在 make menuconfig的时候,把build SDK选项选上,那么,固件编译好后,在trunk/bin/x86下就有一个SDK.tar文件,解压,进入里面。

可以发现里面的内容和trunk主目录下的非常相似,也有package,build_dir,dl等目录,实际上它正是模拟了一个固件的编译环境。这样就简单了,如方法一所述,在package目录下建立我们的app子目录,放入必要的文件,然后退回到SDK目录,直接make即可。编译好的ipk包在SDK/bin/x86/package下。

至于上传ipk包到路由器上,对于实际设备,可用厂商提供的sftp、putty等工具,在VMware上没找到什么方法,装个ftp?

3.3为什么用ipk包

Ipk包是openwrt特有的,为什么用这个呢,直接把可执行文件copy到设备中不就行了吗?回头看看 helloworld中的Makefile的最后一节install就明白了,ipk包里不仅有可执行文件,还有安装该文件的具体指示,甚至还可以有其它一些配置、启动文件,以及它们的安装方式。

联想network命令就是这样的,进到package/conf下,看它的makefile最后,果然就是拷贝文件。

OpenWRT平台搭建及简单应用[转帖]+华为HG255D编译实践(20190323更新)相关推荐

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

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

  2. 性能测试平台搭建及简单使用(jmeter分布式+influxdb2.0+grafana)附性能测试报告

    目录 一.jmeter分布式配置 1.分布式介绍 2.配置JDK 3.slave机器配置(linux系统为例,windows资源杂乱不建议使用) 4.master机器配置(windows系统为例,作为 ...

  3. 【智能路由器】新手openwrt平台搭建

    [智能路由器]系列文章连接 http://blog.csdn.net/u012819339/article/category/5803489 从本篇文章开始,后续文章将会转为在openwrt上的开发, ...

  4. 海思3559平台搭建:简单烧写说明

    前言   在板子上存在uboot的前提下进行如下操作,如果板子上从未烧写过uboot,就需要使用 HiTool 工具进行烧写.HiTool 工具位置放在 Hi3559A***/01.software/ ...

  5. 计算机oj平台搭建应该学什么,青岛大学开源OJ平台搭建

    源码地址为:https://github.com/QingdaoU/OnlineJudge 可参考的文档为:https://github.com/QingdaoU/OnlineJudgeDeploy/ ...

  6. 从零开始,搭建一个简单的UVM验证平台(一)

    前言: 这篇系列将从0开始搭建一个UVM验证平台,来帮助一些学习了SV和UVM知识,但对搭建完整的验证环境没有概念的朋友. UVM前置基础: 1.UVM基础-factory机制.phase机制 2.U ...

  7. 影院平台搭建 - (2)FLV发布系统的简单搭建

    使用Wowza Media Server进行FLV的发布,相对于Adobe自己的解决方案的对比在这里.RTMP和HTTP的对比在这里.(需要FQ才能看) 最新Wowza Media Server Pr ...

  8. jeecg低代码平台搭建及代码简单代码生成

    jeecg低代码平台搭建及基础代码生成 到官网下载源码 jeecg官网http://www.jeecg.com/ 点击源码下载 点击后会跳转到https://github.com/jeecgboot/ ...

  9. openwrt 环境搭建(win10子系统)

    因为工作需要,我一个安卓程序开发,做了很多关于openwrt相关的内容,也不说喜不喜欢吧,反正应该对得起自己的工资.废话不多说,进入主题吧! 前面我写了一篇在Windows10上搭建Ubuntu子系统 ...

  10. 基于认证的代理平台搭建配置squid-20130730

    基于认证的代理平台搭建配置squid-20130730 功能:通过squid代理实现 (1)基于用户名密码认证的出口ip路由选择 (2)基于client源ip的出口ip路由选择 (3)基于连接本机ip ...

最新文章

  1. 互联网垂直社交创业新形态——ThinkSNS
  2. 计算机项目管理报告,《软件项目管理》报告.doc
  3. multisim怎么设置晶体管rbe_Multisim 10在单管共射放大电路中的应用
  4. c++并发编程实战_Java 并发编程实战:JAVA中断线程几种基本方法
  5. html选项卡_适用于Mac的最佳HTML文本编辑器,编码开发必备
  6. 蓝桥杯(java)阶乘计算,输入一个正整数n,输出n!的值。(高精度计算,用到数组)
  7. MATLAB 句柄函数记录——多变量
  8. 研发管理(2)---技术总监的三板斧
  9. Linux命令(1)—— xargs 命令
  10. 自然语言处理——句子的相似度
  11. java复杂的代码做程序_摆脱复杂烧脑的程序代码,利用快速开发平台轻轻松松做软件...
  12. 利用cookies登录QQ空间
  13. Java Mysql工具类封装
  14. java调用opencc进行中文简体繁体转换
  15. 微信、QQ、支付宝运动步数自定义小工具
  16. python中mod是什么意思_【python中,mod_python到底做了些什么呢?】mod python 教程
  17. java jp2launcher.exe_atitit. applet 浏览器插件 控件 的环境,开发,提示总结o9o
  18. 超级应用/_超级应用
  19. git如何在某个分支下创建分支
  20. 视网膜电图特征可以检测成人的抑郁状态和治疗反应:一种机器学习方法

热门文章

  1. 视频教程-java项目实战之欢乐斗地主游戏开发教程 毕业项目课程设计带源码-Java
  2. 线性代数及其应用(第三版)1.7节习题解答
  3. JavaScript表单提交
  4. C语言学习心得 Caiwentao
  5. Delphi XE10.4 安装AlphaControls15.12
  6. 卸载Notepad++
  7. java单元测试(@Test)
  8. c语言中不带任何修饰符的浮点常量是按,C语言练习题参考答案
  9. 「干货」Web安全红队外围信息收集「详细总结」
  10. 实时操作系统分类、特点及实现原理