Ubuntu编译MT7628的固件(openwrt)

好久没更新博客啦。最近在搞一个项目,使用的是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,警告木有了,可以继续了。

 

第三步:

开始配置,主要关注这几个地方,直接放图了。

Ubuntu编译MT7628的固件(openwrt)_第1张图片

MTK Properties-> Drivers

Ubuntu编译MT7628的固件(openwrt)_第2张图片

enter键进入,继续配置kmod-mt7628

Ubuntu编译MT7628的固件(openwrt)_第3张图片

第一个进去,选项如下:

Ubuntu编译MT7628的固件(openwrt)_第4张图片

回上一页,进第二个,选项如下:

Ubuntu编译MT7628的固件(openwrt)_第5张图片

再到LuCI(MTK) -> 1. Collections,配置如下:

Ubuntu编译MT7628的固件(openwrt)_第6张图片

这个选项应该是支持板子烧入固件后可通过网页配置一些东西。

配置完成啦,下面开始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。

一般来说多次尝试就能成功,如下就是编译成功了。

Ubuntu编译MT7628的固件(openwrt)_第7张图片

可在/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

成功了。。。

 

你可能感兴趣的:(Ubuntu编译MT7628的固件(openwrt))