自己编译OpenWrt

前言

热评就在眼前,骚话卡在嘴边 :razz: ;又是闲着无事的一天,就想来试试自己编译一下Openwrt,于是就有了这篇文章 :grin:

注意事项

编译全程需要挂梯子,并且不能以su用户编译!

配置要求

硬件:

CPU:是CPU都可以

内存:推荐4G及以上

硬盘:可用空间起码10G(最好20G|友情提示:长期编译最好不要用固态硬盘!编译过程中会产生大量小文件,并且会频繁地读写硬盘,短期内没什么问题|其实长期编译对硬盘都很伤

关于编译速度:

编译的速度取决于你编译的系统框架、插件数量和你的CPU多线程性能、还有你的硬盘随机读写速度;博主的i7-3620QM 8线程编译mt7260无插件用时约1小时;CPU主频高,但核心/线程数少对编译速度没有多大提升,相反,核心/线程数越多,编译速度越快

瓶颈:

  • 你CPU性能好,硬盘随机读写垃圾,瓶颈在硬盘
  • 你硬盘随机读写好,CPU垃圾,瓶颈在CPU
  • 你CPU好,硬盘也好,但内存小,瓶颈在内存

为什么内存小会导致编译速度慢?

因为你的内存爆炸了以后,改存进内存的数据就会存在swap(交换区|虚拟内存),然而虚拟内存其实是在硬盘上面的,硬盘的速度又是内存的10%左右,这就会导致CPU读取需要编译的文件的时间大大增加,也就间接地导致编译速度慢


系统:

Ubuntu、Debian、(没试过Centos)

推荐系统:Ubuntu Server 18.04

最好别用Ubuntu 19.10(不太稳定)、Windows子系统也不行

为什么:因为编译openwrt需要大量的系统资源,如果你的内存小于4G,CPU也比较弱,那选择Ubuntu Server 18.04是最好的了


网络

需要全程挂梯子

编译

安装依赖

sudo apt-get update
sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3.5 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib

获取源码

这里我们用的是Lean大大的源码

git clone https://github.com/coolsnowwolf/lede

获取&安装软件库

更新软件库

cd lede
./scripts/feeds update -a

安装软件库

./scripts/feeds install -a

配置

make menuconfig 

关于里面的参数我会另开一篇文章详讲)

在这里我简单说明一下

Target System为你编译的系统的CPU框架类型,如Intel,AMD的系统就是x86框架

Subtarget就是CPU类型

新手建议不要添加其他插件,避免出错

配置好后,选择Save,会弹出两个弹窗,回车就行了

保存好后,选择Exit并回车

预下载编译所需的软件包

执行:

make download -j8 V=s

开始编译

输入

make -j$(nproc) V=s

然后慢慢的等待就行了

-j是指定线程数,$(nproc)是linux里的一个变量,是你的CPU线程数

成功编译

输出的系统镜像会保存在编译目录的bin/targets文件夹下,然后你就可以愉快地刷机啦

编译失败

你可以把你编译失败后的截图发给我(1499602914@qq.com),也可以截取失败后的整屏日志发在评论区


其他

使用虚拟机运行Linux进行编译

虚拟机:我个人推荐hyper-v

为什么?

很多人会问为什么VM不行,VM不是不行,而是效率比hyper-v低,相对占用系统资源更多,从虚拟机的虚拟化技术讲,hyper-v是半虚拟化,VM则是全虚拟化,半虚拟化因为能够直接向CPU发送指令,省去了VM的捕捉,翻译等步骤,因而效率更高;VM的全虚拟化虽然效率比hyper-v低,但是兼容性更高;注意!VM与hyper-v不能共存!

虚拟CPU数:CPU有多少线程就选多少线程

控制:建议使用SSH远程控制

编译的其他命令

检查文件完整性

find dl -size -1024c -exec ls -l {} \;

清除旧的编译产物(可选)

make clean

清除旧的编译产物、交叉编译工具及工具链等目录(可选)

make dirclean

更换架构编译前必须执行。此操作会删除/bin/build_dir目录的中的文件(make clean)以及/staging_dir/toolchain/tmp/logs中的文件。

清除 Open­Wrt 源码以外的文件(可选)

make distclean

还原 Open­Wrt 源码到初始状态(可选)

git clean -xdf

清除编译缓存

rm -rf tmp

删除配置文件(可选)

rm -f .config

拉取 Open­Wrt 源码更新

git pull

《自己编译OpenWrt》上有2条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注