新手第一次编译路由宝openwrt固件全过程

21:32 星期二 eehello 发表于 OpenWRT 分类,标签: openwrt 编译

0


    关于自己学习编译openwrt的根本原因为:想使用openwrt最新快照版中的seafile服务,而最新的稳定版15.05.1所配的软件源中没有,快照版里面倒是有路由宝的固件,但是却有一个不能软重启的bug.于是就想到了自己编译一个.在此记录自己所遇到的各种坑.

    于是查找各种教程,经过2天时间,于2月7日编译出了一个失败的固件.具体细节就不说了,主要是没记录.

再次重新编译,决定边编译,边写博客.以作记录.

  要解决软重启bug,就需要更改linux内核的一个文件,参考自:让MT7620完美支持32M SPI Flash(W25Q256) — 兼谈设备驱动中的shutdown方法[转]

我在内核源代码压缩包中修改了m25p80.c文件,添加了相关代码.参考网上的教程:http://wenku.baidu.com/view/1d663e75102de2bd960588e9,最终经过了几个小时的漫长编译,主要是下载文件速度太慢了.编译出了2个.bin文件,分别叫:openwrt-ramips-mt7620-ArcherC20i-squashfs-sysupgrade.bin,openwrt-ramips-mt7620-ArcherC50-squashfs-sysupgrade.bin,这个两个文件名搞得我一头雾水,心里其实已经感觉可能是失败了。但是不死心,想强刷进路由器看看,谁知breed直接就不认这俩固件,我也是醉了。


  这次重新编译,决定采用现成的内核补丁,就不自己手动改了。参考自:http://www.right.com.cn/forum/thread-201653-1-1.html

  此次准备根据恩山论坛网友建议参考:http://wenku.baidu.com/link?url=Slg9rrKmg8ovjlIM7FmbkrZalSygc7TYSYnmodF-Yb0bPrhiJoSrM-L6C0a93n3Ruj0N8kAOpe0mPPDGdHteFY6SqMGjxy3zarzyUMGp9PK


不过我的编译环境是:Debian 7.11_X86


最开始我只是安装了这些软件:


sudo apt-get install gcc binutils bzip2 flex python perl make unzip gawk subversion libz-dev g++ libncurses5-dev libssl-dev


这回决定按照文章上面的安装:


sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip zip unrar p7zip p7zip-rar p7zip-full sharutils subversion libncurses5-dev ncurses-term zlib1g-dev gawk git-core libssl-dev


-----------------------------------------------------------------------------------------------

2017.02.08继续写

-----------------------------------------------------------------------------------------------


清除编译时产生的文件

建议清理编译产生的文件,以免下次编译时造成冲突,文件如果存在的话,编译将不会被替换
1.清除bin目录
make clean
bin目录是编译后固件所在文件夹,确保备份了编译后的固件。
2.清除交叉编译工具以及工具链目录
make dirclean
3.清除所有相关东西
make distclean
该命令会清除下载的软件包,配置文件,feed内容等,但不建议使用。

附加
make命令简单说明
make V=99
V=99表示输出详细的debug信息
make world
表示编译所有
make j=2 V=99
如是多核CPU,加j=2 选项理论上能加快编译速度(第一次编译不推荐使用)
只清除某个模块
make package/qos/clean
只编译某个模块
make package/qos/clean
make package/qos/compile
make package/qos/install
make V=99 | tee compile_v1.0.0.log 


继续编译

在用户目录下新建你的这一项目要存放的文件夹,

mkdir openwrt
cd openwrt
git clone -b master git://github.com/openwrt/openwrt.git cc #因为目前最新版的开发代号为Chaos Calmer,所以我就直接把源码克隆到cc目录,此cc代表新建目录名
cd cc
cp feeds.conf.default feeds.conf  #以默认扩展软件包配置文件作为我的配置文件
./scripts/feeds update -a      #更新扩展软件包
./scripts/feeds install -a     #安装扩展软件包
make defconfig     #测试编译环境
make menuconfig     #进入定制界面
make V=99 | tee build.log
egrep "tar.bz2|tar.gz|tar.xz" build.log   #出问题后,一般是国外服务器的某个软件下载不成功,手动下载后放在dl目录即可(dl就是download的缩写),中断后再次编译


这是最开始的步骤。

  因为不是第一次编译了,所以这次需要更新一下源代码,先清除一下上次失败产生的临时文件

cd cc
make clean

make dirclean

git pull origin master

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


参考:http://www.right.com.cn/forum/thread-185335-1-1.html

添加路由宝,目前版本跟文章中有些地方不一样。我先试过再写。


根据文章调整了一些地方,再次执行编译:


make defconfig     #测试编译环境
make menuconfig     #进入定制界面
make V=99 | tee 20170208.log
egrep "tar.bz2|tar.gz|tar.xz" 20170208.log   #出问题后,一般是国外服务器的某个软件下载不成功,手动下载后放在dl目录即可(dl就是download的缩写),中断后再次编译
#然后就没有反应了,编译也没成功,感觉有问题
make download V=99 #决定采用先下载,再编译
make

终于编译出了一个“openwrt-ramips-mt7620-youku-yk1-squashfs-sysupgrade.bin”固件,breed也认,正常刷进去了,心里当时是很窃喜的,但是现实是残酷的,刷完重启后,路由器不运行.........................






发表评论: