前言
热评就在眼前,骚话卡在嘴边 :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
中的文件。
清除 OpenWrt 源码以外的文件(可选)
make distclean
还原 OpenWrt 源码到初始状态(可选)
git clean -xdf
清除编译缓存
rm -rf tmp
删除配置文件(可选)
rm -f .config
拉取 OpenWrt 源码更新
git pull
Comments | 2 条评论
那么已编译好的是不是就可以直接用呢 :cool:
@小石 x86构架的可以刷写进U盘直接引导开机,路由构架的就得刷机 :roll: