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

时间:2023-01-05 12:24:37

转自: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 :原理分析&plus;平台搭建

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

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

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

随机推荐

  1. 【Aaronyang原创】用linq取出一个集合中重复的数据

    文章已经迁移:http://www.ayjs.net/2013/07/69/ 文章已经迁移:http://www.ayjs.net/2013/07/69/ 文章已经迁移:http://www.ayjs ...

  2. eclipse 好用的快捷键

    Ctrl+Shift+X 把当前选中的文本全部变味小写 Ctrl+Shift+Y 把当前选中的文本全部变为小写 Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定) ...

  3. 移动端常见bug

    meta基础知识 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=device-wid ...

  4. Spark实现K-Means算法

    K-Means算法是一种基于距离的聚类算法,采用迭代的方法,计算出K个聚类中心,把若干个点聚成K类. MLlib实现K-Means算法的原理是,运行多个K-Means算法,每个称为run,返回最好的那 ...

  5. 字体在win10下显示模糊,有锯齿

    目录 系统设置: 修改冲突软件启动设置: vscode: vs2017: atom: gpu软件修改: 参考: 系统设置: 一般为了提高性能,会关闭平滑屏幕字体边缘 修改冲突软件启动设置: 经过 gp ...

  6. 牛客红包OI赛 C 小可爱表白

    据说是个公式题. Code #include<cstdio> #include<cstring> #include<algorithm> using namespa ...

  7. android基础知识:SharedPreferences和PreferenceActivity

    1.android文件存储 对Android系统了解的都知道,Android系统有四种基本的数据保存方法,一是SharedPreference,二是文件,三是SQLite,四是ContentProvi ...

  8. mybatis实战教程&lpar;mybatis in action&rpar;之四&colon;实现关联数据的查询

    有了前面几章的基础,对一些简单的应用是可以处理的,但在实际项目中,经常是关联表的查询,比如最常见到的多对一,一对多等.这些查询是如何处理的呢,这一讲就讲这个问题.我们首先创建一个Article 这个表 ...

  9. 基于WPF系统框架设计&lpar;2&rpar;-Fluent Ribbon之HelloWorld

    Fluent/Ribbon是微软在其最新桌面操作系统Windows 7中使用的图形用户界面. Windows平台的进化,伴随着系统图形界面的重新设计.从Windows XP到Windows Vista ...

  10. hdu 3518 Boring counting 后缀数组 height分组

    题目链接 题意 对于给定的字符串,求有多少个 不重叠的子串 出现次数 \(\geq 2\). 思路 枚举子串长度 \(len\),以此作为分界值来对 \(height\) 值进行划分. 显然,对于每一 ...