1、编译环境:Ubuntu16.04
2、源码:source-openwrt-18.06
通过浏览器快速下载源码地址:
https://codeload.github.com/lede-project/source/zip/openwrt-18.06
通过克隆 OpenWrt 源码:
git clone https://github.com/coolsnowwolf/lede openwrt
命令末尾加了openwrt是指克隆代码到openwrt目录,目的是为了规范化,因为有时并不是编译这个的源码。
3、配置编译环境 Ubuntu16.04 的源:
参考:https://blog.csdn.net/liangontheway/article/details/103509635
注意:源 要与编译环境一致,比如,编译环境Ubuntu16.04,使用Ubuntu16.04的源。
对主机(host)更换阿里源
1、备份
系统本身自带的sources.list肯定要保留一份,不然以后出啥问题想恢复默认都没办法。
Ctr+Alt+T 打开Ubuntu系统的命令执行窗口
sudo cp /etc/apt/sources.list /etc/apt/sources_origin.list
执行完毕后可以到上面指定的目录下确认备份是否生成。
2. 更换源
据说阿里源是Ubuntu官方指定的国内镜像源,不知真假,不过我用的是阿里源,感觉还不错,其他源没试过。
sudo gedit /etc/apt/sources.list
用此代码打开文档后,删除所有内容,然后将下面的代码复制到文档当中,保存,关闭文档。
deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe
3、更新
sudo apt-get update
国内源更新完毕
4、使用非root账户 更新软件列表
sudo apt-get update
sudo apt-get upgrade
5、安装基础环境
sudo apt-get install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev
6、进入源码目录
cd source-openwrt-18.06
7、更新软件包 即 feeds插件
(feeds 是扩展的软件包,独立于 OpenWrt 源码之外,所以需要单独进行拉取和更新。)
拉取 feeds 源码:
./scripts/feeds update -a
安装 feeds 中的软件包:
./scripts/feeds install -a
8、测试编译环境(检测编译环境并生成默认的编译配置文件):
make defconfig
9、配置固件菜单(调整 OpenWrt 系统组件):
make menuconfig
选择Soc、机型,<*>,表示将软件包编译进固件,,表示软件包会被编译,但不会编译进固件。
添选择选择CPU型号、路由器型号,<*>,表示将软件包编译进固件,,表示软件包会被编译,但不会编译进固件。
此处以斐讯K2 PSG1218为例:
Target System --> MediaTek Ralik MIPS
Subtarget --> MT7620 based boards
Target Images --> Phicomm PSG1218
添加luci网页界面
LuCI --> Collections -->luci
添加简体中文
LuCI --> Modules --> Translations -->Chinese(zh-cn)
添加网页界面主题
LuCI --> Themes -->luci-theme-openwrt (喜欢哪个主题就选择那个主题)
设置完毕,保存,最后选择Exit。
8.预先下载dl库,可以避免下载造成的编译失败。
通过命令:
make download -j8 V=s
进行下载dl库
为了加快下载进程,通过浏览器搜索下载openwrt18.06相对应的dl 库,将dl 文件夹连同里面的文件放到source-openwrt18.06中;
为了防止遗漏,再次通过命令:
make download V=s
再次检查下载
在此命令下载过程中如果遇到下载缓慢的文件,通过Ctrl +C暂停进程,
通过将此事终端显示的链接复制到 迅雷 或者 浏览器单独下载;
然后将 dl 文件夹下面的 相应的正在下载而又没完成的的文件删除掉,将单独下载下来的完整的文件放到 dl文件夹下;
然后 从新 make download V=s ,下载进程就会跳过这个文件继续下载其他短缺的文件;
(-j8是指使用8个线程下载,理论上是数字越大下载越快,但似乎有个上限,实测5线程以上其实速度相差不了多少,在网络好的情况下,基本在5分钟以内能下载完)。
检查文件完整性
find dl -size -1024c -exec ls -l {} \;
此命令可以列出下载不完整的文件(根据我多次编译的经验得出小于1k的文件属于下载不完整),如果存在这样的文件可以使用find dl -size -1024c -exec rm -f {} \;命令将它们删除,然后重新执行make download下载并反复检查,确认所有文件完整可大大提高编译成功率,避免浪费时间。
9.文件下载完毕,开始编译固件。
make V=99 -j2
# -j参数设定全速编译 (-j参数可能会导致系统卡死,不建议老爷机使用)
----编译进行----
再次等待很长时间,第一次时间较长。
-j1:使用单线程编译。新手推荐单线程编译,一是因为玄学问题可能成功率高,二是方便查看错误日志,多线程的错误日志是交织在一起的,不方便排错。V=s:输出详细日志,用于编译失败时找出错误。
10.生成的bin文件路径:bin/targets/系列名/
:~/openwrt/openwrt-18.06/source-openwrt-18.06/bin/targets/ramips/mt76x8$
11.编译好的固件名格式为 lede-xxxx-generic-xxx-squashfs-sysupgrade.bin 将bin文件复制到U盘或者电脑桌面,在breed下刷入固件,浏览器登录192.168.1.1,LEDE的管理界面。
12. 如果再次编译,需要先删除 build_dir 目录下的设置文件。或者执行命令 make clean
经过3个多小时的编译过程,终成正果:
正在上传…重新上传取消
正在上传…重新上传取消
tatic/material option resourcebase /luci-stati