好久没更新博客啦。最近在搞一个项目,使用的是MT7628开发板,用于实现4G无线路由、VPN等各种功能,本文主要记录编译MT7628固件的过程,讲述遇到的各种问题以及解决方法。
首先介绍一下开发板情况,型号TR7628NADM,烧录的是openwrt提供的固件,openwrt是啥?百度百科一下,这是一个嵌入式linux发行版,总之功能很强大啦,现在主流的路由器里大多都是这个固件,特点:简单&好用。
Ubuntu采用的是14.04版本,虚拟机当然是VM的啦,版本12.5.2 build-4638234,这个一般无所谓,习惯哪个就用哪个。
接下来开始重点。。。
本人从供应商那里拿到了MTK基于OpenWrt系统的开发包,开发包名称这里也给一下mtksdk-openwrt-3.10.14-20150311-d021c937.tar.bz2。将这个包拷贝到Ubuntu里(我直接放到了/home/user,user是管理员账户),使用tar解压,获得openwrt-sdk文件夹,这个文件夹就是我们编译MT7628固件的根文件了。
以下是编译过程:
第一步:
#su
输入密码,进root。
#sudo apt-get install git g++ make libncurses5-dev subversion libssl-dev gawk
libxml-parser-perl unzip wget python xz-utils vim zlibc zlib1g zlib1g-dev openjdk-8-jdk
build-essential ccache gettext xsltproc
把这些依赖的包先装一下,这里遇到了第一个问题,就是openjdk-8-jdk这个包会安装失败,这种情况在15版本以下的Ubuntu中会出现,我在网上查了一下,大概意思是不建议15版本以下Ubuntu用户安装这个包,但是编译源码需要怎么办呢?方法如下:
#sudo add-apt-repository ppa:openjdk-r/ppa
#sudo apt-get update
#sudo apt-get install openjdk-8-jdk
#sudo update-alternatives --config java
#sudo update-alternatives --config javac
#java -version
这里参考了一位高人,贴网址,想了解更多自己去看吧。https://www.yangshengliang.com/biancheng-kaifa/java-jiancheng/206.html
现在所有编译前工作都已经完成了,开始搞它。
第二步:
进入编译的根目录。
#cd /home/user/openwrt-sdk
然后分别运行下面两行指令,这是必须步骤,必须步骤,必须步骤,重要事情说三遍!这两行指令是从git获取最新的安装包,保持你编译的固件是最新状态。
#./scripts/feeds update -a
#./scripts/feeds install -a
结束后就可以开始配置啦。
#make menuconfig
问题出现了,openwrt官方不给用root用户编译固件!这什么玩意?找了一大堆方法,以下最简单:
#vi include/prereq-build.mk
干掉这行:[ "$$(shell whoami)" != "root" ](直接在前面加#号注释掉),保存退出,再次运行make menuconfig,警告木有了,可以继续了。
第三步:
开始配置,主要关注这几个地方,直接放图了。
MTK Properties-> Drivers
enter键进入,继续配置kmod-mt7628
第一个进去,选项如下:
回上一页,进第二个,选项如下:
再到LuCI(MTK) -> 1. Collections,配置如下:
这个选项应该是支持板子烧入固件后可通过网页配置一些东西。
配置完成啦,下面开始make。
第四步:
#make V=s -j 4
其实用make V=s也是可以的,加-j 4的目的是不是会快一点?后面的2对应你机器的核心数,我给ubuntu配置了4核,所以我这里写的是4。
要想编译一次就能成功?未免太天真了吧。果不其然,各种问题频繁出现。因为编译过程中要下载很多包,所以ubuntu没网?对不起,肯定失败的。但也不要怕,一般来说出现错误了,就用下面的命令继续编,不用管它,因为很多错误都是包未下载完全造成的。
#make V=s
一直到真的编译不过去了,本人就遇到了这个包一直下载不了---util-linux-2.24.1.tar.xz,404错误!很好办,用迅雷或者百度网盘,在ubuntu的输出中找到这个包的地址,复制-下载-拷贝到/home/user/openwrt-sdk/dl,搞定。找不到地址自己去网上搜这个包,下载-拷贝到dl,然后继续make V=s。
一般来说多次尝试就能成功,如下就是编译成功了。
可在/home/user/openwrt-sdk/bin/ramips目录下找到这个文件:openwrt-ramips-mt7628-mt7628-squashfs-sysupgrade.bin。把这个文件烧到板子里就能运行了。
第五步:
为什么会有第五步?因为有些人编译时候图快,将别人编译好的dl文件夹拷贝到自己的根目录下,这个dl文件夹装的是编译过程中下载的安装包,正常来说拷贝过来后很多包就不用下载了,省时省力。但是,编译时候会出现如下这种错误:
cat: openwrt-sdk/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/base-files/ipkg-ramips_24kec/base-files/etc/sdk.version
/home/user/openwrt-sdk/bin/ramips/packages/base/base-files_156-unknown_ramips_24kec.ipk
ERROR 2******
这种问题网上有人解决了,请先看原贴,然后用下面的方法解决:https://blog.csdn.net/shanruo/article/details/81610039
文章解释很清楚了,就是缺少几个sdk.version的文件。没有怎么办?
#vi (路径)/sdk.version
内容就写V1.0.0,保存退出!
方法简单,但是亲测很有效,然后继续编译。
#make V=s
成功了。。。