HG255D[OpenWrt]从入门到精通

来源:互联网 发布:软件用户手册背景 编辑:程序博客网 时间:2024/05/16 09:28

本文针对华为HG255D,但同时具有一定的通用参考价值

一、刷机篇

要想放心大胆的玩学会刷机是少不了的,经过我的反复多次的折腾总结了自己认为稳定而且简单的方法,最终达到刷不死的境界。

1,刷机和恢复教程(参考地址:http://itbbs.pconline.com.cn/15815647.html)

先上两张图:


华为HG255d只要是电信原版的u-boot就刷不死,所以大家可以放心大胆的刷!
(类似电脑BIOS那样,只要这个没坏,可以装系统换来换去,不管砖头还是不转头,只要按住Reast键开机,登陆网页进入刷机模式任刷)真贴心的设置
  

  刷机固件打包下载网盘:http://l7.yunpan.cn/lk/91krrjpbvq
一、刷openwrt
1.前期固件准备:
软件:1102-0x20000_hg255d-squashfs-tftp.checksum2.bin
②openwrt固件:0508-openwrt-ramips-rt305x-hg255d-squashfs-By_shcl.bin
(我用的是shcl版的,感觉还不错,你也可以刷其他版本的)

2.连接网线,设置固定IP地址

 3.刷机过程
打开IE并在地址栏输入http://192.168.1.1/upload.html
用牙签顶住reset键后打开电源,开机后一直保持按住reset键。
回到IE按回车,再以每秒一次的速度刷新网页直到出现升级页面,就会出现刷机画面,这时候可以松开reset键。
(可以按F5刷新,不过我建议在地址栏按回车键,效果比较好……


出现了这个画面,马上上传1102-0x20000_hg255d-squashfs-tftp.checksum2.bin,快速按Update software。上传成功之后,网页页面变为
(这个时候就慢慢等,一开始进入刷机模式,路由器有五六个灯是亮的,等它自动刷好,会自动重启,这是电源灯一闪一闪,最后只有两三个灯亮,就可以确定刷机完成了)

⑤ 自动重启后不要关机,输入192.168.1.1进入管理页,账号root,密码admin,在备份|刷机界面中选择:0508-openwrt-ramips-rt305x-hg255d-squashfs-By_shcl.bin固件再次刷机。



(大概等四五分钟,这期间两三个灯常亮,刷完后会自动重启,电源灯会一闪一闪,之后常亮重启完,再次进入输入192.168.1.1进入管理页,账号root,密码admin,可以设置了~~

二、刷DD-Wrt固件  

因为固件问题,这个DD固件不是原生为这款路由设计的,而是华硕RTN13UDD固件,因为硬件大致相同,所以可以混用
1.前期固件准备:
软件:1102-0x20000_hg255d-squashfs-tftp.checksum2.bin(和刷OpenWrt的那个是一样的)
固件:Asus-RTN13U-r17990.bin(听说这是电信原版uboot最稳定少BUG的固件,当然,你也可以尝试下RTN13U其它固件,反正这路由器只要你不改Uboot是刷不死的)
2.刷机过程,参照刷OpenWrt,过程是一个鸟样
将电脑本地网卡设成固定ip 192.168.1.2 网关留空。
打开IE并在地址栏输入http://192.168.1.1/upload.html
网线连接路由器任意lan口,用牙签顶住reset键后打开电源
选择1102-0x20000_hg255d-squashfs-tftp.checksum2.bin固件后点击升级。
自动重启后不要关机,输入192.168.1.1进入管理页,在备份|刷机界面中选择:Asus-RTN13U-r17990.bin固件再次刷机


三、刷回电信固件
刷机过程也是一样的

将电脑本地网卡设成固定ip 192.168.1.2 网关留空。
打开IE并在地址栏输入http://192.168.1.1/upload.html
网线连接路由器任意lan口,用牙签顶住reset键后打开电源
选择HG255d_telecom.bin固件后点击升级【刷回电信比较简单,刷一次就好,不用刷1102-0x20000_hg255d-squashfs-tftp.checksum2.bin

 等待2-3分钟后原版又回来了(超管账户telecomadmin ---- nE7jA%5m)

2,路由管理方法和软件使用方法(含ipk包的上传安装方法)

用WinSCP在PC和OpenWRT之间传输文件

如果你嫌vi学起来麻烦,不喜欢用vi编辑,那么学会用WinSCPPCOpenWRT间传送文件吧。

仍旧以RT-N11+image文件为例。我们在《在华硕RT-N11+上运行OpenWRT +Asterisk》中提供的编译好的image文件已经提供了对SSH-2的支持,所以可以利用WinSCP工具连接到RT-N11+上方便的实现文件传输。

    实现了PC和OpenWRT之间的文件传输,需要编辑Asterisk配置文件时直接传到PC上编辑,编辑完了再传回去就好了,可以不必再学习相对繁复的vi编辑器。

(1)配置WinSCP联接,注意协议选择SCP

2)点击Login后由于密码未填(为空),WinSCP要求输入密码,我们默认密码为空,直接点OK

3)WinSCP联接成功,可以用鼠标拖动实现PC与RT-N11+之间的文件传输了

4)WinSCP会报个错误,不理它,直接点OK过

5)二、安装使用介绍(常规的安装方法):

1.  通过WinSCP将安装包上传至路由/root/ 目录下,然后在SSH中输入命令:

  opkg install njit8021xclient_1.1-1_brcm63xx.ipk

  另:

  WinSCP使用方法:打开WINSCP,输入主机名192.168.1.1,端口号22,用户名root,密码是你刚才设置的,下面的文件协议选SCP。之后登陆。

二、OpenWrt平台的搭建,含交叉编译平台和SDK(ToolChain)开发环境的搭建

 这里网上教程很多很详细,我就自己实践过的文章推荐给大家

1OpenWrt完整平台的搭建

 

 环境:

Ubuntu 10.04subversionVMware workstation 7.1.3

、安装好后,在左上角“系统”菜单的“首选项”中选择“屏幕保护程序”,然后去掉左下角的“计算机空闲时激活屏幕保护程序”,然后按“关闭”,这个窗口是没有“应用”或“确定”之类的,直接关闭它就会保存。用惯了WINDOWS的用户注意了。为什么要做这步呢因为整个编译过程中有些步骤要等一段时间的,老是自动启用屏幕保护程序,然后还要重新输密码才能退出,也是麻烦事。

首先是得到openwrt-dreambox的源代码。

然后装上各种依赖关系包:

sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversi-dev ncurses-term zlib1g-dev

sudo apt-get update

sudo apt-get install  libncurses5-dev  zlib1g-dev gawk  flex  patch  git-core g++   subversion

(注:backfire对于HG255D绝对是最好的版本选择,不然问题接踵而至)

然后进入home目录,建立文件夹:

makedir /openwrt

cd /openwrt

svn co svn://svn.openwrt.org.cn/dreambox/backfire openwrt-dreambox

cd openwrt-dreambox

./scripts/feeds update -a

./scripts/feeds install -a

然后输入make menuconfig,开始进入内核配置界面:


