[OpenWrt] 编译教程包含衍生版本 [插件/配置/DIY]

图片[1]-[OpenWrt]  编译教程包含衍生版本 [插件/配置/DIY]-DoubleWorld

OpenWrt 拥有很多衍生版,但是编译过程基本都是一致的!

最高兼容
全部开源
官方原版
推荐使用
部分插件不兼容
部分闭源
硬件加速
支持超多设备
最高兼容
全部开源
全开源
适合国内编译
最高兼容
全部开源
国内后起之秀
迭代慢
开源项目插件兼容是否闭源开源介绍
OpenWrt最高兼容全部开源官方原版
LEDE部分插件不兼容部分闭源硬件加速 支持超多设备
ImmortalWrt最高兼容全部开源全开源 适合国内编译
iStoreOS最高兼容全部开源国内后起之秀

(一)、编译流程

编译之前需要做好一些准备工作

注意事项:

不要用 root 用户进行编译,国内用户编译前最好准备好梯子。

  1. 系统推荐(最新系统编译也没问题了)
    • Debian
    • Ubuntu LTS
  2. 安装编译环境
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 clang cmake cpio curl device-tree-compiler flex gawk gcc-multilib g++-multilib gettext \
genisoimage git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libfuse-dev libglib2.0-dev \
libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libpython3-dev \
libreadline-dev libssl-dev libtool llvm lrzsz msmtp ninja-build p7zip p7zip-full patch pkgconf \
python3 python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion \
swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev

(1)克隆源码

选择其中一个项目源码进行编译,编译过程通用。

git clone https://github.com/openwrt/openwrt.git
git clone https://github.com/coolsnowwolf/lede
OpenWrt - ImmortalWrt

官方推荐系统:Debian11

debian-11.11.0-amd64-DVD-1.iso
系统大小
3.7G

系统环境

sudo bash -c 'bash <(curl -s https://build-scripts.immortalwrt.org/init_build_environment.sh)'

拉取源码

git clone -b master --single-branch --filter=blob:none https://github.com/immortalwrt/immortalwrt
git clone https://github.com/istoreos/istoreos.git

(2)进入目录

cd lede

(3)同步插件

此同步会把 feeds.conf.default 文件里面不带#符号的地址源码同步下来到feeds目录

./scripts/feeds update -a

(4)安装插件

此操作会把同步下来的插件安装到目录 feedspackage/feeds

./scripts/feeds install -a

(5)生成默认配置

如果源码目录下没有 .config 文件,则会生成一个默认的文件,如果有则不会生效该命令!

make defconfig

(6)编辑你需要的软件配置

这个选择你需要的就行,一堆东西以后再写介绍把,目前就提供基本流程!

空格选中 M只编译 *代表直接编译到系统镜像安装自带, M需要手动安装!

make menuconfig

(7)下载插件依赖

如果你不选择这个操作也行,但是编译会很慢,国内用户必须要执行,否则你试试一天能不能编译下来! -j8 是线程

make download -j8

(8)开始编译

都推荐第一次编译单线程,我嫌太慢了,直接满线程编译!选择单线程请改成 -j1

make V=s -j$(nproc)

(9)编译结束

编译完成后会在bin目录下生成固件

(1)更新源码插件

git pull
./scripts/feeds update -a
./scripts/feeds install -a

(2)再次编译固件

make menuconfig
make download -j8
make V=s -j$(nproc)
make package/luci-app-adguardhome/compile V=99
# luci-app-adguardhome换成需要单独编译app的应用名
make clear
make dirclean
# 使用后编译速度与第一次编译一致!

(二)、插件模块

只选一种,不要多选!!!在源码目录中执行,如 lede/

项目地址:https://github.com/NueXini/NueXini_Packages

sed -i '$a src-git NueXini_Packages https://github.com/NueXini/NueXini_Packages.git' feeds.conf.default
./scripts/feeds update -a && ./scripts/feeds install -a

项目地址:https://github.com/kenzok8/openwrt-packages

sed -i '1i src-git kenzo https://github.com/kenzok8/openwrt-packages' feeds.conf.default
sed -i '2i src-git small https://github.com/kenzok8/small' feeds.conf.default
git pull
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig

