OpenWrt系统自编译指南
前言
一直有接触openwrt系统,但以前都是直接去恩山论坛找别人编译好的固件,恰逢此次某夕夕打折于是便入手了N5105软路由,去恩山发现没找到自己想要的X86固件,于是便打算自己尝试编译openwrt固件来给软路由使用,在网上各种教程大差不差,但本人编译还是花了好几天,其中也是经历了各种报错,便打算写一遍教程,以便给刚入坑的萌新小白们参考,因本人也是小小白,所以写的不对的地方,希望各位大佬不吝赐教,多多指正
编译环境搭建
因为本人是小白,所以选用了带有图像界面的Ubuntu系统,版本选用了22.04.1-desktop,虚拟机软件选择了VMware WorkstationPro v16.2.4,以下为VMware安装Ubuntu系统过程,熟悉的大佬可以直接跳过此段,首先我们需要打开VMware左上角点击文件选择新建虚拟机,然后选择自定义再下一步
硬件兼容性不做更改,直接下一步,然后选择稍后安装操作系统,选择Linux,版本选择Ubuntu x64
接着下一步,虚拟机名称随意,继续点击下一步,选择处理器和内核数量,这里按照自己想法选择,我选择了处理器数量4,内核数量2,然后下一步选择虚拟机运行内存,因为我内存较大,所以我直接给了4096MB
然后一路默认选项到下一步分配磁盘大小,这里我选择了100GB,储存为单个文件以获得最大性能,继续下一步,来到这个界面
我们选择自定义硬件
而后点击新CD/DVD选项,选择使用ISO映像文件,选择到下载好的Ubuntu镜像,点击确认,然后点完成
点击完成后即可开启虚拟机,准备安装Ubuntu系统,开启虚拟机电源后,看到如下界面直接回车
然后下滑选择简体中文,选择安装Ubuntu
然后继续 选择键盘布局后,下一步选择最小化安装 ,安装类型默认即可 大佬可以自行分区
选择完时区后继续 填写用户名和密码等信息 然后继续
显示下载文件时可以点击skip跳过 然后等待就会显示安装完毕
这时选择关机而不重启 关机后编辑虚拟机设置 把CD/DVD改成自动检测
保存后开启虚拟机电源 开机后 输入密码 然后跳过各种提示 接着选择桌面右键 选择显示设置 改成你想要的分辨率
我这里改成了2560*1600 缩放200
接着打开软件更新器 把源改成你看得顺眼的源 我选择了阿里云
而后点击重新载入即可 有提示语言支持没有完整安装 直接安装即可
等待安装完毕后 我们需要安装vmware tools 以达到能在虚拟机和主机之间复制
粘贴等功能
打开终端 输入命令
sudo apt-get update
sudo apt-get install open-vm-tools
输入y 确定安装 而后继续输入
sudo apt-get install open-vm-tools-desktop
安装完毕后 重启下虚拟机
安装编译依赖
此时即可开始准备部署编译所需环境 可选择编译原版openwrt或者Lean大佬的固件 由于本人只是小白 于是便选择了Lean大佬的源码 插件仓库使用kenzo大佬打包好的 接下来就可以开始部署环境
注意 不要使用root用户 且需要全局科学上网
安装依赖
sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev
libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz
mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip libpython3-dev qemu-utils
rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
克隆源代码
git clone https://github.com/coolsnowwolf/lede
cd lede
sed -i '$a src-git kenzo https://github.com/kenzok8/openwrt-packages' feeds.conf.default
sed -i '$a src-git small https://github.com/kenzok8/small' feeds.conf.default
git pull
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
至此应该进入TUI文本图形界面了 在此界面我们可以做各种功能的选取 生成.config文件 进行编译 建议默认不更改选项编译一次 以下是TUI界面基本操作说明
1 上下方向键选择子项目 左右方向键对应下方Exit Save Load
2 回车键进入选项 空格键可以选择选项 单击空格出现M标志 代表以Mod形式编译 编译完的可执行文件不加入内核 双击空格出现*标志 表示将该文件编译进内核 但是固件包会变大 我这边所需要的 一律选择了* 需要取消的话 按空格到未选中状态即可
3 连按2次ESC返回上级目录
首次编译我只在Target images改了内核文件和系统文件大小
接着右键Save保存
预编译
接着输入下方代码下载dl库
Make download -j8
接着输入如下代码开始编译
make V=s -j$(nproc)
然后开始编译固件 我这里选择了调用所有线程编译
如果调用所有线程编译失败的话 请尝试单线程编译 以便查找问题
单线程编译代码为
make V=s -j1
编译成功后会显示如下图
编译好的固件在lede/bin/targets 因为我是x86架构所以显示x86点击进去 再点64 即为编译完成的固件
到这首次编译成功 接下来可以正式编译我们所需要的固件了
正式编译
首先需要确认自己构建目标 也就是TUI界面的Target System选项 可选择CPU架构
因为我软路由是X86架构 所以我需要编译的是X86架构的固件
然后确定自己的需求 比如是否需要IPV6 还有需要编译的插件
我个人需要魔法 阿里DDNS及广告屏蔽 上网控制 KMS服务器等功能
确认好需求 就可以开始编译所需固件
在lede文件夹 打开终端 接着输入make menuconfig
进入TUI界面选择所需要的功能
在选择玩自己架构及CPU型号后 进入Tatget images选项
选择好自己所需要的格式 若无虚拟机需求 可以去掉VMDK格式
建议选择squashfs 如需后期升级固件 记得勾选GZIP images
因为我需要部署在esxi 所以我勾选了GRUB EFI images
在Kernel partition size设置内核大小这里需要根据你的路由器内存来设置
在Root filesystem partition size 设置系统大小 还是根据你路由器内存来设置
因为我是软路由 所以直接放飞自我 给了256和512
然后双击ESC退回上一级 进入Base System 找到dns masq-full
建议把这个选项的所有子选项全部勾选 有些插件会依赖这个组件
然后返回主页面 选择Extra packages 勾选上ipv6 helper 以支持IPV6
同时因为我有NAS 所以取消勾选auto samba选项
回主页 在Network Firewall ip6tables下选择ip6tables-extra和ip6tables-mod-nat选项
在Network勾选odhcp6c和odhcpd-ipv6only
继续回主页 选择LuCI 再选Collections 把Luci选上
返回上页 打开Modules 选择Luci-compat勾选上
返回上页 在Protocols选择luci-proto-ipv6和luci-proto-ppp
返回上页 在Translations选择语言 默认简体中文可不用修改
返回上页 接着在Applications选择自己需要的插件
然后在Kernel modules --- Network Devices中可以选择需要的有线网卡驱动
在Kernel modules --- Wireless Devices中可以选择需要的无线网卡驱动
接下来就可以 Save保存config文件
如果需要修改默认的IP地址和主机名可以找到
lede/package/basefiles/files/bin/config_generate
在大约150行和290行可以看到 直接vi修改即可
如果需要修改版本号 位置则在
lede/package/lean/default-settings/files/zzz-default-settings
有需要可以在 lede/package/base-files/files/etc/banner 可以修改SSH欢迎信息
然后回到终端 输入make V=s -j$(nproc) 等待编译完成
而后在bin/targets 找到自己编译好的固件既可以使用
编译好的固件我用虚拟机测试了一下 可用
至此 教程结束
总结
感谢Lean Kenzok及来自五湖四海提供丰富插件的作者们
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~














































橙哈哈哈哈嗝
校验提示文案
sman
校验提示文案
大大大刀君
校验提示文案
胡蛋
校验提示文案
胡蛋
校验提示文案
大大大刀君
校验提示文案
sman
校验提示文案
橙哈哈哈哈嗝
校验提示文案