这里只需选择两项

 1. Target System :  CPU型号 (RT305X

 2. Target Profile :   路由器新号(系列)(HG255D 只有backfire才有该型号吧)

 3.最后:  make V=99 (输出调试信息模式下进行)

  注:第一次编译由于要下载大量的软件包,慢慢的等吧,快则半小时,慢则23小时如果下载过慢,建议您中断编译过程,然后用迅雷去主动下载,放到./dl目录下。一个加快速度的小技巧: 本站小编已经将将一些常用的软件包打包成dl.tar,放在​http://ul.to/2y8a2w, 下载后用tar xvf dl.tar(在windows下用winrar打开即可,然后你用ftp或者samba之类传到Linux PC上),将解包出来的东东直接放到./dl目录下,相必会大大加快初次安装、编译的速度。同样在​http://ul.to/fasgus上可下载linux-2.36.30.10.tar.bz2,当然您也可以用迅雷之类的工具来下。

2、指定平台的交叉编译环境(SDK开发环境的构建)

Openwrt SDK是一个可再定位的,预编译好的OpenWrt工具链,适用于在不从头开始编译整个系统的前提下,针对一个特定平台交叉编译单个用户空间包。

使用SDK的原因:

为了保证二进制和特性兼容性,针对特定的发行版编译自定义软件

编译更新版本的指定包文件

使用自定义的补丁或者不同特性来重新编译已经存在的包

0.下载适合自己路由器平台的相关SDKToolChain 

如:HG255D的官方下载地址为:

http://downloads.openwrt.org/attitude_adjustment/12.09/ramips/rt288x/


其中:

OpenWrt-SDK-ramips-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2.tar.bz2

OpenWrt-Toolchain-ramips-for-mipsel_r2-gcc-4.6-linaro_uClibc-0.9.33.2.tar.bz2

这两个是我们要下载的文件,(不是说SDK么,那是应为ToolChain里面有我们SDK编译是需要的lib等其他库文件)

0. 安装编译环境需要的相关依赖吧(多装总部少装问题要好):

  sudo apt-get update

  sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev

  sudo apt-get install  libncurses5-dev  zlib1g-dev  gawk  flex  patch   git-core g++   subversion

1. 把OpenWrt-SDK-ramips复制到一个目录,解压

   tar  jxvf  OpenWrt-SDK-ramips-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2tar.bz2

2. 进入目录

   cd  OpenWrt-SDK-ramips-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2

3. 将自己的项目代码目录拷贝到本目录的 package目录下(下面也会讲到,这里只是提一下)

    注意 Makefile 必须遵守openwrt的规则可参考

    http://blog.chinaunix.net/uid-27194309-id-3432651.html

4. 编译成功后在bin/ar71xx/packages目录下可以看到相关的ipk文件可用winscp 拷贝出来

注:

#编译所有组件   make V=99  

#单独编译某个组件  make package/{PackageName}/compile

5. 安装到路由器上实验这个你们都懂的

注:项目的src里的Makefile源代码生成的目标程序名 = PackageName 根目录(src上层目录)下面的 Makefile 里面定义个PKG_NAME,不然各种奇葩的错误等着你,而且官网上没有文档说明这点。

另外:千万不要看网上说编译完一个package后要执行下make distclean以清理之类的,要不然等着出现各种问题吧,最后不的不得重新解压我们的SDK

#: SDK的目录不要改动否则出现如下错误

xxg@xxg-desktop:~/SDK-ar71xx-gcc-4.6-linaro_uClibc-0.9.33.2$ make

/bin/sh: /home/xxg/OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/host/bin/find: not found

/bin/sh: /home/xxg/OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/host/bin/find: not found 

 

三、OpenWrt下创建自己的软件包,又称在OpenWrt下做程序设计,或OpenWrt的嵌入式开发

 

1,了解Makefile

具体的Makefile细节规则参见一下几篇不错的文章:

openwrt SDK, 利用SDK生成自己的ipk安装包

http://blog.chinaunix.net/uid-27194309-id-3432651.html 

OpenWrt增加软件包方法 

http://blog.csdn.net/niyufeng/article/details/7390755

(原版:http://wiki.openwrt.org/doc/devel/packages)

[OpenWrt] 创建软件包  

http://blog.csdn.net/sydjm/article/details/8252336

openwrt下面创建/添加package----Makefile模版 

http://blog.csdn.net/hdw10/article/details/7939336

特别注意事项:

1项目的src里的Makefile源代码生成的目标程序名 = PackageName 根目录(src上层目录)下面的 Makefile 里面定义个PKG_NAME,不然各种奇葩的错误等着你,而且官网上没有文档说明这点。

2src下面的Makefile也是要注意和以前的在linux下的区分一下的

$(CC) 和 $(CXX) 是openwrt 的特定交叉编译器,在编译openwrt 时候创建的,在此直接使用即可。$(LDFLAGS) $(CFLAGS) 是用交叉编译器链接和编译文件时必须要加的标志。很多编译出错的原因都是处在此!!

参见:

   http://blog.csdn.net/han_dawei/article/details/7939336 文章末尾

   http://fleshandmachines.wordpress.com/2011/08/22/openwrt-cc-programing/  文章中的模版(注意CC++的区别)

3,这样的错误:

“makefile tab Makefile:2: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.”

那是应为:

在每个命令前面要有一个tab字符。

但有些编辑器会自动将tab转为四个或八个空格。

如:

set tabstop=4 # 四个空格。

set shiftwidth=4 # 自动缩进的宽度。

check your editor!

参见:http://hi.baidu.com/xmuwubo/item/4f504d55dfaa28dbd48bacc3

  4,程序依赖的动态库PackageName/Makefile里的 DEPENDS 选项要写

   ,并且在PackageName/src/Makefile 里的编译选项后面也要写

  如:

define Package/PackageName

  ..............................................

  DEPENDS:=+libpcap +libopenssl

Endef

2,两个实例帮你了解OpenWrt平台下程序设计

  2.1 hellowrld C语言版

  2.2 hellowrld C++ 

  参见(老外做学问真的很认真)

       http://fleshandmachines.wordpress.com/2011/08/22/openwrt-cc-programing/(需翻墙)

       http://www.gargoyle-router.com/wiki/doku.php?id=openwrt_coding

注意:其中作者解决C++程序中使用STL库函数而我们的OpenWrt默认又不集成STL库的解决 办法,作者是按OpenWrt的两个版本( Kamikaze版和White Russian 版,作者说他文章中的解决办法是针对White Russian 版的可能对Kamikaze版没效果),说实话我百度了半天Kamikaze版和White Russian 版的区别也没搞出个所以然:-(,我就知道我的0508固件。

    另外:我的是编译的时候就报错了:Package memwatch is missing dependencies for the following libraries: libstdc++.so.6 ,这时我们前面下载的:

OpenWrt-Toolchain-ramips-for-mipsel_r2-gcc-4.6-linaro_uClibc-0.9.33.2.tar.bz2

就用上了,解压之,然后

1,Copy"OpenWrt-Toolchain-ramipsXXX/usr/lib/libstdc++.so.6.0.16"

到"OpenWrt-SDK-ramipsXXX/staging_dir/target-i386_uClibc-0.9.33.2/usr/lib"

2.cd OpenWrt-SDK-ramipsXXX/staging_dir/target-i386_uClibc-0.9.33.2/usr/lib

执行:

ln -s libstdc++.so.6.0.16 libstdc++.so.6" (注:后面的那个你想得到的)

也就是复制ToolChain里的库文件的SDK里,然后创建连接(兼容使用)

参考:https://forum.openwrt.org/viewtopic.php?id=42098  (末尾坛友的回复)

对于路由器运行环境那端:

去官网下载了个:libstdcpp_4.3.3+cs-43.32_ramips.ipk 装上就OK了,那么照作者的意思我的0508的固件就是基于Kamikaze版做的了(只是猜测),作者给的方法是在线安装,我想说呵呵,对于我这种苛刻的校园环境路由器直接联网不是那么容易的,所以下载,上传,安装 倒也来的方便。

官方下载地址:

http://downloads.openwrt.org.cn/OpenWrt-DreamBox/packages/ramips/packages/libstdcpp_4.3.3+cs-43.32_ramips.ipk

3,实战移植开源项目到OpenWrt平台,即把自己的符合C/C++标准规范的程序源码修改并在OpenWrt SDK下编译生成安装文件(ipk

移植开源项目h3cclientOpenWrt平台

1,前期准备:

      找到能在自己学校认证成功上网的开源client代码,具体的大家可以先装个linux系统测试下,如果能在linux下认证成功的话那么移植到OpenWrt也才就有了可能性。

2,代码OpenWrt规范化

     (前面说的Makefile说的已经很清楚了,这里再提一下)

OpenWrt要求源代码必须在PackageName/src目录下面,且PackageName下和src 目录下各有一个Makefile,要特别注意前面提到的src下面的Makefile里编译指令和通常写法的区别

3,我编译h3cclient遇到问题及解决办法

  1,看到源代码里用到了libpcap 那么本机编译环境自然也的装个吧,另外网上有人说它还用了libgcrypt,所以就一起安装下吧(注意是本机,电脑)

  sudo apt-get install libpcap-dev

  sudo apt-get install libgcrypt-dev

  2,上面说说的程序用了STL缺少库的解决办法(含本机和路由连个运行环境)

  3,还有一个就是,好像是什么程序使用了ccache编译时报了错误,google一通,这样解决的:

             apt-get install ccache

     

4,编译时:ERRORplease fix package/helloworld/Makefile

   解决办法:没什么说的,检查你的Makefile把骚年,参见我前面说的Makefile规范

5.复制网上的代码的时候注意检查Makefile 中的 Tab是否还在呢

6,想不起来了,记得当时遇到问题是挺多的

四,经验总结篇

     玩东西要有神挡杀神佛挡杀佛,兵来将挡水来土掩的勇气。遇到问题解决问题,google,baidu少不了,翻墙那是必然。

五、其它好的文章推荐:

如何在OpenWRT环境下做开发

http://hi.baidu.com/gouooo/item/6932bfa97d23d1981410736a

OpenWrt toolchain工具链环境及开发程序示例

http://blog.appdevp.com/archives/64

Ubuntu 12.04安装QQ2012

http://www.linuxidc.com/Linux/2012-05/59564.htm

openwrt下面创建/添加package----Makefile模版 

http://blog.csdn.net/hdw10/article/details/7939336

0 0