设为首页 收藏本站 订阅本站

blogger

编译OPENWRT 综合

cache 发布于 技术文档 2015-09-06 [ 802 ] 次浏览 [ 0 ] 条评论

编译HG255D的openwrt固件

    因trunk版本每天都有变动,所以先如下说明:openwrt源码是2014年5月21日,从svn co svn://svn.openwrt.org/openwrt/trunk/下载。版本r40804。

      去年年底从X宝JS那花100多(这也是学费,现在要是折腾就自己买个二手的自己改装)买的改装后的华为HG255D路由,flash 16M,内存32M*2,刷的是openwrt-dreambox固件。没入手CH341A编程器前一直都不敢对路由器太大折腾。虽说里面uboot是lintel不死uboot,但还是担心变砖。入手编程器以后,就决定自己为hg255d编译openwrt固件(后来拆了hg255d一看,才知道想法太天真了,hg255d用的不是普通的8、16脚flash)。

      openwrt没法直接编译出HG255D路由器的固件,虽然在make menuconfig选择HG255D路由后,make V=s编译后并没有出现openwrt-ramips-rt305x-hg255d-squashfs-sysupgrade.bin升级固件。找到一些资料是说:

HG255D原版的无线校正数据(“eeprom”)在flash的最后128 KiB。
eeprom除了MAC地址还有无线频率校正、每通道功率控制之类的数据,如果eeprom被擦除又没有备份的话无线就起不来了。
eeprom每个路由器都不同,从其他机器上拷贝一个过来用的话无线通信效果会劣化。
Openwrt在HG255D上启动后会到/lib/firmware下找soc_wmac.eeprom文件,
如果找不到的话就试图从Flash的factory区读取出来,如果读取失败的话wifi无法启动。
openwrt官方的版本只在lintel u-boot上测试过,如果刷在带原厂u-boot的HG255D上会擦除无线校正数据(factory),这很严重。
原版的布局是,前128k是uboot,最后128k是factory(0xfa0000开始),中间的是firmware,firmware的前1M是kernel,后面就是rootfs了。

要编译出HG255D升级固件,需要做如下改动:

1、打开对HG255D板的支持
在target/linux/ramips/image/Makefile中,去掉下面两行行首的#,增加对HG255D编译的支持(用HG255D搜索即可)

Image/Build/Profile/HG255D=$(call BuildFirmware/Default16M/$(1),$(1),hg255d,HG255D)
$(call Image/Build/Profile/HG255D,$(1))


2、使用原机的mac地址
其实源代码里面提供了对原来mac地址的读取,但是脚本有点问题
在target/linux/ramips/base-files/lib/ramips.sh中查找HG255D,能查到如下代码
*"HG255D")                                
		name="hg255d"
		;;
将其中的"HG255D"修改为"HuaWei HG255D",如下
*"HuaWei HG255D")                                
		name="hg255d"
	;;
然后在target/linux/ramips/base-files/lib/preinit/06_set_iface_mac中查找freestation5,在查找到的这行下面加入HG255D对应的代码,如下:
freestation5 |\
	hg255d |\
	hlk-rm04 |\

3、改电源指示灯不能正常工作的问题
修改target/linux/ar71xx/base-files/etc/diag.sh,找到:
hlk-rm04)
		status_led="hlk-rm04:red:power"
		;;
其下添加
hg255d)
		status_led="hg255d:power"
		;;

以上是需要修改的。下面列的是可选修改的:


4、修改缺省lan ip
修改package/base-files/files/lib/functions/uci-defaults.sh中

set network.lan.ipaddr='192.168.1.1'
中的地址为你想要的地址,我的没改。

5、打开wlan的支持,并添加无线密码12345678
修改package/kernel/mac80211/files/lib/wifi/mac80211.sh中

option disabled 1

option disabled 0
在config wifi-iface节添加wifi密码(none改成psk2,并加一条密码12345678)
option encryption 'psk2'
	option key '12345678'

如果需要加入万能桥接可再添加如下配置:
config wifi-iface
	option network 'wwan'
	option ssid 'TP-LINK_1234'		#被桥接的wifi的SSID
	option encryption 'psk2'		#被桥接的wifi的加密方式
	option device 'radio0'
	option mode 'sta'			#工作模式 客户端Client
	option bssid '11:22:33:44:55:66'	#被桥接的wifi的MAC地址
	option key '111222333'		#被桥接的wifi的密码


6、缺省使用中文(当然先要安装luci的中文模块)
修改feeds/luci/libs/web/root/etc/config/luci中(注trunk r41302发现这个文件被移动到feeds/luci/modules/base/root/etc/config/luci)
在config internal languages下增加下面两行

option zh_cn 'chinese'
	option en 'English'

并将config core main中修改为 

?
1
2
3
option lang zh_cn
     
   



7、修改默认主题
修改feeds/luci/libs/web/root/etc/config
在config core main下找到:

option mediaurlbase /luci-static/openwrt.org
可根据需要将openwrt.org修改为Bootstap、openwrtcn、freifunk-bno、freifunk-generic


8、添加root帐号密码
修改package/base-files/files/etc/shadow文件
root::0:0:99999:7:::
改成(密码是admin)
root:$1$21u5EotL$B9ebsVgEQe.C7lsk0iMf10:0:0:99999:7:::
注:生成加密的密码字段的方法:
方法一(交互式)
命令格式: openssl passwd -1 -salt $(< /dev/urandom tr -dc '[:alnum:]' | head -c 32)
Password:    # input your password here 
$1$MZrDxgEw$i2XBgmDMo0Wf1.OVvOGGQ1
 
方法二(适用于脚本)
命令格式: echo "xansun" | openssl passwd -1 -salt $(< /dev/urandom tr -dc '[:alnum:]' | head -c 32) -stdin 
$1$KsRJO8kG$M9co4G7T6.5KcITsSCRNS/

方法三
以下命令可得到加密后的字符串,zz为密码
命令格式: perl -e ’   print   crypt("zz","\$1\$acQMceF9\$"),"\n"     ’ 
$1$acQMceF9$1SaCpG2qiKKA3eGolU4Fp0

9、修改主机名,设定时区
修改package/base-files/files/etc/config/system
config system
	option hostname 'OpenWrt'
	option conloglevel '8'
	option cronloglevel '8'
	option zonename 'Asia/Shanghai'
	option timezone 'CST-8'

config timeserver ntp
	list server 0.openwrt.pool.ntp.org
	list server 1.openwrt.pool.ntp.org
	list server 2.openwrt.pool.ntp.org
	list server 3.openwrt.pool.ntp.org
	option enable_server 0
其中:
option hostname Openwrt 设定主机名
option zonename Asia/Shanghai 时区设置为亚洲/上海
option timezone CST-8 正8区

list server 就是ntp服务器了。


make menuconfig可选软件包(按自己需要选择):

添加USB挂载
Base system-->block-mount
添加磁盘格式支持
Kernel modules-->Filesystems-->kmod-fs-ext4
Kernel modules-->Filesystems-->kmod-fs-msdos
Kernel modules-->Filesystems-->kmod-fs-ntfs
Kernel modules-->Filesystems-->kmod-fs-vfat
语言支持
Kernel modules-->Native Language Support-->kmod-nls-utf8
网络支持
Kernel modules-->Network Support-->kmod-pppol2tp
Kernel modules-->Network Support-->kmod-pptp
USB支持
Kernel modules-->USB Support-->kmod-usb-hid
Kernel modules-->USB Support-->kmod-usb-printer
Kernel modules-->USB Support-->kmod-usb-serial  #usb转串口
Kernel modules-->USB Support-->kmod-usb-serial-cp210x
Kernel modules-->USB Support-->kmod-usb-serial-pl2303
Kernel modules-->USB Support-->kmod-usb-storage
Kernel modules-->USB Support-->kmod-usb-storage-extras
Kernel modules-->USB Support-->kmod-usb2

Video(挂载摄像头)

Kernel modules-->Video Support-->kmod-video-core
Kernel modules-->Video Support-->kmod-video-cpia2
Kernel modules-->Video Support-->kmod-video-gspca-core
Kernel modules-->Video Support-->kmod-video-pwc
Kernel modules-->Video Support-->kmod-video-sn9c102
Kernel modules-->Video Support-->kmod-video-uvc
Kernel modules-->Video Support-->kmod-video-videobuf2

无线驱动

Kernel modules-->Wireless Drivers-->kmod-rt2800-usb
Kernel modules-->Wireless Drivers-->kmod-rt73-usb
Kernel modules-->Wireless Drivers-->kmod-rtl8187
添加libffmpeg-mini支持ushare需要
Libraries-->libffmpeg-mini
LUCI
LuCI-->Collections-->luci
LuCI-->Applications-->luci-app-ddns
LuCI-->Applications-->luci-app-hd-idle
LuCI-->Applications-->luci-app-multiwan
LuCI-->Applications-->luci-app-ntpc
LuCI-->Applications-->luci-app-p910nd
LuCI-->Applications-->luci-app-qos
LuCI-->Applications-->luci-app-samba
LuCI-->Applications-->luci-app-tinyproxy
LuCI-->Applications-->luci-app-upnp
LuCI-->Applications-->luci-app-ushare
LuCI-->Applications-->luci-app-wol
LuCI-->Themes-->luci-theme-openwrt
LuCI-->Translations-->luci-i18n-chinese

Multimedia

Multimedia-->mjpg-streamer

Network 

Network-->File Transfer-->aria2
Network-->Printing-->cups-locale-zh
Network-->VPN-->pptpd
Network-->wireless-->aircrack-ng
Network-->wireless-->aircrack-ptw
Network-->wireless-->reaver
Network-->wireless-->xsupplicant
Utilities 
Utilities-->Filesystem-->badblocks	#自动挂载工具
Utilities-->Filesystem-->mkdosfs
Utilities-->Filesystem-->ntfs-3g	#ntfs读写
Utilities-->disc-->fdisk	#分区工具
Utilities-->disc-->blkid        #可以列出分区类型卷标等
Utilities-->disc-->lsblk        #列出块设备,还能显示他们之间的依赖关系
Utilities-->lrzsz		#上传下载工具
Utilities-->restorefactory	#reset键支持(长按5秒以上就可以恢复固件默认设置)
Utilities-->usbreset
Utilities-->usbutils    #lsusb支持
Utilities-->wifitoggle	#添加一键开关无线(按一下WPS键放开无线就打开或者关闭)


最后make V=s,等待编译完成生成hg255d固件。

 

CENTOS 编译环境

yum install asciidoc libgcj flex git-core gcc-c++ gtk2-devel intltool make ncurses-devel openssl-devel perl-ExtUtils-MakeMaker python-devel ruby unzip wget subversion  sqlite-devel

3步定制hg255d的trunk固件(包含3千多个packages)

下面的步骤需要一台x86_64的linux主机。我的盒子是lintel的uboot,原版uboot没试过。

==================================
1. 下载trunk的ramips的ImageBuilder

http://downloads.openwrt.org/snapshots/trunk/ramips/OpenWrt-ImageBuilder-ramips_rt305x-for-linux-x86_64.tar.bz2

2. 解开压缩文件,修改Makefile

tar xjf OpenWrt-ImageBuilder-ramips_rt305x-for-linux-x86_64.tar.bz2
cd OpenWrt-ImageBuilder-ramips_rt305x-for-linux-x86_64
vi target/linux/ramips/image/Makefile
查找255, 有两行和hg255d相关,去掉这两行前面的“#”

3. 创建固件

make image PROFILE=HG255D

make结束以后,会生成bin/ramips/openwrt-ramips-rt305x-hg255d-squashfs-sysupgrade.bin,就可以用来刷机了。

可以根据自己需要,加上PACKAGES列表来定制固件的内容(packages目录下面有大概3千多个ipk包)

make image PROFILE=HG255D  PACKAGES="6relayd aria2 arptables base-files block-mount bridge busybox chat comgt curl ddns-scripts dnsmasq dropbear etherwake firewall hostapd hostapd-common hostapd-utils ip ip6tables ipset iptables iptables-mod-conntrack-extra iptables-mod-filter iptables-mod-ipopt iw jshn kernel kmod-8021q kmod-arptables kmod-ath kmod-ath9k-common kmod-ath9k-htc kmod-brcmfmac kmod-brcmutil kmod-bridge kmod-carl9170 kmod-cfg80211 kmod-crypto-aes kmod-crypto-arc4 kmod-crypto-authenc kmod-crypto-cbc kmod-crypto-core kmod-crypto-deflate kmod-crypto-des kmod-crypto-ecb kmod-crypto-hash kmod-crypto-hmac kmod-crypto-iv kmod-crypto-manager kmod-crypto-md5 kmod-crypto-pcompress kmod-crypto-rng kmod-crypto-sha1 kmod-crypto-wq kmod-eeprom-93cx6 kmod-fs-ext4 kmod-fs-vfat kmod-gpio-button-hotplug kmod-gre kmod-gre6 kmod-ifb kmod-input-core kmod-ip6-tunnel kmod-ip6tables kmod-ipip kmod-ipsec kmod-ipsec4 kmod-ipsec6 kmod-ipt-compat-xtables kmod-ipt-conntrack kmod-ipt-conntrack-extra kmod-ipt-core kmod-ipt-filter kmod-ipt-ipopt kmod-ipt-ipsec kmod-ipt-ipset kmod-ipt-nat kmod-ipt-nathelper kmod-ipt-sysrq kmod-iptunnel kmod-iptunnel4 kmod-iptunnel6 kmod-ipv6 kmod-leds-gpio kmod-lib-crc-ccitt kmod-lib-crc-itu-t kmod-lib-crc16 kmod-lib-textsearch kmod-lib-zlib kmod-llc kmod-mac80211 kmod-mmc kmod-mppe kmod-nfnetlink kmod-nls-base kmod-p54-common kmod-p54-usb kmod-ppp kmod-pppoe kmod-pppox kmod-pptp kmod-rt2500-usb kmod-rt2800-lib kmod-rt2800-mmio kmod-rt2800-soc kmod-rt2800-usb kmod-rt2x00-lib kmod-rt2x00-mmio kmod-rt2x00-usb kmod-rt73-usb kmod-rtl8187 kmod-rtl8192c-common kmod-rtl8192cu kmod-rtlwifi kmod-rtlwifi-usb kmod-sched-connmark kmod-sched-core kmod-scsi-core kmod-scsi-generic kmod-slhc kmod-stp kmod-tun kmod-usb-core kmod-usb-rt305x-dwc_otg kmod-usb-serial kmod-usb-serial-ch341 kmod-usb-serial-ftdi kmod-usb-serial-pl2303 kmod-usb-storage kmod-usb-storage-extras lftp libblobmsg-json libc libcurl libcyassl libevent2 libexpat libgcc libip4tc libip6tc libiwinfo libiwinfo-lua libjson-c libjson-script liblua liblzo libmnl libncurses libnfnetlink libnl-tiny libopenssl libpcap libplist libpolarssl libpopt libpthread libreadline librt libstdcpp libubox libubus libubus-lua libuci libuci-lua libusb-1.0 libusbmuxd libustream-cyassl libxml2 libxtables lua luci luci-app-commands luci-app-ddns luci-app-firewall luci-app-qos luci-app-wol luci-i18n-english luci-lib-core luci-lib-ipkg luci-lib-nixio luci-lib-sys luci-lib-web luci-mod-admin-core luci-mod-admin-full luci-proto-3g luci-proto-core luci-proto-ipv6 luci-proto-ppp luci-proto-relay luci-sgi-cgi luci-ssl luci-theme-base luci-theme-bootstrap minicom miniupnpd mtd mtr multiwan netifd odhcp6c openvpn-openssl opkg ppp ppp-mod-pppoe ppp-mod-pptp procd px5g qos-scripts relayd resolveip rsync socat swconfig tc tcpdump-mini terminfo tmux ubox ubus ubusd uci uclibcxx uhttpd uhttpd-mod-ubus usb-modeswitch usbmuxd wireless-tools wpa-supplicant wpad zlib"