项目地址:https://github.com/mdsdtech/5G-Modem-Packages

这个如何使用?我也不太清楚,应该是直接放在 Packages/feeds 目录下

git clone https://github.com/mdsdtech/5G-Modem-Packages packages/feeds

项目地址:https://github.com/FUjr/modem_feeds

echo >> feeds.conf.default
echo 'src-git modem https://github.com/FUjr/modem_feeds.git;main' >> feeds.conf.default
./scripts/feeds update modem
./scripts/feeds install -a -p modem

强制更新库驱动 (使用本库驱动):

./scripts/feeds install -a -f -p modem

在终端中运行以下命令以打开配置菜单:

make menuconfig

在配置菜单中,您可以选择以下软件包:(均在 Luci/Application 下)

软件包名功能
luci-app-qmodem有模组信息、拨号设置、高级设置三大功能块。由于主程序在这里,因此其他功能依赖该程序(原谅我将后端程序也放在了这里)。
Add Lua Luci Homepage添加 Lua Luci 首页。luci2(Js Luci)首页默认已添加,若使用luci2时勾选了这个,会有两个首页
QMI Driver Selection可选择 Generic QMI driver(通用QMI驱动)或 Vendor QMI driver(厂商QMI驱动)
Quectel Connect Manager Selection可选择以下三种之一:
- Tom customized Quectel CM:使用本仓库定制的Quectel CM,支持屏蔽添加默认路由、屏蔽修改resolv.conf等功能
- QWRT Quectel-CM-5G:使用 QWRT 仓库的 quectel-CM-5G
- NORMAL Quectel-CM:使用普通的 quectel-cm
Add PCIe Modem SUPPORT勾选 PCIe 驱动,需要feeds里有kmod_mhi
Add Qfirehose SUPPORT添加 Qfirehose 支持,用于高通芯片模组固件升级
luci-app-qmodem-hc支持 hc-g80 SIM 卡切换,该插件为设备专属插件
luci-app-qmodem-mwan支持多 WAN 设置。
luci-app-qmodem-sms短信首发功能
luci-app-qmodem-ttlTTL 重写功能

为什么选择该项目

  • 稳定性:通过缓存和减少 AT 指令的次数,提高了系统的稳定性。
  • 可扩展性:最小化 API 端点和统一后端程序设计,便于二次开发和扩展。
  • 可靠性:功能分离设计,确保核心功能的稳定性,即使其他功能出现问题也不影响主要使用。
  • 多模组支持: 根据 slot 定位模组,模组和配置有一对一的绑定关系,即使重启或热插拔模组也不会造成模组和配置混淆。
  • 短信支持: 长短信合并、中文短信发送
  • 多语言支持: 开发时将语言资源分离,可以添加需要的语言
  • IPV6支持: 部分支持ipv6 ,测试条件 (移动卡 rm50xq qmi/rmnet/mbim 驱动,使用quectel-CM-M拨号,使用扩展前缀模式)
  • 优化的quectel-CM:原版quectel-CM会覆盖resolv.conf 覆盖默认路由,本仓库提供改进版,增加了对应的开关选项
  • 全新实现的AT工具:尽管 sendat、sms_tool 和 gl_modem_at 这三个工具在大多数情况下表现出色,能够满足大部分需求,但它们在超时机制、mhi_DUN 和短信支持方面各自存在一些小问题。如果想要同时使用所有功能,就必须内置这三个 AT 工具,这显然不够优雅,因此我参考这三个工具,实现了一个包含所有功能的at工具。

模组信息

在首页显示(Lua)
图片[3]-[OpenWrt]  编译教程包含衍生版本 [插件/配置/DIY]-DoubleWorld

模组高级设置

可对模组进行拨号模式、制式偏号、IMEI设置、锁小区、锁频段等设置

图片[4]-[OpenWrt]  编译教程包含衍生版本 [插件/配置/DIY]-DoubleWorld

拨号总览

图片[5]-[OpenWrt]  编译教程包含衍生版本 [插件/配置/DIY]-DoubleWorld

全局配置

