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 |
git pull时:对下列文件的本地修改将被合并操作覆盖
直接git reset –hard master,直接从仓库中拉出覆写暂存区和工作区。
文件清理
- 清除旧的编译产物(可选)
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码(可到大雕源码地址直接查询) |
编译前选中
1 |
Network--> SSH--> <*>openssh-sftp-server |
然后进行make编译即可
如果忘记编译openssh-sftp-server,可根据下列方法操作
1 2 3 4 5 6 7 8 |
vi /etc/opkg/distfeeds.conf ##将下方源地址复制进去,并保存退出~ src/gz chaos_calmer_base http://archive.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/base src/gz chaos_calmer_lucihttp://archive.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/luci src/gz chaos_calmer_management http://archive.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/management src/gz chaos_calmer_packages http://archive.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/packages src/gz chaos_calmer_routing http://archive.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/routing src/gz chaos_calmer_telephony http://archive.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/telephony |
shh连接openwrt执行以下命令
1 2 |
opkg update #获取服务器上最新的软件列表 opkg install openssh-sftp-server #openssh-sftp-server |
效果
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内网穿透
—————————————————————————————
修改Luci界面
参考 https://blog.csdn.net/hui523hui523hui523/article/details/38943693
参考 https://www.jianshu.com/p/bfb93c4e8dc9
参考 https://blog.csdn.net/weixin_43883277/article/details/98725690
参考 https://blog.csdn.net/weixin_43883277/article/details/99677581
参考 https://blog.csdn.net/weixin_43883277/article/details/98505104
参考 https://blog.csdn.net/weixin_43883277/article/details/99865510
LuCI 基础
Model 位于: /usr/lib/lua/luci/model/cbi/ 下——配置模块实际的代码
eg:module(“luci.controller.控制器名/路径”, package.seeall)function index()
entry(路径, 调用目标, _(“显示名称”), 显示顺序)
end
entry(path, target, title=nil, order=nil)
调用目标分为三种,分别是执行指定方法Action、访问指定页面Views以及调用CBI Module
-
第一种可以直接调用指定的函数,比如点击菜单项就直接重启路由器等等,比如写为call(“function_name”),然后在lua文件下编写名为function_name的函数就可以调用了。
-
第二种可以访问指定的页面,比如写为template(“myapp/mymodule”)就可以调用/usr/lib/lua/luci/view/myapp/mymodule.htm文件了
-
而如果要编写配置页面,那么使用第三种方法无非是最方便的,比如写为cbi(“myapp/mymodule”)就可以调用/usr/lib/lua/luci/model/cbi/myapp/mymodule.lua文件了。
module(“luci.controller.LuoYeLuCI”, package.seeall)
function index()
entry({“admin”, “network”, “LuoYeconfig”}, cbi(“LuoYeCBI”), _(“LuoYeTest”), 100)
end
m = Map(“配置文件文件名”, “配置页面标题”, “配置页面说明”)
第一个参数即为配置文件存储的文件名,不包含路径.
第二与第三个参数则是用在来页面上显示的
Section分为两种,NamedSection和TypedSection,前者根据配置文件中的Section名,而后者根据配置文件中的Section类型 http://luci.subsignal.org/trac/wiki/Documentation/CBI
文件需要存储在/etc/config(如果配置文件不存在的话,访问配置页面将会报错)
内容格式如下:
config login
option username ”
option password ”
option ifname ‘eth0’
option domain ”
LuCI 页面修改
简单的文件配置,路由上路径主要是/usr/lib/lua/luci/
下子目录:/controller/
、/model/cbi/
、 /view/
,或者根目录下的/www/
中.可以在路上修改查看效果.
如果想要编译自定义LuCI页面的固件,请尝试修改如下OpenWRT源码结构路径内的LuCI文件.
1 2 3 4 |
xxx/package/feeds/luci/luci/luci/libs/web/root/etc/config/luci --- AA 版本pakages/feeds/luci/中 xxx\feeds\luci\luci\luci\libs\web\root\etc\config\luci --- AA 版本的feeds/luci文件夹中 xxx/feeds/luci/modules/base/root/etc/config/luci --- BB 版本中feeds中,bb版本open修改了luci配置文件路径,并且pakages/feeds路径中也没有luci配置文件了.不知道这个路径是不是正确的. 再者就是修改 xxx/dl/ 下的源码压缩包,或者 xxx/build_dir/$target/下源码 |
注意:如果在xxx/feeds 修改可能需要执行 ./scripts/feeds install luci 更新
主题Logo替换
源码路径:xxx/feeds/luci/luci/luci/themes/bootstrap/htdocs/luci-static/bootstrap/logo.jpg
路由路径:/www/luci-static/bootstrap/logo.jpg
Tips:
由于版本的更新,文件路径可能变更,此处列出的为BB版本的例子.如果找不到可以用命令手动在/feeds/中查找:find ./ -name logo.jpg.此处为bootstrap主题Logo,其他主题的Logo修改类似.
页面脚标信息
源码路径:xxx/feeds/luci/luci/luci/themes/bootstrap/luasrc/view/themes/bootstrap/footer.htm
路由路径:/usr/lib/lua/luci/view/themes/bootstrap/footer.htm
修改位置:
1 2 |
Powered by <%= luci.__appname__ .. " (" .. luci.__version__ .. ")" %> <%=luci.version.distversion%> |
status状态栏信息
源码路径:xxx/feeds/luci/modules/admin-full/luasrc/view/admin_status/index.htm
路由路径:/usr/lib/lua/luci/view/admin_status/index.html
修改位置:找到类似的代码段修改.
1 2 3 4 5 6 7 8 9 10 11 12 |
<%:System%> <%:Hostname%><%=luci.sys.hostname() or "?"%> <%:Model%><%=pcdata(model or "?")%> <%:Firmware Version%> <%=pcdata(luci.version.distname)%> <%=pcdata(luci.version.distversion)%> / <%=pcdata(luci.version.luciname)%> (<%=pcdata(luci.version.luciversion)%>) <%:Kernel Version%><%=luci.sys.exec("uname -r")%> <%:Local Time%>- <%:Uptime%>- <%:Load Average%> |
================
在使用OpenWrt路由器的过程中,经常需要根据需要改改配置文件然后重新启动服务什么的,一般的做法是SSH登录路由器后台,使用vi编辑器修改文件,然后使用/etc/init.d/xxxx restart 来重启服务,次数多了就会觉得很繁琐,光SSH输入密码就够麻烦的,所以不妨自己写一个luci界面在路由器web后台修改配置文件并完成重启这一系列操作。下面以Pdnsd为例进行介绍
首先看一下实现效果
教程结束
30 评论