==================================
常见错误:
1.  * opkg_install_cmd: Cannot install package kmod-rt2800-pci
    在PACKAGES参数里面加上"-kmod-rt2800-pci"
    make image PROFILE=HG255D PACKAGES="-kmod-rt2800-pci"
2. 找不到dtc文件
    build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_rt305x/linux-3.10.26/scripts/dtc/dtc
解决方案:把附件里的dtc.zip解开,放到对应的地方。

为HG255D编译OpenWrt Barrier Breaker固件

标签: Barrier Breaker, Compile, HG255D, Huawei, OpenWrt, 华为, 编译, 路由器

经过一年多的开发,OpenWrt Barrier Breaker终于千呼万唤始出来,可惜的是官方固件中仍然不见华为HG255D的身影,只能自己动手编译了。

编译环境为Ubuntu 14.04 LTS 64-bit真机,当然也可以用虚拟机。

1、安装编译需要的软件包:
sudo apt-get update
sudo apt-get install build-essential subversion libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext

2、下载OpenWrt Barrier Breaker源码,我习惯用SVN:

svn co svn://svn.openwrt.org/openwrt/branches/barrier_breaker

当然也可以用GIT:

git clone git://git.openwrt.org/14.07/openwrt.git

3、更新源:

cd barrier_breaker
./scripts/feeds update -a
./scripts/feeds install -a

4、打开对HG255D的支持:

vim target/linux/ramips/image/Makefile

搜索HG255D,去掉前面的注释符#,至于官方为什么要注释掉这一行,有一种说法是官方的版本只在lintel u-boot上测试过,如果刷在带原厂u-boot的HG255D上会出问题,这也许是官方没有提供HG255D固件下载的原因吧。

5、进行配置:

make defconfig
make prereq
make menuconfig

在弹出的图形界面中选择

Target System (Ralink RT288x/RT3xxx)
Subtarget (RT3x5x/RT5350 based boards)
Target Profile (HuaWei HG255D)

我喜欢纯净的系统,所以只安装默认选中的软件,这也是我自己编译固件的原因之一,网上别人编译的固件太臃肿,集成了太多我不想要的东西。你也可以根据自己的需要选择相应的软件包,私人定制专属于自己的固件。

6、编译:
make V=s

编译的时间取决于你机器的配置和你的网络(编译过程中需要下载源码),反正在我的渣机器和渣网络下要编译几个小时,编译好的固件保存在

bin/ramips/openwrt-ramips-rt305x-hg255d-squashfs-sysupgrade.bin

编译好之后当然就是刷机了,怎么刷机就不用我教了吧,你懂的。

 

编译OPENWRT 综合:等您坐沙发呢!

发表评论