提供全局性的配置选项,允许用户进行统一的模组配置。

  • 重新加载拨号:重新加载模组的配置文件,确保配置生效。
  • 拨号总开关: 拨号总开关,启用后才会进行拨号

配置列表

  • 插槽id为模组标识符与配置文件关联(即同一个端口即使更换模组也会使用同一套配置,同一个模组更换了端口也需要重新配置)
  • 拨号相关配置修改后需要重拨才会生效
  • 网络接口的名称是模组别名,若模组别名留空则为插槽id

短信

图片[6]-[OpenWrt]  编译教程包含衍生版本 [插件/配置/DIY]-DoubleWorld

Mwan配置

该页面是 MWAN 配置 界面,帮助用户管理多 WAN 连接,通过监控特定 IP 来确保网络的稳定性和可靠性。用户可以根据需求自定义连接的优先级和接口,从而实现负载均衡或故障转移

功能描述
启用 MWAN
相同源地址选中此框后,路由器将在一定时间内使用相同的 WAN 端口处理来自同一源的流量。
IPv4 配置
接口选择要添加的 WAN 接口(如 wanusb0 等),以便于配置不同的网络连接。
跟踪IP输入特定的 IP 地址或域名。
优先级设置连接的优先级,范围为 1 到 255,数值越低优先级越高。优先级一致会根据权重负载均衡,只有优先级高的故障才会启用低优先级的接口

QModem 设置

配置项描述
禁用自动加载/移除模组关闭以下所有功能。
启用 PCIe 模块扫描选中后,系统会在开机时扫描 PCIe 接口。(耗时较长)
启用 USB 模块扫描选中后,系统会在开机时扫描 USB 接口。(耗时较长)
监控设置的 USB 接口系统会在开机时扫描插槽配置里的 USB 端口,同时监控 USB 的热插拔事件。
监控设置的 PCIe 接口系统会在开机时扫描插槽配置里的 PCIe 端口。

插槽配置

该页面允许用户对每个插槽进行一些设置

配置项描述
插槽类型选择插槽的类型(PCIe/USB),用于识别设备。
插槽 ID输入设备的唯一标识符(如 0001:11:00.0[pcie]),用于设备识别。
SIM 卡指示灯绑定插槽与相应的指示灯,以显示 SIM 卡的状态。
网络指示灯绑定插槽的网络状态指示灯,以便监控网络连接的状态。
启用 5G 转网络口启用后,支持的模组通过网络接口与主机通信,以提高性能。
关联的 USB配置该项可将 USB 端口与 PCIe 端口关联,使用兼容性更好的 USB serial 驱动进行 AT 通信。

项目地址:https://github.com/koshev-msk/modemfeed

这是一个用于 OpenWrt 固件的仓库,专为支持 LTE 蜂窝调制解调器而设计。

软件包依赖描述
luci-app-modeminfo调制解调器信息LTE 调制解调器仪表盘
luci-app-smstools3短信董局web UI smstools3
luci-app-mmcomig调制解调器管理器通过 mmcli 实用程序操纵带宽调制解调器。
luci-app-atinoutatinoutAT 命令工具
luci-app-cellled蜂窝网络LED 蜂窝信号 信号强度。
luci-app-ttliptables-mod-ipopt,kmod-ipt-ipopt,kmod-ipt-nat6TTL
qtoolslibcQualcomm
asterisk-chan-quectelasteriskasterisk SimCom Quectel
xmm-modemkmod-usb-net-ncm, kmod-usb-acm英特尔 XMM 调制解调器连接脚本
  • 以及更多未包含在官方 OpenWrt 仓库中的包。

如何添加仓库并编译软件包

在 OpenWrt SDK/Buildroot 的 feeds.conf.default 中添加以下行

src-git modemfeed https://github.com/koshev-msk/modemfeed.git

更新 feeds 并编译单个包

./scripts/feeds update -a; ./scripts/feeds install -a
make -j$((`nproc` + 1)) package/feeds/modemfeed/<package_name>/compile

或 make menuconfig 菜单以在 Buildroot 中包含包固件

在 OpenWrt/LEDE 中,当你删除或修改 feeds.conf 文件中的某个 feed 后,需要清理与该 feed 相关的缓存和文件,以确保系统不再使用旧的数据。以下是具体的步骤:

