
- 这里需要注意的是一定要32位的系统,64位的系统也可以编译,但是有些莫名其妙的问题,具体原因未知。[1]
- 并非非要服务器版本,个人版本也完全没问题,个人版下载http://www.ubuntu.com/download/ubuntu/download-zh[2]
- 建议安装磁盘空间在8G以上,否则非常吃紧。
http://see.sl088.com/wiki/编译Openwrt固件 原帖
ubuntu搭建编译环境。
主要有么侠口述,船长整理。
注意事项
准备编译环境包
sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev subversion git-core gawk asciidoc libz-dev
这一堆东西可能牺牲1.2G空间。
安装后可以用apt-get clean进行清理缓存,大概多出来300M空间。
可能的问题
问题情况:
现在没有可用的软件包 bison,但是它被其它的软件包引用了。 这可能意味着这个缺失的软件包可能已被废弃, 或者只能在其他发布源中找到 E: 未发现软件包 patch
修正方法:到设置里更换为官方源
准备编译源
导出官方源
SVN源
![]()
svn checkout svn://svn.openwrt.org/openwrt/trunk
或者
svn co svn://svn.openwrt.org/openwrt/trunk
co是checkout的简写
Git源
- 这是一样的操作,换个不同的工具
设置权限
trunk对应目标的trunk,比如/media/work/Openwrt/trunk
cd /media/work/Openwrt chmod -R 777 trunk
刷新版本
操作方法
svn up
耗掉时间
几秒钟
更新种子
操作方法
- 更新种子列表,看起来是
./scripts/feeds update -a
- 更新种子在menuconfig中的显示列表
./scripts/feeds install -a
有趣
- 看起来这里不是真的下载包,而是下载一个列表[3]
它可以获得最新的列表 Run "./scripts/feeds update" to get the latest package definitions
- install 看起来只是安装个文件链接
"./scripts/feeds install" to install symlinks into "package/feeds/*".
- 那么 -a属性是啥子呢?
看起来是获得所有的包信息
- 它的完整用法看起来是,它是个perl脚本,位于script目录,来看看它的源码部分
[展开]
完整用法
耗掉时间
update要耗点时间,可能十几分钟,install就只要几分钟了。
配置目标系统
make menuconfig
- Target System 选择目标芯片类型,WR703、MR11U是AR9XXX
- Target Profile 选择目标路由器型号 WR703N
Mr11U
- 接着如果你喜欢ui可以加个luci

- 勾勾搭搭一些其他你喜欢的
保存目标系统
选好了就选exit退出,然后选择SAVE。
如果需要搜索包用/(右边shift的邻居键)
开始编译
常规编译
make V=99
- V是为了显示详细日志信息,用来看看啥的
传说编译方法
- 传说还有一种多线程编译方法
make V=99 -j 3
j后面不带参数可以全部线程拿去跑,看起来是这样的,加数字多半是为了限制 注意:-j 可不加,只是为了编译速度更快,但是容易出错 而且找不到正确错误位置
- 加上 j=5 似乎跑的更快
- j的准确作用看起来是多核编译,见官方的wiki[4]
编译时间参考
首次编译
- 首次编译,第一次编译
| 编译人 | 耗时 | CPU配置 | 内存配置 | 网络配置 |
| 么侠 | 4小时左右 | intel的cpu | 1G内存 | 网速不行 |
| 船长 | 3小时31分钟 | AMD Athlon 250 CPU | Vmware分配1G内存 | 开启VPN国外 |
- 再次编译,在没有选择编译SDK的情况下,大概5分钟左右
又一次重新编译
- 又一次重新编译,开始时间
2013年7月8日 (一) 18:37 (CST)
- 大概两小时后完成了
2013年7月8日 (一) 20:40 (CST)
- 哦对了,这次使用的线程是2
make V=99 j 2
编译失败
检查问题所在
观察shell里的错误信息,借此找到问题所在。
建议
如果编译失败,建议:
- 检查磁盘空间是否充足
- 检查编译环境
- 检查编译源是否下载完整
- 如果是下载失败而中断,重新编译会直接到下载处,这时候可以开启VPN来避免这种情况
编译完成
编译输出文件
- 在trunk下的bin目录,子目录是芯片类型,比如ar71xx:

- 具体目标文件:
- packages里是生成的包文件,ipk格式
- openwrt-ar71xx-generic-rootfs.tar.gz 尚不知道是啥
- openwrt-ar71xx-generic-tl-mr11u-v1-squashfs-sysupgrade.bin 固件
- OpenWrt-SDK-ar71xx-for-Linux-i686-gcc-4.6-linaro_uClibc-0.9.33.tar.bz2 SDK文件
- OpenWrt-Toolchain-ar71xx-for-mips_r2-gcc-4.6-linaro_uClibc-0.9.33.tar.bz2 工具链一类的
- md5sums效验文件
编译后文件大小
占用概述
大约4.5G,267268个文件。
![]()
这还是没集成什么东西,你集成越多,空间占用越大。
占用细节
编译后清理文件
- 清除中间文件等,buxxx_dir的都会被删除,而且看起来bin目录里编译好的固件也没了,再次编译大约需要2小时:
make clean
看起来这是小范围的清理,清理看起来执行了: bin目录看起来也被清理了
sen@ubuntu-openwrt-baby:/media/work/Openwrt/attitude_adjustment$ make clean make[1] clean make[2] target/linux/clean make[3] -C target/linux clean
- 比clean更彻底的恢复编译环境,多彻底,暂无法形容,非要问我只能冷酷表情:
make dirclean
- 初始化编译环境,全部扼杀,甚至删除你编译过程里辛苦下载的dl文件夹,回到创世纪初,再次编译就是重来一次:
make distclean
思考
用作SDK环境
我想这个环境直接就超越sdk了,都不知道sdk是干嘛来的,我没必要编译固件那个过程,只编译一个包,那不就是当sdk用了吗
编译单个包
编译一个单独的软件包(例如在cups软件包):
make package/cups/compile V=99[5]


相关文章- gcc 从5.3升级6.1 openwrt编译出错后续3 cfns.gperf errorr
- LEDE-oxnas-Pogoplug-pro 测试固件更新
- gcc 从5.3升级 6.1 openwrt编译出错后续2 gcc6.h: No such file
- 临时编译了一版 wr841 的OpenWrt 15.05固件(已添加ar71xx其他部分 但是默认不添加usb组件)
- auhome 水晶路由 root密码
- Linux下突破校园天翼宽带客户端限制(已移植OpenWRT)
- proc 使系统更透明
- Openwrt/LEDE/Gargoyle 下用c调用uci
- openWrt软件开发教程3(交叉编译和ipk包生成)
- OpenWRT下Dnsmasq本地域名泛解析和禁止DNS劫持
本文地址:https://blog.sxx1314.com/openwrt/91.html
版权声明:若无注明,本文皆为“unix 软硬件 技术宅 ”原创,转载请保留文章出处。百度已收录















