OpenWrt固件编译刷机完全总结
一.SOM9331板子信息
用普通安卓手机USB线连接板子与电脑,通过secureCRT串口登录,设置如下:
二.登录openwrt系统
Uboot信息:
uboot> version
U-Boot 1.1.4 (Jan 3 2014)
*********************************************
* U-Boot 1.1.4 (Jan 3 2014) *
*********************************************
(AR9331) U-Boot for SOM9331
DRAM: 64 MB DDR2 16-bit
FLASH: Winbond W25Q64 (8 MB)
CLOCKS: 400/400/200/33 MHz (CPU/RAM/AHB/SPI)
LED on during eth initialization...
Hit any key to stop autobooting: 0
Booting image at: 0x9F020000
Image name: OpenWrt r36088
Image type: MIPS Linux Kernel Image (lzma compressed)
Data size: 957100 Bytes = 934.7 kB
Load address: 0x80060000
Entry point: 0x80060000
Uncompressing kernel image... OK!
Starting kernel...
回车后:
BusyBox v1.19.4 (2013-03-14 11:28:31 UTC) built-in shell (ash)
Enter 'help' for a list of built-in commands.
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
ATTITUDE ADJUSTMENT (12.09, r36088)
-----------------------------------------------------
* 1/4 oz Vodka Pour all ingredients into mixing
* 1/4 oz Gin tin with ice, strain into glass.
* 1/4 oz Amaretto
* 1/4 oz Triple sec
* 1/4 oz Peach schnapps
* 1/4 oz Sour mix
* 1 splash Cranberry juice
-----------------------------------------------------
root@OpenWrt:/#
Linux内核版本信息:
root@OpenWrt:/# ls
bin etc mnt proc root sys usr www
dev lib overlay rom sbin tmp var
root@OpenWrt:/etc# cat /proc/version
Linux version 3.3.8 (blogic@Debian-60-squeeze-64-minimal) (gcc version 4.6.3 20120201 (prerelease) (Linaro GCC 4.6-2012.02) ) #1 Sat Mar 23 16:49:30 UTC 2013
三.openwrt固件编译准备工作
Virtual box虚拟机使用Ubuntu 10.04.4 LTS系统,并与windows共享文件夹,方便后期两个平台传输资源。
编译所需安装工具:
1安装SVN工具,下载Openwrt源码,因为源码是在不断更新的,SVN管理很方便
apt-get install subversion
2.安装git工具,如果你知道github的话……
apt-get install git-core
3.安装一下必要的依赖库
sudo apt-get install g++
sudo apt-get install libncurses5-dev
sudo apt-get install zlib1g-dev
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install unzip
sudo apt-get install autoconf
sudo apt-get install gawk
sudo apt-get install make
sudo apt-get install gettext
sudo apt-get install gcc
sudo apt-get install binutils
sudo apt-get install patch
sudo apt-get install bzip2
sudo apt-get install libz-dev
sudo apt-get install asciidoc
sudo apt-get install subversion
sudo apt-get install sphinxsearch
sudo apt-get install libtool
sudo apt-get install sphinx-common
以上在非root用户下下载时需要在前面加上sudo命令:
然后在当前目录下新建openwrt目录,下载的源码包就放在该目录下:
mkdir openwrt
cd openwrt/
svn co svn://svn.openwrt.org/openwrt/trunk 这里我们下载的是trunk版本,也可以下载DREAMBOX或者backfire版本的
因为要连接国外的服务器下载源码,所以一般会很慢,建议可以下载DREAMBOX的,国内维护的,可能会快一点吧
svn co svn://svn.openwrt.org.cn/dreambox/backfire openwrt-dreambox
cd openwrt-dreambox
./scripts/feeds update -a
./scripts/feeds install -a
下载结束后,会出现svn版本号表示下载成功了
下载完openwrt的源码后,为了使openwrt支持更多的软件,需要更新和安装其他源上面的软件:
cd ./trunk
./scripts/feeds update -a
./scripts/feeds install -a
PS:关于SVN
如果不是刚下载的源码,为保持代码为最新状态,可以运行svn update命令更新源码。
svn up或者 svn update
SVN更新的时候:
U:表示从服务器收到文件更新了
G:表示本地文件以及服务器文件都已更新,而且成功的合并了
A:表示有文件或者目录添加到工作目录
R:表示文件或者目录被替换了.
C:表示文件的本地修改和服务器修改发生冲突
SVN 查看历史信息 通过svn命令可以根据时间或修订号去除过去的版本,或者某一版本所做的具体的修改。以下四个命令可以用来查看svn 的历史:
svn log 用来展示svn 的版本作者、日期、路径等等
svn diff 用来显示特定修改的行级详细信息
svn cat 取得在特定版本的某文件显示在当前屏幕
svn list 显示一个目录或某一版本存在的文件
四.配置openwrt编译源码
测试编译环境:(先生成一个默认配置文件)
make defconfig
到这里就可以开始编译自己的固件了。进入定制界面:(如果需要前面加上sudo命令)
make menuconfig
稍后自动进入一个图形化配置界面,根据实际芯片进行配置
(我们用到的是Atheros的AR9331),因此配置如下:
选择好芯片和模型配置好后,还要配置Luci(openwrt路由的web登录设置页面),将luci选项打上*,注意不是M(M只是将其当作模块来编译,而*可以将其编译进内核):
最后保存为配置文件SOM9331.config:
执行make V=99开始编译工作,make V=99 (注意V为大写,而且编译过程中为避免权限问题,最好前面加上sudo),这里有人喜欢在make后加上”-j”选项参数,意思是让cpu全速编译,但这里不推荐,容易出现不可预料的错误或者卡顿。
五、编译过程中可能出现的问题及解决方法
既然编译了难免会出现一些错误而无法进行下去,这里总结几个自己遇到的问题及解决方法:
1.*** error: 'OpenWrtunknown' is too long, max firware version length is 13
[edimax_fw_header] *** error: 'OpenWrtunknown' is too long, max firware version length is 13
dd: failed to open'build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/tmp/f9k1115v2-rootfs': No such file or directory三
dd: failed to open 'build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/tmp/f9k1115v2-uImage': No such file or directory
解决方法:一开始我是用sudo建立了那两个路径,结果还是有错,google了一下找到了方法:
即将trunk/scripts/getver.sh脚本第33行替换成那条语句,重新编译就OK了。
2.还有个是链接上了无法下载,需要手动下载到指定目录下,但是重新make时候编译器又将手动下载的文件remov了,这是到后来才发现的,于是果断编译开始后再将下载好的文件放到指定目录下就好了,编译通过!
3.Openwrt源码一般不支持root用户进行编译,所以一般每条命令都要利用sudo前缀,修改一下文件可以使得利用root编译。如果你是root用户名需要在配置上面做点修改。需要修改include/prereq-build.mk,把第十六行的注释掉。对于Ubuntu系统,貌似并不需要修改。
4.网友提到在执行make defconfig时,出现 checking ‘libssl’… failed,,然后安装缺少的这个组件libssl-dev,请执行sudo apt-get install libssl-dev
请大家在操作过程中关注每一个遇到的错误,他都可能是编译成功的绊脚石~~~
5.对于连接国外源码服务器下载速度太慢的问题,可以换成国内的服务器进行下载
svn://svn.openwrt.org.cn/openwrt/branches/backfire
svn://svn.openwrt.org.cn/openwrt/trunk
svn://svn.openwrt.org.cn/dreambox/backfire openwrt-dreambox
六.烧写openwrt系统固件到SOM9331开发板
最后编译好了,cd到/openwrt/trunk/bin/ar71xx目录下,会有很多编译好的bin文件,
但适合SOM9331开发板的是openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin,
(注意:openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin是原厂固件,不带Luci界面,wifi默认不打开,而openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin是基于openwrt的升级,可以通过make menuconfig设置带Luci界面,当然也可以登录系统设置打开wifi)
这里采用tftp传输方式烧写固件,需要准备好网线连接电脑网孔和SOM9331开发板的WAN网口(本固件靠近USB的J1为WAN口,另两个J2,J3为LAN口),
另外软件方面需要tftpd32来传输,结合SecureCRT串口显示openwrt系统uboot菜单命令来烧写:
1、先把本机的IP地址设置为192.168.1.2,只要设置的IP地址和SOM9331开发板的IP在一个段域内即可。
2、给开发板供电,打开SecureCRT软件,按下开发板上的复位按钮,根据提示在电脑上按下空格键,进入Uboot界面,设置当前环境变量(即设置服务器IP和开发板本地客户端IP):
setenv serverip 192.168.1.2
setenv ipaddr 192.168.1.1(若与自己路由器ip冲突可以另外设置)
3、打开tftpd32.exe软件,设置下烧写的bin文件所在目录,以及当前服务器IP地址(即PC的本地IP):
4、回到uboot界面,开始输入tftp命令传输bin文件到给定地址:
tftp 0x80000000 openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin
5、擦出原有的Flash区域:erase 0x9f020000 +0x7c0000,然后将刚烧写到内存的bin文件再写到刚才擦除的区域:cp.b 0x80000000 0x9f020000 0x7c0000
然后输入reset或者按下复位键重启,或者输入bootm 0x9f020000重启:
此时刷openwrt固件成功!
七、开启wifi和Luci界面
命令行查看网络,输入ifconfig
发现没有wlan0,因为默认wifi没打开,需要手动设置,打开无线开关(配置wireless文件)键入 vi /etc/config/wireless 回车 光标移动到 option disabled 1 这一行,在这一行前面加上#注释掉,保存设置并退出,键入 /etc/init.d/network restart 回车 重启网络,这时电脑即可搜到“OpenWrt”热点并连接上,后续配置可在网页上(192.168.1.1)进行。
浏览器输入192.168.1.1后出现登录界面需要设置密码:
进入SecureCRT设置passwd:
输入设置好的密码即可成功登录!