1. 删除 modem feed

从 feeds.conf 文件中删除以下行:

src-git modem https://github.com/FUjr/modem_feeds.git;main

2. 更新 feeds

更新 feeds 以移除 modem feed 的相关数据:

./scripts/feeds update -a

3. 清理已安装的 feed 包

如果 modem feed 的软件包已经安装,可以使用以下命令清理它们:

./scripts/feeds uninstall -a

这将移除所有已安装的 feed 包,然后你可以重新安装需要的 feeds:

./scripts/feeds install -a

4. 清理编译缓存

如果 modem feed 的包已经被编译过,你需要清理编译缓存。可以使用以下命令:

make clean

如果需要更彻底的清理,可以使用:

make dirclean

5. 清理下载的 feed 数据

OpenWrt/LEDE 会将 feed 的数据缓存到 dl/ 和 feeds/ 目录中。你可以手动删除与 modem feed 相关的缓存文件。

清理 dl/ 目录

dl/ 目录包含下载的源码包。你可以手动检查并删除与 modem feed 相关的文件,或者直接清空整个目录:

rm -rf dl/*

清理 feeds/ 目录

feeds/ 目录包含 feed 的元数据和源码。你可以删除与 modem feed 相关的目录:

rm -rf feeds/modem

6. 重新配置和编译

完成清理后,重新配置和编译 OpenWrt:

make menuconfig
make V=s -j$(nproc)

总结

  1. 删除 modem feed:从 feeds.conf 中移除相关行。
  2. 更新 feeds./scripts/feeds update -a
  3. 清理已安装的包./scripts/feeds uninstall -a 然后 ./scripts/feeds install -a
  4. 清理编译缓存make clean 或 make dirclean
  5. 清理下载的 feed 数据:删除 dl/ 和 feeds/modem 目录中的相关文件。
  6. 重新配置和编译make menuconfig 和 make -j$(nproc)

完成这些步骤后,modem feed 的相关缓存和文件将被彻底清理。

(三)、定制编译

编辑 ./package/base-files/files/bin/config_generate

generate_static_system() {
	uci -q batch <<-EOF
		delete system.@system[0]
		add system system
		set system.@system[-1].hostname='LEDE' #主机名修改
		set system.@system[-1].timezone='UTC'
		set system.@system[-1].ttylogin='0'
		set system.@system[-1].log_size='64'
		set system.@system[-1].urandom_seed='0'
case "$protocol" in
		static)
			local ipad
			case "$1" in
				lan) ipad=${ipaddr:-"192.168.1.1"} ;; #自定义 LAN 地址 路由器就靠这个
				*) ipad=${ipaddr:-"192.168.$((addr_offset++)).1"} ;; #网关地址
			esac

			netm=${netmask:-"255.255.255.0"} #子网掩码
delete system.ntp
set system.ntp='timeserver'
set system.ntp.enabled='1'
set system.ntp.enable_server='1'
add_list system.ntp.server='time.apple.com'      #修改这几段
add_list system.ntp.server='time.google.com'     #修改这几段
add_list system.ntp.server='time.windows.com'    #修改这几段
add_list system.ntp.server='time.cloudflare.com' #修改这几段
generate_static_system() {
    uci -q batch <<-EOF
        delete system.@system[0]
        add system system
        set system.@system[-1].hostname='LEDE'
        set system.@system[-1].timezone='CST-8'#正八区
        set system.@system[-1].zonename='Asia/Shanghai'#这句话要加上,不然还是UTC

使用命令生成密码

openssl passwd -1 xxxxxx
  1. 编辑 ./package/base-files/files/etc/shadow
  2. LEDE编辑 package/lean/default-settings/files/zzz-default-settings
  3. 找到 root:
  4. 修改为 root:$1$wEehtjxj$YBu4quNfVUjzfv8p/PBo5.:0:0:99999:7:::

编辑 ./package/base-files/files/etc/banner


/**                                                                    
 *            .,,       .,:;;iiiiiiiii;;:,,.     .,,                   
 *          rGB##HS,.;iirrrrriiiiiiiiiirrrrri;,s&##MAS,                
 *         r5s;:r3AH5iiiii;;;;;;;;;;;;;;;;iiirXHGSsiih1,               
 *            .;i;;s91;;;;;;::::::::::::;;;;iS5;;;ii:                  
 *          :rsriii;;r::::::::::::::::::::::;;,;;iiirsi,               
 *       .,iri;;::::;;;;;;::,,,,,,,,,,,,,..,,;;;;;;;;iiri,,.           
 *    ,9BM&,            .,:;;:,,,,,,,,,,,hXA8:            ..,,,.       
 *   ,;&@@#r:;;;;;::::,,.   ,r,,,,,,,,,,iA@@@s,,:::;;;::,,.   .;.      
 *    :ih1iii;;;;;::::;;;;;;;:,,,,,,,,,,;i55r;;;;;;;;;iiirrrr,..       
 *   .ir;;iiiiiiiiii;;;;::::::,,,,,,,:::::,,:;;;iiiiiiiiiiiiri         
 *   iriiiiiiiiiiiiiiii;;;::::::::::::::::;;;iiiiiiiiiiiiiiiir;        
 *  ,riii;;;;;;;;;;;;;:::::::::::::::::::::::;;;;;;;;;;;;;;iiir.       
 *  iri;;;::::,,,,,,,,,,:::::::::::::::::::::::::,::,,::::;;iir:       
 * .rii;;::::,,,,,,,,,,,,:::::::::::::::::,,,,,,,,,,,,,::::;;iri       
 * ,rii;;;::,,,,,,,,,,,,,:::::::::::,:::::,,,,,,,,,,,,,:::;;;iir.      
 * ,rii;;i::,,,,,,,,,,,,,:::::::::::::::::,,,,,,,,,,,,,,::i;;iir.      
 * ,rii;;r::,,,,,,,,,,,,,:,:::::,:,:::::::,,,,,,,,,,,,,::;r;;iir.      
 * .rii;;rr,:,,,,,,,,,,,,,,:::::::::::::::,,,,,,,,,,,,,:,si;;iri       
 *  ;rii;:1i,,,,,,,,,,,,,,,,,,:::::::::,,,,,,,,,,,,,,,:,ss:;iir:       
 *  .rii;;;5r,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sh:;;iri        
 *   ;rii;:;51,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.:hh:;;iir,        
 *    irii;::hSr,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,sSs:;;iir:         
 *     irii;;:iSSs:.,,,,,,,,,,,,,,,,,,,,,,,,,,,..:135;:;;iir:          
 *      ;rii;;:,r535r:...,,,,,,,,,,,,,,,,,,..,;sS35i,;;iirr:           
 *       :rrii;;:,;1S3Shs;:,............,:is533Ss:,;;;iiri,            
 *        .;rrii;;;:,;rhS393S55hh11hh5S3393Shr:,:;;;iirr:              
 *          .;rriii;;;::,:;is1h555555h1si;:,::;;;iirri:.               
 *            .:irrrii;;;;;:::,,,,,,,,:::;;;;iiirrr;,                  
 *               .:irrrriiiiii;;;;;;;;iiiiiirrrr;,.                    
 *                  .,:;iirrrrrrrrrrrrrrrrri;:.                        
 *                        ..,:::;;;;:::,,.                             
 */

编辑 package/kernel/mac80211/files/lib/wifi/mac80211.sh

编译X86 arm 基本上是改这个 但是特殊设备改的是同目录下的其它文件!

set wireless.radio${devidx}.disabled=0 #改为0显示wifi
set wireless.default_radio${devidx}=wifi-iface
set wireless.default_radio${devidx}.device=radio${devidx}
set wireless.default_radio${devidx}.network=lan
set wireless.default_radio${devidx}.mode=ap
set wireless.default_radio${devidx}.ssid=LEDE #wifi名称
set wireless.default_radio${devidx}.encryption=psk2 #wifi加密方式,没有是none
set wireless.default_radio${devidx}.key=password #wifi密码

(四)、报错处理

暂时不写

(五)、终极玩法

云编译讲的东西非常多,暂时先提供一个地址参考!

https://github.com/aaaol/OpenWrt

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容