转自: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。 (这个鬼东西行FQ,大家各施各法吧)

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)

git branch -a
  
git checkout 想要的branch    (例如:

openwrt@bogon:~/openwrt$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/lede-17.01
  remotes/origin/master
  remotes/origin/openwrt-18.06
openwrt@bogon:~/openwrt$ git checkout openwrt-18.06
Branch openwrt-18.06 set up to track remote branch openwrt-18.06 from origin.
Switched to a new branch 'openwrt-18.06'
openwrt@bogon:~/openwrt$

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

./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点:

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

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

根据需要选择软件包,要想通过web登陆配置,4个地方要选:Base system-->uci,Libraries-->libuci-lua,LuCI全选,Network-->uhttpd。
    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项目开发笔记]:O ...

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

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

  3. HustOJ平台搭建

    HustOJ平台搭建非常简单,首先为了排除一些不必要的故障,可以使用阿里云的服务器更新系统盘让系统盘初始化保持在没有其他包依赖的环境下及其使用root用户. 1.针对Ubuntu14.04(根据官方文 ...

  4. 【iOS】Jenkins Gitlab持续集成打包平台搭建

    Jenkins Gitlab持续集成打包平台搭建 SkySeraph July. 18th 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点: ...

  5. hadoop伪分布式平台搭建(centos 6.3)

    最近要写一个数据量较大的程序,所以想搭建一个hbase平台试试.搭建hbase伪分布式平台,需要先搭建hadoop平台.本文主要介绍伪分布式平台搭建过程. 目录: 一.前言 二.环境搭建 三.命令测试 ...

  6. Android中NDK的搭建及简单使用 Android.mk相关介绍 JNI的使用

    Android中NDK的搭建及简单使用: 使用NDK,简述其重要步骤:.搭建NDK环境(作用:用于自动生成jni下的.c对应的so文件)---到Android NDK官网或Android官网下载ndk ...

  7. LNMP平台搭建---Nginx安装篇

    在上一篇博文<LNMP平台搭建---Linux系统安装篇>中,我们安装了CentOS版本的Linux操作系统,现在,我们来安装一个Web服务器,大标题写着LNMP,其中的N就是Nginx, ...

  8. Storm on Yarn :原理分析+平台搭建

    Storm on YARN: Storm on YARN被视为大规模Web应用与传统企业应用之间的桥梁.它将Storm事件处理平台与YARN(Yet Another Resource Negotiat ...

  9. LAMP平台搭建菜鸟入门级实验

    LAMP平台搭建(菜鸟入门级) mysql 安装: (1)二进制安装  二进制安装 ,执行解压配置即可.无须执行三布安装. (2)源码编译安装 安装准备工作: (1)查看系统配置:#uname -a/ ...

随机推荐

  1. MySQL必知必会第十一章-

    使用数据处理函数 大多数SQL支持以下类型的函数: 1> 文本函数:用于处理文本串(删除或填充值,转换值为大写或小写) 2> 数值函数:用于在数值数据上进行算术操作(返回绝对值,进行代数运 ...

  2. 使用 logrotate 清理日志

    Linux 中配置 logrotate 程序,它可以自动执行日志文件的轮换.压缩.删除和用邮件发出. Linux账号密码过期会导致crontab作业不能执行 Authentication token ...

  3. python selenium-webdriver 元素操作之鼠标操作(四)

    上节内容主要说明了元素的定位,本节内容说要说对元素的操作,元素的操作分为两部分一部分是鼠标的操作,另一种是对键盘对元素的操作,下面我们主要讲解一下鼠标对元素的操作. webdriver 模块中几种比较 ...

  4. ASP.NET MVC 枚举类型转LIST CONTROL控件

    在实际应用中,我们经常会用到下拉框.多选.单选等类似的控件,我们可以统称他们为List Control,他们可以说都是一种类型的控件,相同之处都是由一个或一组键值对的形式的数据进行绑定渲染而成的. 这 ...

  5. Java annotation浅析

    自定义annotation @Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.FIELD,ElementType.M ...

  6. <ROS> NodeHandle句柄

    作者:jack_20 原文:https://blog.csdn.net/jack_20/article/details/70746736 1.句柄可以让你通过构造函数指定命名空间 ros::NodeH ...

  7. OpenLayers加载谷歌地图服务

    谷歌地图的地址如下: 谷歌交通地图地址:http://www.google.cn/maps/vt/pb=!1m4!1m3!1i{z}!2i{x}!3i{y}!2m3!1e0!2sm!3i3800725 ...

  8. 前端-JavaScript练习2

    用户输入一个年份,判断这个年是否是闰年. 判断闰年条件: ① 非整百年数除以4,无余为闰,有余不闰: ② 整百年数除以400,无余为闰,有余不闰. 比如: 2000年,整百数年,就要用②公式,除以40 ...

  9. UIView和CALayer区别

    (1)首先UIView可以响应用户的触摸事件,Layer不可以. (2)View中frame getter方法,bounds和center,UIView并没有做什么工作:它只是简单的各自调用它底层的C ...

  10. Java tomcat Several ports (8005, 8080, 8009) required by Tomcat v9.0 Server at localhost

    关于 下面问题是因为(8005, 8080, 8009) 被原tomcat占用了. Several ports (8005, 8080, 8009) required by Tomcat v9.0 S ...