OpenWrt 编译步骤与命令详解 含N1、X86详细编译方法 插件名中文注释
部分来源 https://p3terx.com/archives/openwrt-compilation-steps-and-commands.html
前言
编译 OpenWrt 的过程就像是复读机,除了选择系统组件外,几乎每次编译都是复制粘贴相同的命令。而理解每一条命令的作用、什么时候该去执行,这样才能更好的去解决编译中遇到的问题,更顺利的编译出固件。
准备工作:
虚拟机搭建环境:
1)下载虚拟机软件VMware15.5以及Ubuntu18.04.5
链接: https://pan.baidu.com/s/1eDJXKpSoTMZRcSnBjjhOWw 提取码: eiap
VMware许可证:UY758-0RXEQ-M81WP-8ZM7Z-Y3HDA
2)安装 vmware tools(解决鼠标复制和桌面大小控制)
双击打开文件,将安装包提取到桌面,右键进入终端手动输入(可tab键补齐命令)
1 |
sudo ./vmware-install.pl |
3)安装ssh sever(方便后期连接虚拟机下载固件和上传文件)
1 |
sudo apt-get install openssh-server |
进入编译流程
升级更新系统:
1 |
sudo apt-get update |
安装L大依赖库
1 |
sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 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 antlr3 gperf wget curl swig rsync |
首次编译
- 克隆L大 源码
1git clone https://github.com/coolsnowwolf/lede这里以 Lean 大佬的源码仓库为例子,毕竟很多人都在用它。(命令末尾加了
openwrt
是指克隆代码到openwrt
目录,目的是为了规范化,因为有时并不是编译这个的源码。) - feeds配置文件中添加openclash passwall
1 2 |
src-git kenzok https://github.com/kenzok8/openwrt-packages src-git small https://github.com/kenzok8/small |
- 进入源码目录
1cd lede - 下载 feeds 源中的软件包源码
1./scripts/feeds update -afeeds 是扩展的软件包,独立于 OpenWrt 源码之外,所以需要单独进行拉取和更新。
- 安装 feeds 中的软件包
1./scripts/feeds install -a - 调整 OpenWrt 系统组件
1make menuconfig首次编译建议只选择架构,其它都不要动,这样编译成功率会更高。如果不打算调整组件则输入
make defconfig
,它会检测编译环境并生成默认的编译配置文件。 - 预下载编译所需的软件包
1make download -j8 V=s-j8
是指使用8个线程下载,理论上是数字越大下载越快,但似乎有个上限,实测5线程以上其实速度相差不了多少,在网络好的情况下,基本在5分钟以内能下载完。 - 检查文件完整性
1find dl -size -1024c -exec ls -l {} \;此命令可以列出下载不完整的文件(根据我多次编译的经验得出小于1k的文件属于下载不完整),如果存在这样的文件可以使用
find dl -size -1024c -exec rm -f {} \;
命令将它们删除,然后重新执行make download
下载并反复检查,确认所有文件完整可大大提高编译成功率,避免浪费时间。 - 编译前如有需要,可自行修改固件IP地址
1 |
package/base-files/files/bin/config_generate |
- 开始编译
1make -j1 V=s-j1
:使用单线程编译。新手推荐单线程编译,一是因为玄学问题可能成功率高,二是方便查看错误日志。V=s
:输出详细日志,用于编译失败时找出错误。而且满屏代码在跑能装逼,一跑就是几个小时,装逼更持久。
再次编译
- 进入源码目录(如果不在此目录)
1cd lede
更新
TIPS: 短期内再次编译可忽略更新这个步骤。
- 更新系统软件包
1sudo sh -c "apt update && apt upgrade -y"主要作用是更新在编译环境搭建时所安装的编译组件
- 拉取 OpenWrt 源码更新
1git pull - 更新 并安装feeds 源中的软件包源码
1./scripts/feeds update -a && ./scripts/feeds install -a - 清除编译配置和缓存
1rm -rf ./tmp && rm -rf .config - 执行进入编辑菜单
1 |
make menuconfig |
- 执行编译
1 |
make -jn V=99 # 开始编译 n=线程数+1,例如4线程的I5填-j5 |
文件清理
- 清除旧的编译产物(可选)
1make clean在源码有大规模更新或者内核更新后执行,以保证编译质量。此操作会删除
/bin
和/build_dir
目录中的文件。 - 清除旧的编译产物、交叉编译工具及工具链等目录(可选)
1make dirclean更换架构编译前必须执行。此操作会删除
/bin
和/build_dir
目录的中的文件(make clean
)以及/staging_dir
、/toolchain
、/tmp
和/logs
中的文件。 - 清除 OpenWrt 源码以外的文件(可选)
1make distclean除非是做开发,并打算 push 到 GitHub 这样的远程仓库,否则几乎用不到。此操作相当于
make dirclean
外加删除/dl
、/feeds
目录和.config
文件。 - 还原 OpenWrt 源码到初始状态(可选)
1git clean -xdf如果把源码改坏了,或者长时间没有进行编译时使用。
- 清除临时文件
1rm -rf tmp删除执行
make menuconfig
后产生的一些临时文件,包括一些软件包的检索信息,删除后会重新加载package
目录下的软件包。若不删除会导致一些新加入的软件包不显示。 - 删除编译配置文件
1rm -f .config在不删除的情况下如果取消选择某些组件它的依赖组件不会自动取消,所以对于需要调整组件的情况下建议删除。
编译
- 调整 OpenWrt 系统组件
1make menuconfig如果不打算调整组件则输入
make defconfig
,它会检测编译环境并根据更新自动调整编译配置文件。 - 预下载编译所需的软件包
1make download -j8 V=s - 检查文件完整性
1find dl -size -1024c -exec ls -l {} \;此命令可以列出下载不完整的文件(根据我多次编译的经验得出小于1k的文件属于下载不完整),如果存在这样的文件可以使用
find dl -size -1024c -exec rm -f {} \;
命令将它们删除,然后重新执行make download
下载并反复检查,确认所有文件完整可大大提高编译成功率,避免浪费时间。 - 开始编译
1make -j$(nproc) || make -j1 || make -j1 V=s多线程编译失败后自动进入单线程编译,失败则输出详细日志
源码回退
1 2 3 4 |
git log 查看源码更新日志 git reset --hard HEAD^ 回退到上个版本 git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前 git reset --hard commit_id 退到/进到 指定commit的sha码(可到大雕源码地址直接查询) |
N1编译部分
写入emmc以及显示cpu温度等监控
1 2 |
openwrt依赖项:(编译openwrt时需要添加的包,配合inst-to-emmc.sh update-to-emmc.sh update-beikeyun-openwrt.sh 等使用,以及cpu温度频率监测时用到) language里的 perl、perlbase-utf8 |
1 |
util -> disc : blkid fdisk lsblk |
1 |
util -> filesystem: 能选的都选上,编译不过的就不用选 |
1 |
util: losetup uuidgen tar gawk getopt bash |
加入N1无线功能:
1)Firmware 选择如下驱动
brcmfmac-firmware-43430-sdio
brcmfmac-firmware-43455-sdio
brcmfmac-firmware-usb
wireless-regdb
2)进入Kernel modules 中Network Devices选中
kmod-b44
3)Wireless Drivers 选中如下文件
kmod-brcmfmac
Enable SDIO bus interface support
Enable USB bus interface support
kmod-brcmutil
kmod-cfg8021
4)Kernel modules-USB Support:
kmod-usb-hid(usb 键盘鼠标支持)
kmod-usb-net 勾选ais和ais88179以及88152 USB网卡驱动
kmod-usb-ohci
kmod-usb-uhci (usb 1.1 驱动)
kmod-usb2
kmod-usb3
5)回主界面进入Network——wirelesspad
Hostapd
hostapd-common
hostapd-utils
N1无线部分结束!
LuCI菜单下,常用插件功能注释,其中包含Shadowsocks/SSR/V2ray/Trojan/Wireguard等常用科学上网工具:
—————————————————————————————–
LuCI —> Applications —> luci-app-accesscontrol #访问时间控制
LuCI —> Applications —> luci-app-adbyby-plus #广告屏蔽大师Plus +
LuCI —> Applications —> luci-app-arpbind #IP/MAC绑定
LuCI —> Applications —> luci-app-autoreboot #支持计划重启
LuCI —> Applications —> luci-app-ddns #动态域名 DNS(集成阿里DDNS客户端)
LuCI —> Applications —> luci-app-filetransfer #文件传输(该功能支持浏览器安装ipk包)
LuCI —> Applications —> luci-app-firewall #添加防火墙
LuCI —> Applications —> luci-app-flowoffload #Turbo ACC网络加速(集成FLOW,BBR,NAT,DNS…)
LuCI —> Applications —> luci-app-frpc #内网穿透 Frp客户端
LuCI —> Applications —> luci-app-guest-wifi #WiFi访客网络
LuCI —> Applications —> luci-app-ipsec-vpnd #VPN服务器 IPSec
LuCI —> Applications —> luci-app-mwan3 #MWAN3负载均衡
LuCI —> Applications —> luci-app-mwan3helper #MWAN3分流助手
LuCI —> Applications —> luci-app-nlbwmon #网络带宽监视器
LuCI —> Applications —> luci-app-ramfree #释放内存
LuCI —> Applications —> luci-app-samba #网络共享(Samba)
LuCI —> Applications —> luci-app-sqm #流量智能队列管理(QOS)
LuCI —> Applications —> luci-app-ssr-plus #ShadowsocksR Plus+
—luci-app-ssr-plus —> Include Shadowsocks V2ray Plugin #SS V2Ray插件
—luci-app-ssr-plus —> Include V2Ray #V2ray客户端
—luci-app-ssr-plus —> Include Trojan #Trojan客户端
—luci-app-ssr-plus —> Include redsocks2 #redsocks2代理
—luci-app-ssr-plus —> Include Kcptun #Kcptun加速
—luci-app-ssr-plus —> Include ShadowsocksR Server #SSR服务器
LuCI —> Applications —> luci-app-syncdial #多拨虚拟网卡(原macvlan)
LuCI —> Applications —> luci-app-unblockmusic #解锁网易云灰色歌曲3合1新版本
LuCI —> Applications —> luci-app-upnp #通用即插即用UPnP(端口自动转发)
LuCI —> Applications —> luci-app-vlmcsd #KMS服务器
LuCI —> Applications —> luci-app-vsftpd #FTP服务器
LuCI —> Applications —> luci-app-wifischedule #WiFi计划任务
LuCI —> Applications —> luci-app-wirelessregdb #WiFi无线
LuCI —> Applications —> luci-app-wol #WOL网络唤醒
LuCI —> Applications —> luci-app-wrtbwmon #实时流量监测
LuCI —> Applications —> luci-app-xlnetacc #迅雷快鸟
LuCI —> Applications —> luci-app-zerotier #ZeroTier内网穿透
—————————————————————————————–
Extra packages —> ipv6helper #支持 ipv6
—————————————————————————————–
Utilities —> open-vm-tools #打开适用于VMware的VM Tools
—————————————————————————————–
Lean OpenWrt/Lede 全部插件列表
全部可用插件功能注释:
—————————————————————————————–
LuCI —> Applications —> luci-app-accesscontrol #访问时间控制
LuCI —> Applications —> luci-app-acme #ACME自动化证书管理环境
LuCI —> Applications —> luci-app-adblock #ADB广告过滤
LuCI —> Applications —> luci-app-adbyby-plus #广告屏蔽大师Plus +
LuCI —> Applications —> luci-app-advanced-reboot #Linksys高级重启
LuCI —> Applications —> luci-app-ahcp #支持AHCPd
LuCI —> Applications —> luci-app-airplay2 #AirPlay音乐推流(安卓+IOS)
LuCI —> Applications —> luci-app-amule #aMule下载工具
LuCI —> Applications —> luci-app-aria2 # Aria2下载工具
LuCI —> Applications —> luci-app-arpbind #IP/MAC绑定
LuCI —> Applications —> luci-app-asterisk #支持Asterisk电话服务器
LuCI —> Applications —> luci-app-attendedsysupgrade #固件更新升级相关
LuCI —> Applications —> luci-app-autoreboot #支持计划重启
LuCI —> Applications —> luci-app-baidupcs-web #百度网盘管理
LuCI —> Applications —> luci-app-bcp38 #BCP38网络入口过滤(不确定)
LuCI —> Applications —> luci-app-bird1-ipv4 #对Bird1-ipv4的支持
LuCI —> Applications —> luci-app-bird1-ipv6 #对Bird1-ipv6的支持
LuCI —> Applications —> luci-app-bmx6 #BMX6路由协议
LuCI —> Applications —> luci-app-bmx7 #BMX7路由协议
LuCI —> Applications —> luci-app-cifs-mount #CIFS/SMB挂载设置
LuCI —> Applications —> luci-app-cifsd #CIFS/SMB网络共享
LuCI —> Applications —> luci-app-cjdns #加密IPV6网络相关
LuCI —> Applications —> luci-app-clamav #ClamAV杀毒软件
LuCI —> Applications —> luci-app-commands #Shell命令模块
LuCI —> Applications —> luci-app-cshark #CloudShark捕获工具
LuCI —> Applications —> luci-app-ddns #动态域名 DNS(集成阿里DDNS客户端)
LuCI —> Applications —> luci-app-diag-core #core诊断工具
LuCI —> Applications —> luci-app-diskman #磁盘管理工具
—luci-app-diskman —> Include btrfs-progs #新型的写时复制 (COW)
—luci-app-diskman —> Include lsblk #lsblk命令 用于列出所有可用块设备的信息
—luci-app-diskman —> Include mdadm #mdadm命令 用于创建、管理、监控RAID设备的工具
—luci-app-diskman —> Include kmod-md-raid456 #RAID 4,5,6 驱动程序模块
—luci-app-diskman —> Include kmod-md-linear #RAID 驱动程序模块
LuCI —> Applications —> luci-app-dnscrypt-proxy #DNSCrypt解决DNS污染
LuCI —> Applications —> luci-app-dnsforwarder #DNSForwarder防DNS污染
LuCI —> Applications —> luci-app-dockerman #Docker容器
LuCI —> Applications —> luci-app-dump1090 #民航无线频率(不确定)
LuCI —> Applications —> luci-app-dynapoint #DynaPoint(未知)
LuCI —> Applications —> luci-app-e2guardian #Web内容过滤器
LuCI —> Applications —> luci-app-familycloud #家庭云盘
LuCI —> Applications —> luci-app-filetransfer #文件传输(该功能支持浏览器安装ipk包)
LuCI —> Applications —> luci-app-firewall #添加防火墙
LuCI —> Applications —> luci-app-flowoffload #Turbo ACC网络加速(集成FLOW,BBR,NAT,DNS…)
LuCI —> Applications —> luci-app-freifunk-diagnostics #freifunk组件 诊断(未知)
LuCI —> Applications —> luci-app-freifunk-policyrouting #freifunk组件 策略路由(未知)
LuCI —> Applications —> luci-app-freifunk-widgets #freifunk组件 索引(未知)
LuCI —> Applications —> luci-app-frpc #内网穿透Frp客户端
LuCI —> Applications —> luci-app-frps #内网穿透Frp服务端
LuCI —> Applications —> luci-app-fwknopd #Firewall Knock Operator服务器
LuCI —> Applications —> luci-app-guest-wifi #WiFi访客网络
LuCI —> Applications —> luci-app-haproxy-tcp #HAProxy负载均衡-TCP
LuCI —> Applications —> luci-app-hd-idle #硬盘休眠
LuCI —> Applications —> luci-app-hnet #Homenet Status家庭网络控制协议
LuCI —> Applications —> luci-app-ipsec-vpnd #VPN服务器 IPSec
LuCI —> Applications —> luci-app-kodexplorer #KOD可道云私人网盘
LuCI —> Applications —> luci-app-lxc #LXC容器管理
LuCI —> Applications —> luci-app-meshwizard #网络设置向导
LuCI —> Applications —> luci-app-minidlna #完全兼容DLNA / UPnP-AV客户端的服务器软件
LuCI —> Applications —> luci-app-mjpg-streamer #兼容Linux-UVC的摄像头程序
LuCI —> Applications —> luci-app-mtwifi #联发科 MT WiFi驱动的支持,其它硬件配置不要选这个
LuCI —> Applications —> luci-app-music-remote-center #DAAP遥控音乐服务器
LuCI —> Applications —> luci-app-mwan3 #MWAN3负载均衡
LuCI —> Applications —> luci-app-mwan3helper #MWAN3分流助手
LuCI —> Applications —> luci-app-n2n_v2 #N2N内网穿透 N2N v2 VPN服务
LuCI —> Applications —> luci-app-netdata #Netdata实时监控(图表)
LuCI —> Applications —> luci-app-nfs #NFS网络共享
LuCI —> Applications —> luci-app-nft-qos #QOS流控 Nftables版
LuCI —> Applications —> luci-app-nlbwmon #网络带宽监视器
LuCI —> Applications —> luci-app-noddos #NodDOS Clients 阻止DDoS攻击
LuCI —> Applications —> luci-app-ntpc #NTP时间同步服务器
LuCI —> Applications —> luci-app-ocserv #OpenConnect VPN服务
LuCI —> Applications —> luci-app-olsr #OLSR配置和状态模块
LuCI —> Applications —> luci-app-olsr-services #OLSR服务器
LuCI —> Applications —> luci-app-olsr-viz #OLSR可视化
LuCI —> Applications —> luci-app-openvpn #OpenVPN客户端
LuCI —> Applications —> luci-app-openvpn-server #易于使用的OpenVPN服务器 Web-UI
LuCI —> Applications —> luci-app-p910nd #打印服务器模块
LuCI —> Applications —> luci-app-pagekitec #Pagekite内网穿透客户端
LuCI —> Applications —> luci-app-polipo #Polipo代理(是一个小型且快速的网页缓存代理)
LuCI —> Applications —> luci-app-pppoe-relay #PPPoE NAT穿透 点对点协议(PPP)
LuCI —> Applications —> luci-app-privoxy #Privoxy网络代理(带过滤无缓存)
LuCI —> Applications —> luci-app-qbittorrent #BT下载工具(qBittorrent)
LuCI —> Applications —> luci-app-qos #流量服务质量(QoS)流控
LuCI —> Applications —> luci-app-radicale #CalDAV/CardDAV同步工具
LuCI —> Applications —> luci-app-ramfree #释放内存
LuCI —> Applications —> luci-app-rp-pppoe-server #Roaring Penguin PPPoE Server 服务器
LuCI —> Applications —> luci-app-samba #网络共享(Samba)
LuCI —> Applications —> luci-app-samba4 #网络共享(Samba4)
LuCI —> Applications —> luci-app-sfe #Turbo ACC网络加速(flowoffload二选一)
LuCI —> Applications —> luci-app-s-s-libes #SS-libev服务端
LuCI —> Applications —> luci-app-shairplay #支持AirPlay功能
LuCI —> Applications —> luci-app-siitwizard #SIIT配置向导 SIIT-Wizzard
LuCI —> Applications —> luci-app-simple-adblock #简单的广告拦截
LuCI —> Applications —> luci-app-softethervpn #SoftEther VPN服务器 NAT穿透
LuCI —> Applications —> luci-app-splash #Client-Splash是无线MESH网络的一个热点认证系统
LuCI —> Applications —> luci-app-sqm #流量智能队列管理(QOS)
LuCI —> Applications —> luci-app-squid #Squid代理服务器
LuCI —> Applications —> luci-app-ssr-plus #ShadowsocksR Plus+
—luci-app-ssr-plus —> Include Shadowsocks V2ray Plugin #SS V2Ray插件
—luci-app-ssr-plus —> Include V2Ray #V2ray客户端
—luci-app-ssr-plus —> Include Trojan #Trojan客户端
—luci-app-ssr-plus —> Include redsocks2 #redsocks2代理
—luci-app-ssr-plus —> Include Kcptun #Kcptun加速
—luci-app-ssr-plus —> Include ShadowsocksR Server #SSR服务器
LuCI —> Applications —> luci-app-ssrserver-python #SSR Python服务器
LuCI —> Applications —> luci-app-statistics #流量监控工具
LuCI —> Applications —> luci-app-syncdial #多拨虚拟网卡(原macvlan)
LuCI —> Applications —> luci-app-tinyproxy #Tinyproxy是 HTTP(S)代理服务器
LuCI —> Applications —> luci-app-transmission #BT下载工具
LuCI —> Applications —> luci-app-travelmate #旅行路由器
LuCI —> Applications —> luci-app-ttyd #网页终端命令行
LuCI —> Applications —> luci-app-udpxy #udpxy做组播服务器
LuCI —> Applications —> luci-app-uhttpd #uHTTPd Web服务器
LuCI —> Applications —> luci-app-unblockmusic #解锁网易云灰色歌曲3合1新版本
—UnblockNeteaseMusic Golang Version #Golang版本
—UnblockNeteaseMusic NodeJS Version #NodeJS版本
LuCI —> Applications —> luci-app-unblockneteasemusic-go #解除网易云音乐(合并)
LuCI —> Applications —> luci-app-unblockneteasemusic-mini #解除网易云音乐(合并)
LuCI —> Applications —> luci-app-unbound #Unbound DNS解析器
LuCI —> Applications —> luci-app-upnp #通用即插即用UPnP(端口自动转发)
LuCI —> Applications —> luci-app-usb-printer #USB 打印服务器
LuCI —> Applications —> luci-app-v2ray-server #V2Ray服务器
LuCI —> Applications —> luci-app-verysync #微力同步
LuCI —> Applications —> luci-app-vlmcsd #KMS服务器
LuCI —> Applications —> luci-app-vnstat #vnStat网络监控(图表)
LuCI —> Applications —> luci-app-vpnbypass #VPN BypassWebUI 绕过VPN设置
LuCI —> Applications —> luci-app-vsftpd #FTP服务器
LuCI —> Applications —> luci-app-watchcat #断网检测功能与定时重启
LuCI —> Applications —> luci-app-webadmin #Web管理页面设置
LuCI —> Applications —> luci-app-webshell #网页命令行终端
LuCI —> Applications —> luci-app-wifischedule #WiFi计划任务
LuCI —> Applications —> luci-app-wireguard # WireGuard VPN
LuCI —> Applications —> luci-app-wirelessregdb #WiFi无线
LuCI —> Applications —> luci-app-wol #WOL网络唤醒
LuCI —> Applications —> luci-app-wrtbwmon #实时流量监测
LuCI —> Applications —> luci-app-xlnetacc #迅雷快鸟
LuCI —> Applications —> luci-app-zerotier #ZeroTier内网穿透
—————————————————————————————
教程结束
Thanks so much for the blog post.Thanks Again. Great.
This is my first time go to see at here and i am truly pleassant to
read all at one place.
What’s up everyone, it’s my first visit at this website,
and post is really fruitful in support of me, keep up posting these articles
or reviews.
Awesome article post.Much thanks again.
If you are going for best contents like I do, only go to see this web page all the time because it presents feature contents, thanks
I love surfing on your pleasant site
It is a very good useful article I like to read such articles
Greate article. Keep writing such kind of info on your blog.
If you are going for best contents like I do, only go to see this web page all the time because it presents feature contents, thanks
I enjoyed reading a very successful article
Muchos Gracias for your blog. Much thanks again. Awesome. Sallyann Gerrard Helsie
完美的教程,太有用了,必须收藏备用啊!谢谢阁主大佬!