测试系统:ubuntu18.04 lts x64
如何编译自己需要的OpenWrt固件
Lean大雕的地址: https://github.com/coolsnowwolf/lede
注意:
- 不要用 root 用户 git 和编译!!!
- 国内用户编译前最好准备好梯子
- 默认登陆IP 192.168.1.1, 密码 password
编译命令如下:
首先装好 Ubuntu 64bit,推荐 Ubuntu 14 LTS x64
桌面版本的按CTRL+ALT+T进入终端,更新软件列表,下载安装更新。命令行输入
sudo apt-get update
安装基础环境(占用2GB左右的磁盘)
sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch 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
下载源代码,建立工作目录,进入工作目录
git clone https://github.com/coolsnowwolf/lede
cd lede
更新软件包,测试编译环境
./scripts/feeds update -a
./scripts/feeds install -a
配置固件菜单
make menuconfig
最后选好你要的路由,输入
make -j1 V=s
-j1后面是线程数。第一次编译推荐用单线程,国内请尽量全局科学上网,即可开始编译你要的固件了。以后编译可以选择多线程,规则如下n+1其中n代表线程数量,比如你的CPU是双核四线程的话,就是make -j5 V=s V=s代表输出全部过程
本套代码保证肯定可以编译成功。里面包括了 R9 所有源代码,包括 IPK 的。
以默认的x86软路由为例,不额外增加插件什么的,首次编译占用20GB左右的磁盘空间。添加的功能插件越多占用磁盘空间会越大,编译环境建议50GB+的磁盘大小。
固件保存路径
~/lede/bin/targets/x86/64
IPK路径
~/lede/bin/targets/x86/64/packages
网络下载路径
~/lede/dl
最后芝麻开门代码
echo 0xDEADBEEF > /etc/config/google_fu_mode
文本翻译(机翻)
[*]内置[]排除的
- <*>表示将软件包编译进固件,
表示软件包会被编译,但不会编译进固件。
OpenWrt Configuration【OpenWrt配置】
Arrow keys navigate the menu. <Enter> selects submenus ---> (or empty submenus ----). Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes, <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help, </> for Search. Legend: [*] built-in [ ] excluded <M> module < > module capable
箭头键浏览菜单。 <Enter>选择子菜单--->(或空子菜单----)。高亮显示的字母是热键。按<Y>包含,<N>排除,<M>模块化功能。按下<Esc> <Esc>退出,按下<?>获得帮助,按下</>获得Search。图例:[*]内置[]排除的<M>模块<>支持模块的x
Target System (x86) ---> 目标系统(x86)
Subtarget (x86_64) ---> 子目标(x86_64)
Target Profile (Generic) --->目标配置文件(通用)
Target Images ---> 保存目标镜像的格式
Global build settings ---> 全局构建设置
Advanced configuration options (for developers) ---- 高级配置选项(适用于开发人员)
Build the OpenWrt Image Builder 构建OpenWrt图像生成器
Build the OpenWrt SDK构建OpenWrt SDK
Package the OpenWrt-based Toolchain打包基于OpenWrt的工具链
Image configuration --->图像配置
Base system ---> 基本系统
Administration ---> 管理
Boot Loaders --->引导加载程序
Development ---> 开发
Extra packages ---> 额外包
Firmware --->固件
Fonts --->字体
Kernel modules ---> 内核模块
Languages --->语言
Libraries ---> 图书馆
LuCI ---> LuCI
Mail --->邮件
Multimedia --->多媒体
Network --->网络
Sound ---> 声音
Utilities --->实用程序
Xorg --->Xorg
<Select> 选择 < Exit > 退出 < Help > 帮助 < Save > 保存 < Load > 加载
进入LuCI Applications选择自己需要的功能插件
如果是物理机软路由的话,建议选择输出UEFI,这样能挂载2TB以上的磁盘,虚拟机就没这个必要了
Target Images [*] Build EFI GRUB images (Linux x86 or x86_64 host only)
知道github地址怎么编译到固件里面呢
但是如果只知道软件包的github地址怎么编译到固件里面呢?
luci-app-s-s-r-plus今天就拿这个举例子
鉴于L大已删除相关源码,现将自用的ssr源码托管到github
github地址:https://github.com/maxlicheng/luci-app-ssr-plus.git
源码特色
- 免开门
- 更新g-f-w列表,共5176条
- 更新国内IP段,共8369条
使用方法一
#源码根目录,进入package文件夹
cd package/
#创建一个openwrt-packages
mkdir openwrt-packages
#进入新建的文件夹
cd openwrt-packages
#下载源码
git clone https://github.com/maxlicheng/luci-app-ssr-plus.git
#回到源码根目录
cd ../..
#拉取源码
git pull
使用方法二
#源码根目录,编辑.gitignore文件
vi .gitignore
#在文件最后一行,加入
git rm --cached package/lean/luci-app-ssr-plus/ -r
#保存后,进入lean源码目录
cd package/lean/
#下载源码
git clone https://github.com/maxlicheng/luci-app-ssr-plus.git
#回到源码根目录
cd ../..
#拉取源码
git pull
注意 以上两种方法只能选其中一种, 采用任一方法后,ssr就不受git pull影响了。
进入编译配置菜单
make menuconfig
添加插件应用说明
LuCI -> Applications(进入Applications会看到如下图界面。)
现在就可以看到新添加的软件包了,新添加的软件包后面会显示(New)
官方源:
git clone https://github.com/lede-project/source.git
lean源:
git clone https://github.com/coolsnowwolf/lede.git
测试编译环境
make defconfig
配置固件菜单
make menuconfig
预先下载dl库,可以避免下载造成的编译失败。
make download V=s
全速编译固件
make V=99
-j参数设定全速编译,-j参数可能会导致系统卡死,不建议老爷机使用
最好在编译新增包前,执行./scripts/feeds {update,install} -a再增加修改各种编译模板,完后./scripts/feeds update -i即可,这样会从编译模板里读取要编译包的版本更新到索引。之后无需再执行{update,install} -a如果执行了会重新从openwrt源码URL下载索引,然后比如ppp的编译模板,会下载安装到官方源码版本。
make clean #清除bin 目录
make dirclean #清除bin 目录+清除交叉编译工具及工具链目录
make distclean #清除所有相关的东西,包括下载的软件包,配置文件,feed内容等
每次编译成功后备份make menuconfig的镜像配置文件,以避免下次编译时失败报错无法回退。
cp .config my.config
make dirclean不会删除dl目录修改
以后二次编译
cd lede 进入LEDE目录
git pull 同步更新源码
./scripts/feeds update -a && ./scripts/feeds install -a 更新FEEDS
rm -rf ./tmp && rm -rf .config 清除编译配置和缓存
make menuconfig 进入编译配置菜单
make -jn V=s n=线程数+1,例如4线程的I5填-j5,开始编译
多线多拨负载均衡
多拨插件syncdial原macvlan负载均衡插件mwan3IPSET规则生成工具mwan3help
> LuCI > Applications
luci-app-syncdial........................... Virtual WAN config generator
luci-app-mwan3........ LuCI support for the MWAN3 multiwan hotplug script
luci-app-mwan3helper....................... LuCI support for MWAN3 Helper
修改内核版本
打开LEDE目录/target/linux/架构/Makefile以X86为例
打开~/lede/target/linux/x86/Makefile找到KERNEL_PATCHVER:=4.9修改它,具体支持内核版本~/lede/include/kernel-version.mk
OpenWrt路由器通过安卓iPhone有线共享网络上网
Kernel modules --->
USB Support --->
<*> kmod-usb-net............... Kernel modules for USB-to-Ethernet convertors
<*> kmod-usb-ohci............................... Support for OHCI controllers
<*> kmod-usb-uhci............................... Support for UHCI controllers
<*> kmod-usb2................................... Support for USB2 controllers
Utilities --->
<*> libimobiledevice-utils............ A library that talks to Apple devices.
<*> libplist-utils............................. Apple property list converter
<*> libusbmuxd-utils......................... USB multiplexing daemon utilies
<*> usbmuxd.......................................... USB multiplexing daemon
USB連接手機後,打開網絡共享,會在/proc/net/dev下面新增一個網絡接口,安卓是USB開頭的接口名192.168.42.xx網段的,iPhone是eth開頭的接口名172.20.10.xx網段的。
支持 iPv6:
Extra packages —> ipv6helper (选定这个后下面几项自动选择了)
Network —> odhcp6c
Network —> odhcpd-ipv6only
LuCI —> Protocols —> luci-proto-ipv6
LuCI —> Protocols —> luci-proto-ppp
lean LuCI —> Applications
LuCI —> Applications —> luci-app-accesscontrol #访问时间控制
LuCI —> Applications —> luci-app-adblock #ADB广告过滤
LuCI —> Applications —> luci-app-adbyby-plus #广告屏蔽大师Plus +
LuCI —> Applications —> luci-app-adbyby #广告过滤大师(已弃)
LuCI —> Applications —> luci-app-adkill #广告过滤(已弃)
LuCI —> Applications —> luci-app-advanced-reboot #Linksys高级重启
LuCI —> Applications —> luci-app-ahcp #支持AHCPd
LuCI —> Applications —> luci-app-aliddns #阿里DDNS客户端
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-bcp38 #BCP38网络入口过滤(不确定)
LuCI —> Applications —> luci-app-bird4 #Bird 4(未知)
LuCI —> Applications —> luci-app-bird6 #Bird 6(未知)
LuCI —> Applications —> luci-app-bmx6 #BMX6路由协议
LuCI —> Applications —> luci-app-bmx7 #BMX7路由协议
LuCI —> Applications —> luci-app-caldav #联系人
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
LuCI —> Applications —> luci-app-diag-core #core诊断工具
LuCI —> Applications —> luci-app-dnscrypt-proxy #DNSCrypt解决DNS污染
LuCI —> Applications —> luci-app-dnscrypt-dnsforwarder #DNSForwarder防DNS污染
LuCI —> Applications —> luci-app-dnspod #DNSPod
LuCI —> Applications —> luci-app-dump1090 #民航无线频率(不确定)
LuCI —> Applications —> luci-app-dynapoint #DynaPoint(未知)
LuCI —> Applications —> luci-app-e2guardian #Web内容过滤器
LuCI —> Applications —> luci-app-filetransfer #文件传输
LuCI —> Applications —> luci-app-firewall #添加防火墙
LuCI —> Applications —> luci-app-flowoffload #Turbo ACC FLOW转发加速
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-fwknopd #Firewall Knock Operator服务器
LuCI —> Applications —> luci-app-guest-wifi #WiFi访客网络
LuCI —> Applications —> luci-app-hd-idle #硬盘休眠
LuCI —> Applications —> luci-app-hnet #Homenet Status家庭网络控制协议
LuCI —> Applications —> luci-app-kooldns #virtual服务器 ddns替代方案(已弃)
LuCI —> Applications —> luci-app-koolproxy #KP去广告(已弃)
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-mmc-over-gpio #添加SD卡操作界面(已弃)
LuCI —> Applications —> luci-app-multiwan #多拨虚拟网卡(已弃)
LuCI —> Applications —> luci-app-mwan #MWAN负载均衡
LuCI —> Applications —> luci-app-mwan3 #MWAN3分流助手
LuCI —> Applications —> luci-app-n2n_v2 #N2N内网穿透 N2N v2 virtual服务
LuCI —> Applications —> luci-app-nft-qos #QOS流控 Nftables版(已弃)
LuCI —> Applications —> luci-app-ngrokc #Ngrok 内网穿透(已弃)
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 virtual服务
LuCI —> Applications —> luci-app-olsr #OLSR配置和状态模块
LuCI —> Applications —> luci-app-olsr-services #OLSR服务器
LuCI —> Applications —> luci-app-olsr-viz #OLSR可视化
LuCI —> Applications —> luci-app-ocserv #OpenConnect virtual服务(已弃)
LuCI —> Applications —> luci-app-openvirtual** #Openvirtual客户端
LuCI —> Applications —> luci-app-openvirtual-server #易于使用的Openvirtual服务器 Web-UI
LuCI —> Applications —> luci-app-oscam #OSCAM服务器(已弃)
LuCI —> Applications —> luci-app-p910nd #打印服务器模块
LuCI —> Applications —> luci-app-pagekitee #Pagekite内网穿透客户端
LuCI —> Applications —> luci-app-polipo #Polipo代理(是一个小型且快速的网页缓存代理)
LuCI —> Applications —> luci-app-pppoe-relay #PPPoE NAT穿透 点对点协议(PPP)
LuCI —> Applications —> luci-app-p p t p-server #virtual服务器 p p t p
LuCI —> Applications —> luci-app-privoxy #Privoxy网络代理(带过滤无缓存)
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网络加速(开启Fast Path转发加速)
LuCI —> Applications —> luci-app-s-s #SS兲朝上网(已弃)
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-simple-softethervirtual** #SoftEther virtual服务器 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-S-S R-plus #S-S R兲朝上网Plus+
LuCI —> Applications —> luci-app-S-S R-plus —> Include s-s New Versiong #新SS代理
LuCI —> Applications —> luci-app-S-S R-plus —> Include V2ray #V2Ray透明代理
LuCI —> Applications —> luci-app-S-S R-plus —> Include Kcptun #Kcptun代理
LuCI —> Applications —> luci-app-S-S R-plus —> Include s-sR Server #S-S R客户端
LuCI —> Applications —> luci-app-S-S R-plus —> Include s-sR Socks and Tunnel #S-S R代理
LuCI —> Applications —> luci-app-S-S R-pro #S-S R-Pro
LuCI —> Applications —> luci-app-S-S Rserver-python #s-sR 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-unbound #Unbound DNS解析器
LuCI —> Applications —> luci-app-upnp #通用即插即用UPnP(端口自动转发)
LuCI —> Applications —> luci-app-usb-printer #USB 打印服务器
LuCI —> Applications —> luci-app-v2ray-pro #V2Ray透明代理
LuCI —> Applications —> luci-app-vlmcsd #KMS服务器设置
LuCI —> Applications —> luci-app-vnstat #vnStat网络监控(图表)
LuCI —> Applications —> luci-app-virtualbypass #virtual** BypassWebUI 绕过virtual设置
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 #virtual服务器 WireGuard状态
LuCI —> Applications —> luci-app-wireless-regdb #WiFi无线
LuCI —> Applications —> luci-app-wol #WOL网络唤醒
LuCI —> Applications —> luci-app-wrtbwmon #实时流量监测
LuCI —> Applications —> luci-app-xlnetacc #迅雷快鸟
LuCI —> Applications —> luci-app-zerotier #ZeroTier内网穿透