Padavan 编译日记
1.前言
预览图:
已额外适配除官方适配外的以下机型
- MI-MINI (USB)
- MI-3 (USB)
- MI-3MI 小米路由3硬改sop8 16mb flash版(USB)
- MI-3A
- MI-3C
- MI-4C
简介
哈罗,各位小伙伴大家好哇,我是小渔知道我的小伙伴可以看看我之前做的几个视频,关于路由器硬改以及救砖的教程。
1.挑战不可能!全站首发!小米路由3A刷机提取eeprom全过程详解
【挑战不可能!全站首发!小米路由3A刷机提取eeprom全过程详解】
2.小米路由3A刷机从拆解到验证
3.【全网首发】小米路由3C刷机提取eeprom教程
4.【手把手教学系列】从零开始学习小米路由mini救砖
5.【全网首发】小米路由3C刷机提取eeprom教程
6.【全网首发】小米路由3 硬改版 breed刷固件
也可以参阅我这一篇文章:小米路由3 breed 刷固件-魔改电阻后置换SPI flash 刷mini breed救砖
[scode type="blue"]EEPROM信号文件提取工具下载:蓝奏云盘[/scode]
##2.配置需求
下面开始正题,编译Padavan所需要的环境其实也并不复杂,只是配置需要耐心,清单如下:
[scode type="share"]编译端运行内存≥2G 磁盘空间≥20G CPU核心≥2核[/scode]
- 已安装乌班图(ubuntu)系统16.0+的VM虚拟机
- 一定的自我查错能力(主要是根据报错学会百度)
- Xshell或者FinalShell Ssh连接工具一个
[scode type="share"]准备工作完毕后,我们开始操作[/scode]
<!--more-->
##3.环境配置
以我的虚拟机为例[scode type="yellow"]你们的需要自己换成你们自己虚拟机的IP地址[/scode]
- 打开Ssh工具用
root
账号连接虚拟机
ssh root@10.32.0.82
然后运行此命令:
sudo apt update
# 更新软件库
sudo apt install unzip libtool-bin curl cmake gperf gawk flex bison nano xxd \
fakeroot kmod cpio git python3-docutils gettext automake autopoint \
texinfo build-essential help2man pkg-config zlib1g-dev libgmp3-dev \
libmpc-dev libmpfr-dev libncurses5-dev libltdl-dev wget libc-dev-bin -y
# 安装环境
sudo apt-get upgrade -y
# 更新内核
git clone --depth=1 https://github.com/hiboyhiboy/rt-n56u.git /opt/rt-n56u
# git clone --depth=1 https://github.com/hiboyhiboy/rt-n56u.git /opt/rt-n56u
# git clone --depth=1 https://github.com/chongshengB/rt-n56u.git /opt/rt-n56u
#拉取源码
cd /opt/rt-n56u/toolchain-mipsel
#进入工具链目录
./clean_toolchain
#清理以前的编译工具链
./build_toolchain
#编译工具链
等待大约2分钟左右可能会需要你手动"确定"一下
[scode type="yellow"]这里从环境安装、库安装、克隆Padavan源码、编译工具链等一切都由脚本完成,你可以泡一杯82年的卡布奇洛安心等待大约1小时左右就好[/scode]
等待工具链编译完成后执行以下命令:
cd /opt/rt-n56u/trunk
sudo ./clear_tree
fakeroot ./build_firmware_modify PSG1218
#脚本第一个参数为路由型号,在trunk/configs/templates/中
#编译好的固件在trunk/images里
#增加修改取消插件集成请修改/opt/rt-n56u/trunk/build_firmware_modify
#修改Logo 请替换/opt/rt-n56u/trunk/user/www/n56u_ribbon_fixed/bootstrap/img/asus_logo.png 规格为宽度5.19cm 高度2.54cm 分辨率72
#修改路由后台地址管理员密码等请修改 /opt/rt-n56u/trunk/user/shared/defaults.h
#修改路由中文页面内容等请修改 /opt/rt-n56u/trunk/user/www/dict/CN.dict
题外
建议可以安装一个宝塔面板,在线编辑剪切复制比较方便
安装要求:
内存:512M以上,推荐768M以上(纯面板约占系统60M内存)
硬盘:100M以上可用硬盘空间(纯面板约占20M磁盘空间)
系统:CentOS 7.1+ (Ubuntu16.04+.、Debian9.0+),确保是干净的操作系统,没有安装过其它环境带的Apache/Nginx/php/MySQL(已有环境不可安装)
安装宝塔(可选)
Linux面板7.4.2安装命令:
根据系统执行框内命令开始安装(大约2分钟完成面板安装)
Centos安装命令:
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
试验性Centos/Ubuntu/Debian安装命令 独立运行环境(py3.7) 可能存在少量兼容性问题 不断优化中:
curl -sSO http://download.bt.cn/install/install_panel.sh && bash install_panel.sh
Ubuntu/Deepin安装命令:
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
Debian安装命令:
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh
Fedora安装命令:
wget -O install.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh
Linux面板7.3.0升级命令:
curl http://download.bt.cn/install/update6.sh|bash
4.手动自定义适配路由
1.命令行操作
cd /opt/rt-n56u/trunk/configs/
2.宝塔操作
ssh root@10.32.0.82
输入账号密码
bt
14
[scode type="yellow"]因为宝塔可视化比较方便所以后面全部用宝塔操作,打开浏览器,输入Bt -URL(你们的根据自己实际的来,不要什么都不改,无脑)[/scode]
Bt-Panel-URL: http://183.222.197.203:8088/c86b4eb6
username: rrbrzni5
password: 3bf49830
虚拟机请将183.222.197.203
改为你的内网IP。(比如我的10.32.0.82
)
输入账号密码;
username: rrbrzni5
password: 3bf49830
然后登陆
[scode type="share"]因为我们只是需要一个在线编辑器,所以就不需要安装套件,但是你想装就装呗。话说,好像可道云也能办到我们所需要的功能[/scode]
然后点击文件,进入/opt/rt-n56u/trunk
/opt/rt-n56u/trunk/configs/boards
/opt/rt-n56u/trunk/configs/templates
#这里存放路由器型号以及配置文件boards为配置文件夹,templates为Config文件
如果要自己新增某个路由器型号,需要在boards
新建文件夹,在templates
中新建Config
文件
比如我的小米3硬改版
[scode type="share"]文件当然不是凭空捏造,而是复制相同的CPU型号、flash的路由器的配置文件改名,然后再根据实际去修改详细内容[/scode]
2.1 适配网口以及电源指示灯
因为我们复制的文件虽然也能编译并成功刷入后启动,但是一般会面临着网口错位,电源指示灯诡异等问题,所以我们需要根据实际来修改
首先进入/opt/rt-n56u/trunk/configs/boards/MI-3MI
可以看到有三个文件,分别是board.h board.mk kernel-3.4.x.config
首先修改board.h
/* Xiaomi Mi 3 */
#define BOARD_PID "MI-3"
#define BOARD_NAME "MI-3"
#define BOARD_DESC "Xiaomi Mi Mini Wireless Router"
#define BOARD_VENDOR_NAME "Beijing Xiaomi Technology Co., Ltd."
#define BOARD_VENDOR_URL "http://www.mi.com/"
#define BOARD_MODEL_URL "http://www.mi.com/miwifi3"
#define BOARD_BOOT_TIME 25
#define BOARD_FLASH_TIME 120
#define BOARD_GPIO_BTN_RESET 30
#undef BOARD_GPIO_BTN_WPS
#undef BOARD_GPIO_LED_ALL
#undef BOARD_GPIO_LED_WIFI
#define BOARD_GPIO_LED_POWER 24 /* 24: blue, 26: yellow, 29: red */
#undef BOARD_GPIO_LED_LAN
#undef BOARD_GPIO_LED_WAN
#define BOARD_GPIO_LED_USB 26
#undef BOARD_GPIO_LED_ROUTER
#define BOARD_GPIO_PWR_USB 65
#define BOARD_GPIO_PWR_USB_ON 1 /* 1: 5V Power ON, 0: 5V Power OFF */
#define BOARD_HAS_5G_11AC 1
#define BOARD_NUM_ANT_5G_TX 2
#define BOARD_NUM_ANT_5G_RX 2
#define BOARD_NUM_ANT_2G_TX 2
#define BOARD_NUM_ANT_2G_RX 2
#define BOARD_NUM_ETH_LEDS 1
#define BOARD_NUM_ETH_EPHY 3
#define BOARD_HAS_EPHY_L1000 0
#define BOARD_HAS_EPHY_W1000 0
我们需要注意的是下面的内容,其他都还好。
#define BOARD_PID "MI-3"
#define BOARD_NAME "MI-3"
#define BOARD_DESC "Xiaomi Mi Mini Wireless Router"
#define BOARD_VENDOR_NAME "Beijing Xiaomi Technology Co., Ltd."
#define BOARD_VENDOR_URL "http://www.mi.com/"
#define BOARD_MODEL_URL "http://www.mi.com/miwifi3"
#define BOARD_BOOT_TIME 25
#define BOARD_FLASH_TIME 120
#define BOARD_GPIO_BTN_RESET 30
#undef BOARD_GPIO_BTN_WPS
#undef BOARD_GPIO_LED_ALL
#undef BOARD_GPIO_LED_WIFI
#define BOARD_GPIO_LED_POWER 24 /* 电源指示灯:24: blue, 26: yellow, 29: red */
然后修改board.mk
##################################################################
# Board PID # Board Name # PRODUCT # Note
##################################################################
# MI-3 # Xiaomi MiWiFi 3 # MT7620 #
##################################################################
CFLAGS += -DBOARD_MI3
BOARD_NUM_USB_PORTS=1
最后修改kernel-3.4.x.config
,主要的目的是为了适配网口
只需要修改以下内容即可
# CONFIG_RAETH_ESW_IGMP_SNOOP_HW is not set
CONFIG_RAETH_ESW_PORT_WAN=0
CONFIG_RAETH_ESW_PORT_LAN1=1
CONFIG_RAETH_ESW_PORT_LAN2=2
CONFIG_RAETH_ESW_PORT_LAN3=3
CONFIG_RAETH_ESW_PORT_LAN4=4
[scode type="yellow"]从WAN到LAN40,1,2,3,4顺序不固定,请根据实际修改,小米3硬改版还有小米3C我是测试了很多遍试出来的哈哈[/scode]
2.2修改底部footer信息
参考链接
修改 trunk/user/www/Makefile
ifndef ROOTDIR
ROOTDIR=../..
endif
ROMFS_DIR = $(ROOTDIR)/romfs
include $(ROOTDIR)/user/shared/boards.mk
PROJECT_HOME_URL="https:\/\/bitbucket.org\/padavan\/rt-n56u\/"
PROJECT_HOME_URL_MOD="https:\/\/github.com\/hanwckf\/rt-n56u\/"
LABEL_COPYRIGHT_TEXT='© 2019-2021 <a href="https:\/\/yuos.top" target="blank">小渔博客<\/a> \& Padavan with 小渔 \& by <a href="https:\/\/github.com\/hanwckf\/rt-n56u" target="blank">hanwckf<\/a>'
BOARD_PATTERN=s/ZVMODELVZ/$(CONFIG_FIRMWARE_PRODUCT_ID)/g
COPYR_PATTERN=s/ZVCOPYRVZ/$(LABEL_COPYRIGHT_TEXT)/g
DWURL_PATTERN=s/ZVDWURLVZ/$(PROJECT_HOME_URL)/g
DWURL_MOD_PATTERN=s/ZVMODWURLVZ/$(PROJECT_HOME_URL_MOD)/g
WEBUI_NAME=n56u_ribbon_fixed
all:
romfs:
echo "Make www romfs"
rm -Rf $(ROMFS_DIR)/www
cp -R $(WEBUI_NAME) $(ROMFS_DIR)/www
rm -f $(ROMFS_DIR)/www/httpd_check.htm
echo "ASUSTeK" > $(ROMFS_DIR)/www/httpd_check.htm
cd $(ROMFS_DIR)/www && ln -sf /opt/share/www/custom custom
cp dict/EN.header $(ROMFS_DIR)/www
ifeq ($(CONFIG_FIRMWARE_INCLUDE_LANG_BR),y)
echo "LANG_BR=Brazil" >> $(ROMFS_DIR)/www/EN.header
cp dict/BR.dict $(ROMFS_DIR)/www
sed $(BOARD_PATTERN) -i $(ROMFS_DIR)/www/BR.dict
sed $(COPYR_PATTERN) -i $(ROMFS_DIR)/www/BR.dict
sed $(DWURL_PATTERN) -i $(ROMFS_DIR)/www/BR.dict
endif
ifeq ($(CONFIG_FIRMWARE_INCLUDE_LANG_CZ),y)
echo "LANG_CZ=Česky" >> $(ROMFS_DIR)/www/EN.header
cp dict/CZ.dict $(ROMFS_DIR)/www
sed $(BOARD_PATTERN) -i $(ROMFS_DIR)/www/CZ.dict
sed $(COPYR_PATTERN) -i $(ROMFS_DIR)/www/CZ.dict
sed $(DWURL_PATTERN) -i $(ROMFS_DIR)/www/CZ.dict
endif
ifeq ($(CONFIG_FIRMWARE_INCLUDE_LANG_DA),y)
echo "LANG_DA=Dansk" >> $(ROMFS_DIR)/www/EN.header
cp dict/DA.dict $(ROMFS_DIR)/www
sed $(BOARD_PATTERN) -i $(ROMFS_DIR)/www/DA.dict
sed $(COPYR_PATTERN) -i $(ROMFS_DIR)/www/DA.dict
sed $(DWURL_PATTERN) -i $(ROMFS_DIR)/www/DA.dict
endif
ifeq ($(CONFIG_FIRMWARE_INCLUDE_LANG_DE),y)
echo "LANG_DE=Deutsch" >> $(ROMFS_DIR)/www/EN.header
cp dict/DE.dict $(ROMFS_DIR)/www
sed $(BOARD_PATTERN) -i $(ROMFS_DIR)/www/DE.dict
sed $(COPYR_PATTERN) -i $(ROMFS_DIR)/www/DE.dict
sed $(DWURL_PATTERN) -i $(ROMFS_DIR)/www/DE.dict
endif
ifeq ($(CONFIG_FIRMWARE_INCLUDE_LANG_ES),y)
echo "LANG_ES=Español" >> $(ROMFS_DIR)/www/EN.header
cp dict/ES.dict $(ROMFS_DIR)/www
sed $(BOARD_PATTERN) -i $(ROMFS_DIR)/www/ES.dict
sed $(COPYR_PATTERN) -i $(ROMFS_DIR)/www/ES.dict
sed $(DWURL_PATTERN) -i $(ROMFS_DIR)/www/ES.dict
endif
ifeq ($(CONFIG_FIRMWARE_INCLUDE_LANG_FI),y)
echo "LANG_FI=Finsk" >> $(ROMFS_DIR)/www/EN.header
cp dict/FI.dict $(ROMFS_DIR)/www
sed $(BOARD_PATTERN) -i $(ROMFS_DIR)/www/FI.dict
sed $(COPYR_PATTERN) -i $(ROMFS_DIR)/www/FI.dict
sed $(DWURL_PATTERN) -i $(ROMFS_DIR)/www/FI.dict
endif
ifeq ($(CONFIG_FIRMWARE_INCLUDE_LANG_FR),y)
echo "LANG_FR=Français" >> $(ROMFS_DIR)/www/EN.header
cp dict/FR.dict $(ROMFS_DIR)/www
sed $(BOARD_PATTERN) -i $(ROMFS_DIR)/www/FR.dict
sed $(COPYR_PATTERN) -i $(ROMFS_DIR)/www/FR.dict
sed $(DWURL_PATTERN) -i $(ROMFS_DIR)/www/FR.dict
endif
ifeq ($(CONFIG_FIRMWARE_INCLUDE_LANG_NO),y)
echo "LANG_NO=Norsk" >> $(ROMFS_DIR)/www/EN.header
cp dict/NO.dict $(ROMFS_DIR)/www
sed $(BOARD_PATTERN) -i $(ROMFS_DIR)/www/NO.dict
sed $(COPYR_PATTERN) -i $(ROMFS_DIR)/www/NO.dict
sed $(DWURL_PATTERN) -i $(ROMFS_DIR)/www/NO.dict
endif
ifeq ($(CONFIG_FIRMWARE_INCLUDE_LANG_PL),y)
echo "LANG_PL=Polski" >> $(ROMFS_DIR)/www/EN.header
cp dict/PL.dict $(ROMFS_DIR)/www
sed $(BOARD_PATTERN) -i $(ROMFS_DIR)/www/PL.dict
sed $(COPYR_PATTERN) -i $(ROMFS_DIR)/www/PL.dict
sed $(DWURL_PATTERN) -i $(ROMFS_DIR)/www/PL.dict
endif
ifeq ($(CONFIG_FIRMWARE_INCLUDE_LANG_RU),y)
echo "LANG_RU=Pусский" >> $(ROMFS_DIR)/www/EN.header
cp dict/RU.dict $(ROMFS_DIR)/www
sed $(BOARD_PATTERN) -i $(ROMFS_DIR)/www/RU.dict
sed $(COPYR_PATTERN) -i $(ROMFS_DIR)/www/RU.dict
sed $(DWURL_PATTERN) -i $(ROMFS_DIR)/www/RU.dict
endif
ifeq ($(CONFIG_FIRMWARE_INCLUDE_LANG_SV),y)
echo "LANG_SV=Svensk" >> $(ROMFS_DIR)/www/EN.header
cp dict/SV.dict $(ROMFS_DIR)/www
sed $(BOARD_PATTERN) -i $(ROMFS_DIR)/www/SV.dict
sed $(COPYR_PATTERN) -i $(ROMFS_DIR)/www/SV.dict
sed $(DWURL_PATTERN) -i $(ROMFS_DIR)/www/SV.dict
endif
ifeq ($(CONFIG_FIRMWARE_INCLUDE_LANG_UK),y)
echo "LANG_UK=Українська" >> $(ROMFS_DIR)/www/EN.header
cp dict/UK.dict $(ROMFS_DIR)/www
sed $(BOARD_PATTERN) -i $(ROMFS_DIR)/www/UK.dict
sed $(COPYR_PATTERN) -i $(ROMFS_DIR)/www/UK.dict
sed $(DWURL_PATTERN) -i $(ROMFS_DIR)/www/UK.dict
endif
ifeq ($(CONFIG_FIRMWARE_INCLUDE_LANG_CN),y)
echo "LANG_CN=简体中文" >> $(ROMFS_DIR)/www/EN.header
cp dict/CN.dict $(ROMFS_DIR)/www
sed $(BOARD_PATTERN) -i $(ROMFS_DIR)/www/CN.dict
sed $(COPYR_PATTERN) -i $(ROMFS_DIR)/www/CN.dict
sed $(DWURL_PATTERN) -i $(ROMFS_DIR)/www/CN.dict
sed $(DWURL_MOD_PATTERN) -i $(ROMFS_DIR)/www/CN.dict
endif
cat $(ROMFS_DIR)/www/EN.header dict/EN.footer > $(ROMFS_DIR)/www/EN.dict
sed $(BOARD_PATTERN) -i $(ROMFS_DIR)/www/EN.dict
sed $(COPYR_PATTERN) -i $(ROMFS_DIR)/www/EN.dict
sed $(DWURL_PATTERN) -i $(ROMFS_DIR)/www/EN.dict
sed $(DWURL_MOD_PATTERN) -i $(ROMFS_DIR)/www/EN.dict
rm -f $(ROMFS_DIR)/www/EN.header
rm -f $(ROMFS_DIR)/www/bootstrap/js/bootstrap.js
rm -f $(ROMFS_DIR)/www/bootstrap/js/engage.itoggle.js
rm -f $(ROMFS_DIR)/www/bootstrap/js/jquery.backgroundpos.min.js
rm -f $(ROMFS_DIR)/www/bootstrap/js/jquery.easing.1.3.js
rm -f $(ROMFS_DIR)/www/bootstrap/css/bootstrap.css
ifeq ($(BOARD_HAS_2G_RADIO),0)
rm -f $(INSTALLDIR)/www/Advanced_ACL2g_Content.asp
rm -f $(INSTALLDIR)/www/Advanced_WAdvanced2g_Content.asp
rm -f $(INSTALLDIR)/www/Advanced_WGuest2g_Content.asp
rm -f $(INSTALLDIR)/www/Advanced_Wireless2g_Content.asp
rm -f $(INSTALLDIR)/www/Advanced_WMode2g_Content.asp
rm -f $(INSTALLDIR)/www/Advanced_WSecurity2g_Content.asp
rm -f $(INSTALLDIR)/www/Main_WStatus2g_Content.asp
rm -f $(INSTALLDIR)/www/wireless_2g.js
rm -f $(INSTALLDIR)/www/wds_aplist_2g.asp
rm -f $(INSTALLDIR)/www/device-map/router2g.asp
endif
ifeq ($(BOARD_HAS_5G_RADIO),0)
rm -f $(INSTALLDIR)/www/Advanced_ACL_Content.asp
rm -f $(INSTALLDIR)/www/Advanced_WAdvanced_Content.asp
rm -f $(INSTALLDIR)/www/Advanced_WGuest_Content.asp
rm -f $(INSTALLDIR)/www/Advanced_Wireless_Content.asp
rm -f $(INSTALLDIR)/www/Advanced_WMode_Content.asp
rm -f $(INSTALLDIR)/www/Advanced_WSecurity_Content.asp
rm -f $(INSTALLDIR)/www/Main_WStatus_Content.asp
rm -f $(INSTALLDIR)/www/wireless.js
rm -f $(INSTALLDIR)/www/wds_aplist.asp
rm -f $(INSTALLDIR)/www/device-map/router.asp
endif
ifndef CONFIG_IPV6
rm -f $(INSTALLDIR)/www/Advanced_IPv6_Content.asp
endif
ifndef CONFIG_ATA
rm -f $(INSTALLDIR)/www/device-map/sata.asp
endif
ifndef CONFIG_USB_SUPPORT
rm -f $(INSTALLDIR)/www/Advanced_Modem_others.asp
rm -f $(INSTALLDIR)/www/Advanced_Printer_others.asp
rm -f $(INSTALLDIR)/www/modem_isp.js
rm -f $(INSTALLDIR)/www/device-map/modem.asp
rm -f $(INSTALLDIR)/www/device-map/printer.asp
rm -f $(INSTALLDIR)/www/device-map/hub.asp
endif
ifneq ($(STORAGE_ENABLED),y)
rm -f $(INSTALLDIR)/www/Advanced_AiDisk_ftp.asp
rm -f $(INSTALLDIR)/www/Advanced_AiDisk_others.asp
rm -f $(INSTALLDIR)/www/Advanced_AiDisk_samba.asp
rm -f $(INSTALLDIR)/www/aidisk.asp
rm -f $(INSTALLDIR)/www/disk_folder_tree.js
rm -f $(INSTALLDIR)/www/device-map/disk.asp
rm -f $(INSTALLDIR)/www/device-map/safely_remove_disk.asp
rm -rf $(INSTALLDIR)/www/aidisk
rm -rf $(INSTALLDIR)/www/images/AiDisk
rm -rf $(INSTALLDIR)/www/images/Tree
endif
ifneq ($(CONFIG_FIRMWARE_INCLUDE_SCUTCLIENT),y)
rm -f $(INSTALLDIR)/www/scutclient.asp
rm -f $(INSTALLDIR)/www/scutclient_log.asp
rm -f $(INSTALLDIR)/www/scutclient_action.asp
endif
ifneq ($(CONFIG_FIRMWARE_INCLUDE_MENTOHUST),y)
rm -f $(INSTALLDIR)/www/mentohust.asp
rm -f $(INSTALLDIR)/www/mentohust_log.asp
rm -f $(INSTALLDIR)/www/mentohust_action.asp
endif
ifneq ($(CONFIG_FIRMWARE_INCLUDE_DNSFORWARDER),y)
rm -f $(INSTALLDIR)/www/dns-forwarder.asp
endif
ifneq ($(CONFIG_FIRMWARE_INCLUDE_SHADOWSOCKS),y)
rm -f $(INSTALLDIR)/www/Shadowsocks.asp
rm -f $(INSTALLDIR)/www/Shadowsocks_action.asp
rm -f $(INSTALLDIR)/www/Shadowsocks_log.asp
endif
ifeq ($(CONFIG_FIRMWARE_WEBUI_HIDE_VPN),y)
rm -f $(INSTALLDIR)/www/vpn_clients.asp
rm -f $(INSTALLDIR)/www/vpncli.asp
rm -f $(INSTALLDIR)/www/vpnsrv.asp
endif
ifneq ($(CONFIG_FIRMWARE_INCLUDE_ADBYBY),y)
rm -f $(INSTALLDIR)/www/Advanced_adbyby.asp
endif
ifneq ($(CONFIG_FIRMWARE_INCLUDE_ALIDDNS),y)
rm -f $(INSTALLDIR)/www/Advanced_aliddns.asp
endif
ifneq ($(CONFIG_FIRMWARE_INCLUDE_ADGUARDHOME),y)
rm -f $(INSTALLDIR)/www/Advanced_adguardhome.asp
endif
ifneq ($(CONFIG_FIRMWARE_INCLUDE_KOOLPROXY),y)
rm -f $(INSTALLDIR)/www/Advanced_koolproxy.asp
endif
ifneq ($(CONFIG_FIRMWARE_INCLUDE_CADDY),y)
rm -f $(INSTALLDIR)/www/Advanced_caddy.asp
endif
ifneq ($(CONFIG_FIRMWARE_INCLUDE_WYY),y)
rm -f $(INSTALLDIR)/www/Advanced_wyy.asp
endif
ifneq ($(CONFIG_FIRMWARE_INCLUDE_ZEROTIER),y)
rm -f $(INSTALLDIR)/www/Advanced_zerotier.asp
endif
ifeq ($(CONFIG_FIRMWARE_INCLUDE_FRPC)_$(CONFIG_FIRMWARE_INCLUDE_FRPS), n_n)
rm -f $(INSTALLDIR)/www/Advanced_frp.asp
endif
clean:
@echo "Clean www romfs"
2.3修改版本号
cd /opt/rt-n56u/trunk/
#进入目录
vim versions.inc
#编辑文件
FIRMWARE_ROOTFS_VER=3.9
FIRMWARE_BUILDS_VER=099
FIRMWARE_BUILDS_REV=$(shell git rev-parse --short HEAD 2>/dev/null)
/*最后一栏也可以这样写 `FIRMWARE_BUILDS_REV=20200730`*/
[scode type="share"]常见的3.4.3.9_099就是这么来的,后面跟的应该是源码版本,可以去掉或者改成别的[/scode]
####2.4 开启Openvpn
cd /opt/rt-n56u/trunk
vim build_firmware_modify
然后增加三行
##Openvpn服务##
echo "CONFIG_FIRMWARE_INCLUDE_OPENVPN=y" >> .config #Openvpn服务
##Openvpn服务##
####2.5 预置路由定时重启
cd /opt/rt-n56u/trunk/user/shared
vim defaults.c
或者用宝塔编译
/*autoreboot*/
{ "reboot_schedule_enable", "0" },
{ "reboot_schedule", "00000000000" },
// 0代表关闭 1代表开启
// 0000000代表周一到周日 0000代表时间
####2.6 预置开启vpn客户端
{ "vpns_enable", "0" },//vpn服务端关闭
{ "vpns_type", "0" },//vpn协议
{ "vpns_cast", "0" },
{ "vpns_auth", "0" },//认证算法
{ "vpns_mppe", "1" },//加密算法
{ "vpns_mtu", "1450" },//MTU
{ "vpns_mru", "1450" },//MRU
{ "vpns_vuse", "0" },//子网
{ "vpns_vnet", "10.8.0.0" },//vpn隧道使用的网络
{ "vpns_actl", "0" },//广播中继
{ "vpns_cli0", "245" },//客户端IP地址起
{ "vpns_cli1", "254" },//客户端IP地址终
{ "vpns_num_x", "0" },//客户端访问范围
{ "vpnc_enable", "1" },//vpn客户端开启
{ "vpnc_type", "1" },//vpn协议
{ "vpnc_peer", "" },//vpn服务器地址
{ "vpnc_user", "" },//用户名
{ "vpnc_pass", "" },//密码
{ "vpnc_auth", "0" },//认证算法
{ "vpnc_mppe", "0" },//加密算法
{ "vpnc_pppd", "" },//pppd附加选项
{ "vpnc_rnet", "172.20.8.0" },//vpn服务器子网
{ "vpnc_rmsk", "255.255.255.0" },//vpn服务器掩码
{ "vpnc_pdns", "1" },//从VPN服务器获取DNS
{ "vpnc_mtu", "1450" },//MTU
{ "vpnc_mru", "1450" },//MRU
{ "vpnc_sfw", "2" },//限制来自 VPN 服务器的访问:否 0-2 2代表仅使用路由
{ "vpnc_dgw", "0" },//限制来自 VPN 服务器的访问:是0-2
####2.7 修改默认http端口
cd /opt/rt-n56u/trunk/user/shared
vim defaults.c
/* Web server parameters */
{ "http_username", SYS_USER_ROOT }, /* Username */
{ "http_passwd", DEF_ROOT_PASSWORD }, /* Password */
{ "http_access", "0" }, /* HTTP access (0: ALL, 1: LAN only, 2: LAN + Wireless MainAP) */
{ "http_proto", "0" }, /* HTTP proto (0: HTTP, 1: HTTPS, 2: Both) */
{ "http_lanport", "80" }, /* HTTP LAN port to listen on */
{ "https_lport", "443" }, /* HTTPS LAN port to listen on */
{ "https_clist", DEF_HTTPS_CIPH_LIST }, /* HTTPS SSL cipher list */
{ "fw_dos_x", "0" }, // oleg patch
{ "dr_enable_x", "1" }, // oleg patch
{ "mr_enable_x", "0" }, // oleg patch
{ "mr_qleave_x", "1" },
// { "http_lanport", "80" }, /* HTTP LAN port to listen on */
// { "https_lport", "443" }, /* HTTPS LAN port to listen on */
// 可修改默认http端口不为80,默认http不为443
####2.8 修改默认默认网关、子网掩码
cd /opt/rt-n56u/trunk/user/shared
vim defaults.h
#define DEF_LAN_ADDR "10.32.0.1"
#define DEF_LAN_DHCP_BEG "10.32.0.100"
#define DEF_LAN_DHCP_END "10.32.1.244"
#define DEF_LAN_MASK "255.255.254.0"
####2.9 修改WIFI名字以及密码
#define DEF_WLAN_2G_CC "CN"
#define DEF_WLAN_5G_CC "CN"
#define DEF_WLAN_2G_SSID BOARD_PID "_%s"
#define DEF_WLAN_5G_SSID BOARD_PID "_5G_%s"
#define DEF_WLAN_2G_GSSID BOARD_PID "_GUEST_%s"
#define DEF_WLAN_5G_GSSID BOARD_PID "_GUEST_5G_%s"
#define DEF_WLAN_2G_PSK "1234567890"
#define DEF_WLAN_5G_PSK "1234567890"
####2.10 修改登陆名字以及密码
#define SYS_USER_ROOT "admin"
#define DEF_ROOT_PASSWORD "admin"
####2.11 插件的集成与删除
然后进入/opt/rt-n56u/trunk/configs/templates
修改MI-3MI.config
这里可以选择是否集成某些插件
不过貌似用处不是很大,我一般修改/opt/rt-n56u/trunk
中的build_firmware_modify
来选择是否集成或者修改插件
修改方法也很简单,只需要将MENTOHUST=y
改为MENTOHUST=n
即表示放弃集成锐捷插件
##锐捷认证##
echo "CONFIG_FIRMWARE_INCLUDE_MENTOHUST=n" >> .config #锐捷认证插件,选择n后全部有关插件都不集成
echo "CONFIG_FIRMWARE_INCLUDE_SCUTCLIENT=n" >> .config
##锐捷认证##
####2.12 中文化适配修改
如果想修改中文化适配则修改/opt/rt-n56u/trunk/user/www/dict/CN.dict
####2.13 主题背景以及Logo修改
主题文件下载地址:蓝奏云
如果想修改LOGO则替换/opt/rt-n56u/trunk/user/www/n56u_ribbon_fixed/bootstrap/img/asus_logo.png
如果想修改背景则修改/opt/rt-n56u/trunk/user/www/n56u_ribbon_fixed/bootstrap/css/main.css
[scode type="yellow"]如果不需要修改主题,请参考下面的代码[/scode]
body{
background: url("../img/bg/wood.jpg") repeat scroll center top transparent;
background-color: #282828;
overflow-y: scroll;
}
body.body_iframe{
background: #F5F5F5;
margin: 0 5px 0 5px;
min-width: inherit;
overflow-y: auto;
}
[scode type="yellow"]如果需要修改主题,请参考下面的代码[/scode]
body{
background: url("../img/bg/wood.jpg") repeat scroll center top transparent;
background-color: #282828;
overflow-y: scroll;
z-index:-1;
}
body.body_iframe{
background-color: rgba(34, 34, 34, 0);
margin: 0 5px 0 5px;
min-width: inherit;
overflow-y: auto;
background-image: -moz-linear-gradient(top, rgba(34, 34, 34, 0.82), rgba(34, 34, 34, 0));
background-image: -ms-linear-gradient(top, rgba(34, 34, 34, 0.82), rgba(34, 34, 34, 0));
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(rgba(34, 34, 34, 0.82)), to(rgba(34, 34, 34, 0)));
background-image: -webkit-linear-gradient(top, rgba(34, 34, 34, 0.82), rgba(34, 34, 34, 0));
background-image: -o-linear-gradient(top, rgba(34, 34, 34, 0.82), rgba(34, 34, 34, 0));
background-image: linear-gradient(top, rgba(34, 34, 34, 0.82), rgba(34, 34, 34, 0));
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='rgba(34, 34, 34, 0.82)', endColorstr='rgba(34, 34, 34, 0)', GradientType=0);
border-color: rgba(34, 34, 34, 0.82) rgba(34, 34, 34, 0.82) rgba(34, 34, 34, 0.82);
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
color:#ffffff;
margin-bottom: 1px;
}
[scode type="red"]修改完主题后,还需要修改Logo与背景的图层顺序,即是[/scode]
body{
background: url("../img/bg/wood.jpg") repeat scroll center top transparent;
background-color: #282828;
overflow-y: scroll;
z-index:-1;/* 置于下层 */
}
body.body_iframe{
background-color: rgba(34, 34, 34, 0);
margin: 0 5px 0 5px;
min-width: inherit;
overflow-y: auto;
background-image: -moz-linear-gradient(top, rgba(34, 34, 34, 0.82), rgba(34, 34, 34, 0));
background-image: -ms-linear-gradient(top, rgba(34, 34, 34, 0.82), rgba(34, 34, 34, 0));
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(rgba(34, 34, 34, 0.82)), to(rgba(34, 34, 34, 0)));
background-image: -webkit-linear-gradient(top, rgba(34, 34, 34, 0.82), rgba(34, 34, 34, 0));
background-image: -o-linear-gradient(top, rgba(34, 34, 34, 0.82), rgba(34, 34, 34, 0));
background-image: linear-gradient(top, rgba(34, 34, 34, 0.82), rgba(34, 34, 34, 0));
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='rgba(34, 34, 34, 0.82)', endColorstr='rgba(34, 34, 34, 0)', GradientType=0);
border-color: rgba(34, 34, 34, 0.82) rgba(34, 34, 34, 0.82) rgba(34, 34, 34, 0.82);
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
color:#ffffff;
margin-bottom: 1px;
}
.wrapper {
width: 960px;
margin: 0 auto;
}
#logo {
background-image: url("../img/bg/asus_logo.png");
width: 150px;
height: 71px;
margin-top: 40px;
z-index:1;/* 置于上层 */
}
#logo:hover {
cursor: pointer;
}
其中background: url("../img/bg/wood.jpg") repeat scroll center top transparent;
表示引入的背景图片
背景修改后效果如下:
主题修改后效果如下:
通过查看Advanced_FirmwareUpgrade_Content.asp
<link rel="shortcut icon" href="images/favicon.ico">
<link rel="icon" href="images/favicon.png">
<link rel="stylesheet" type="text/css" href="/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="/bootstrap/css/main.css">
得知网页预览图和书签预览图放在/opt/rt-n56u/trunk/user/www/n56u_ribbon_fixed/images
所以自己做了对应规格的图标替换即可
####2.14 Padavan其他功能备注
中文SSID支持的修改:
proprietary/rt_wifi/rtpci/3.0.X.X/mt76x2/common/cmm_info.c
proprietary/rt_wifi/rtpci/3.0.X.X/mt76x2/include/rtmp_def.h
proprietary/rt_wifi/rtsoc/2.7.X.X/rt2860v2/common/cmm_info.c
proprietary/rt_wifi/rtsoc/2.7.X.X/rt2860v2/include/rtmp_def.h
linux-3.4.x/drivers/net/wireless/ralink/mt76x2/common/cmm_info.c
linux-3.4.x/drivers/net/wireless/ralink/mt76x2/include/rtmp_def.h
linux-3.4.x/drivers/net/wireless/ralink/rt2860v2/common/cmm_info.c
linux-3.4.x/drivers/net/wireless/ralink/rt2860v2/include/rtmp_def.h
user/httpd/aspbw.c
user/httpd/httpd.h
user/rc/common_ex.c
user/rc/rc.h
user/www/n56u_ribbon_fixed/general.js
修改编译用户及主机信息
linux-3.4.x/scripts/mkcompile_h
关闭悬浮日志
user/shared/defaults.c
{ "log_float_ui", "0" }, /* WebUI syslog float panel mode */
开启默认中文界面
{ "preferred_lang", "CN" },
5G使用美国地区
user/shared/defaults.h
#define DEF_WLAN_5G_CC "US"
添加花生壳动态DNS服务
user/www/n56u_ribbon_fixed/Advanced_DDNS_Content.asp
web界面添加手势图标
user/www/n56u_ribbon_fixed/Advanced_DHCP_Content.asp
<span class="icon-hand-right"></span>
修改编译版本以及时间
修改 /opt/rt-n56u/trunk/versions.inc
FIRMWARE_ROOTFS_VER=3.9
FIRMWARE_BUILDS_VER=099
FIRMWARE_BUILDS_REV=20200619
####2.15 Padavan文件系统
Padavan 是基于 BusyBox(也就是 Linux-based kernel)的嵌入式 Linux 系统,和
OpenWRT 一样都是开源的
不过他跟 OpenWRT 最大的区别就是为了保护系统不受破坏,大部分的目录是不可写入的
这也注定了它与涉及修改内核参数之类的操作无缘,不过这么做也有好处,你不会轻易的把路由器系统玩坏
上面有提到 Padavan 的大部分目录都是只读的,其实只有少数目录会提示 Read only file system ,其他的目录是可写的,但是写入的内容并不会被保存,除 /etc/storage 目录以外的写入在重启之后就消失了。
查看文件系统的结构:
/ # df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 3584 3584 0 100% /
/dev/root 3584 3584 0 100% /
tmpfs 8 0 8 0% /dev
tmpfs 4096 1776 2320 43% /etc
tmpfs 1024 4 1020 0% /home
tmpfs 8 0 8 0% /media
tmpfs 8 0 8 0% /mnt
tmpfs 24576 80 24496 0% /tmp
tmpfs 4096 56 4040 1% /var
可以发现除系统的关键目录以外其他的目录均为 tmpfs
,这和 RamDisk
很像,都是把数据暂存在内存上,所以在大多数目录里所做的修改在没有执行保存脚本之前并没有真正的写入 Rom
里,如果没有保存重启之后数据便会丢失了。
系统提供了一个管理脚本用于管理暂存在内存的数据,脚本的绝对路径在 /sbin/mtd_storage.sh
,有
load|save|backup|restore|erase|reset|fill
等参数,各种参数我这里不多做介绍,翻译一下就能知道。
为了方便日常使用脚本做了别名的指定,只需要执行 mtd_storage.sh save
即可快速保存数据。
在这一段时间的使用感觉还是不错的,不过受路由器硬件限制也做不了什么大事情,所以目前我只在上面弄了纸飞机
如果真的对嵌入式 Linux
感兴趣的话建议购入 ARM
板来折腾,比如树莓派之流,不管是硬件还是
wiki 文档还是可玩性都好很多
切记:在修改完 /etc/storage
下的文件后记得执行 mtd_storage.sh
save 保存,否则所做的修改在重启或者断电后会丢失
-----引用来自
思起博客
3.编译
3.1准备工具链
cd /opt/rt-n56u/toolchain-mipsel
# (推荐)使用脚本下载预编译的工具链:
sh dl_toolchain.sh
# 或者,也可以从源码编译工具链,这需要一些时间:
./clean_toolchain
./build_toolchain
3.2编译
然后再运行编译即可
cd /opt/rt-n56u/trunk/
./clear_tree
fakeroot ./build_firmware_modify MI-3
#MI-3 为路由器型号,要编译其他型号自行修改最后在`/opt/rt-n56u/trunk/images`下载编译好的固件刷入路由器即可。
4.在Padavan 上使用Entware
Entware 是一个适用于嵌入式系统的软件包库,使用 opkg 包管理系统进行管理,现在在官方的源上已经有超过 2000 个软件包了,可以说是非常的丰富
官方地址:
Entware
安装 Entware
- 新建 opt 文件夹
如果你是在电脑上格式化的 U 盘,并且知道怎么在电脑上读取 ext4
分区,那么在 ext4
分区的根目录新建一个 opt
文件夹
或者你可以把 U 盘插到路由器上,开启 samba
并通过电脑访问 samba
,在 U 盘下创建 opt 文件夹
如果你上面的不会,并且按照我的教程在路由器上格式化 U 盘,还可以按照以下做法
ejusb
mkdir /media/onmp
mount -t ext4 /dev/sda1 /media/onmp
# /dev/sda1 是你的 ext4 分区
mkdir /media/onmp/opt
这样就创建好 opt
文件夹了,之后装的所有东西都会在里面
####开启 Entware
先卸载 U 盘
ejusb
然后在路由器管理页打开 Entware
拔下 U 盘再重新插入,等一小会儿
####查看是否成功挂载 /opt
进入 shell
,输入 df -h
,看到 /opt
挂载了就对了
如果 opt
没挂载,说明没安装上,请保证 opt
文件夹已经创建正确,确认无误,则可以进 shell
输入 opkg.sh
回车安装
如果使用固件自带脚本出现错误,可以尝试使用以下脚本
wget -O - http://bin.entware.net/mipselsf-k3.4/installer/generic.sh | /bin/sh
测试 opkg 命令
以上步骤之后,不出意外就装上了,我们现在可以测试一下
opkg update
ONMP 是一个 web 环境快速安装脚本,适用于安装了 Entware
的路由器,目前已经在 Padavan、LEDE(openwrt)、梅林上测试成功。
-----引用至
底噪博客
###5.关于内核精简
####需要注意的点:
1.尽量不要用精简的系统,因为有些问题比较隐蔽,我就因为一个包没有装导致卡了好久,精简版完全版之前切换了好几次,也重装了好几次
2.尽量新建个虚拟机或者新装个系统,避免各种各样的问题。
3.ubuntu版本尽量和官方要求的一致,否则包的版本可能不一样。
4.不要随便用chmod修改源码的权限,我有一次就因为修改了权限导致默认路径改变,最后只能重装系统解决。
####内核修改的方法
----假设你的目录是按官方来的。
1.按官方教程编译toolchain,假设是3.4.x版
2.复制————/opt/rt-n56u/configs/boards/
你要改的板子的型号:比如RT-N14U/
下面的kernel-3.4.x.config
————>到/opt/rt-n56u/linux-3.4.x/
————>改名为“.config
”(别漏下前面的点)
3.打开终端,定位到/opt/rt-n56u/linux-3.4.x/
4.输入命令:sudo make menuconfig
5.出来的会是这样的菜单:按方向键导航,按空格键改变值,前面括号里空白的是没选则,*
号的是选择上的,M
符号的是编译成模块的,后面有—>符号的说明有子菜单,每一项都可以选下面的来查看这一项的作用。
6.接下来就可以定制内核了,可以选的东西有很多,第一个选项里有CPU型号,必须要选对,还有内存容量选择,其他比较有用的是USB的功能,能选择很多USB设备,红外,串口,相机等等,当然要固件里有你设备的驱动。对于精简内核来说很多东西都是不用的,比如多媒体,声卡支持,HID之类的,都可以删掉。
7.修改完以后选总菜单的最后一项,SAVA,文件名一定要是kernel-3.4.x.config,最后把这个文件复制到/opt/rt-n56u/configs/boards/你要改的板子的型号:比如RT-N14U/下面,这样就完成内核修改了。
8.每次修改内核前都要clear_tree一次,然后把kernel-3.4.x.config重新拷贝过来再操作
-----引用至
CSDN
###6.插件开发
-----引用至
望月阁
背景
月初偶然得知padavan固件在linux 3.4.x内核上有高人backport了3.7.x的SO_REUSEPORT特性。对于拥有多核CPU的路由器来说,利用该特性可以显著提升SS所能承载的吞吐。手头上正好有个老旧的A3004NS,虽说有点不舍得荒野无灯的精致固件,还是拿来折腾一番。期间学习了一部分padavan固件编写插件的方法,下文以某插件为例,做简单的介绍及记录。
准备
按照hanwckf的rt-n56u说明准备编译环境。这个固件是在原版的padavan基础上增加了国内常用的一些插件,同时适配了不少常见的padavan兼容路由,在编译配置上做了简化,其他固件可能在一部分配置上有所出入。
插件相关文件
trunk/
|-- configs
| |-- templates
| | |-- A3004NS.config // 路由器适配文件,新增的插件编译选项开关可在此处追加
| | └-- ...
| └-- ...
|-- user
| |-- Makefile // 控制所有插件的编译,和路由器配置联动达到插件可选化编译和打包
| |-- A_PLUGIN
| | |-- Makefile // 控制单个插件的编译、打包文件产出,参照其他插件例子即可
| | └-- ...
| |-- www // 页面文件,padavan中多数为asp
| | |-- Makefile // 新增插件若有相关页面文件,需要调整该文件
| | |-- state.js // 控制页面目录中的插件页面入口,新增插件需要调整该文件
| | |-- dict // i18n实现,按需调整
| | └-- n56u_ribbon_fixed
| | |-- PLUGIN_RELATED.asp // 插件页面相关的asp文件
| | └-- ...
| |-- httpd
| | |-- variables.c // 插件相关nvram持久化数据的变量结构体定义
| | |-- web_ex.c // 处理asp后端逻辑的核心文件,主要关注暴露出来的函数,如update_variables_ex
| | |-- common.h // 关注variable,为结构体属性的类型
| | └-- ...
| |-- shared
| | |-- defaults.c // 定义插件相关变量的默认值
| | └-- ...
| └-- ...
└-- ...
插件核心代码
对应目录中trunk/user/A_PLUGIN
,主要通过Makefile
编译插件并将产出的(部分)二进制文件加入固件。多数情况下需要调整编译选项,参考其他插件例子即可。需要注意的一点是,在整体编译固件时插件时若需要重新运行configure
,要删除产出的config_done
文件。
编译开关
在trunk/user/Makefile
中关联对应插件的目录,如dir_y += transmission
,即可添加transmission
到编译列表。
若需要通过路由器适配文件配置插件编译可选,则可以改为dir_$(CONFIG_FIRMWARE_INCLUDE_TRANSMISSION) += transmission
, 并在trunk/configs/templates/XXX.config
中配置CONFIG_FIRMWARE_INCLUDE_TRANSMISSION=y/n
页面代码
页面代码一般简单插件仅需提供asp
文件,若存在额外的js
或css
文件,同样放在trunk/user/www
目录下,调整trunk/user/www/Makefile
文件即可。
核心流程
页面的核心逻辑是提交的数据通过httpd服务
暴露的函数入口更新到nvram
或持久化
的文件中。对此padavan
约定了一套处理的通用流程。
页面通过form post
提交到start_apply.htm
start_apply.htm
调用相应的后端update_variables、asus_nvram_commit
以及notify_services
update_variables
通过参数中的sid_list
找到对应的在trunk/user/httpd/variables.c
中定义的结构体变量,同时将其他参数映射到结构体定义的成员变量上。校验通过后,逐一更新到nvram
或写到相应文件(详见trunk/user/httpd/web_ex.c
中的update_variables_ex
函数逻辑)
提交变更到nvram
(持久化)
若需要,通知触发相关关服务,如系统重启等操作
####nvram/文件内容输出
1.页面上展示nvram中的变量,使用<% nvram_get_x("","VARIABLE"); %>
2.页面上输出文件内容,使用<% nvram_dump("PREFIX.VARIABLE", ""); %>
####nvram变量更新
一般情况无需关注,提交的参数名与插件结构体中的变量名相同即可。如:
// trunk/user/httpd/variables.c
struct variable variables_dnsforwarderConf[] = {
{"dns_forwarder_enable", "", NULL, EVM_RESTART_DNSFORWARDER},
{"dns_forwarder_bind", "", NULL, EVM_RESTART_DNSFORWARDER},
{"dns_forwarder_port", "", NULL, EVM_RESTART_DNSFORWARDER},
{"dns_forwarder_server", "", NULL, EVM_RESTART_DNSFORWARDER},
{0,0,0,0}
};
...
struct svcLink svcLinks[] = {
...
{"dnsforwarderConf", variables_dnsforwarderConf},
...
}
http
提交参数中包含dns_forwarder_server
,同时sid_list
指定为dnsforwarderConf
;, 即可更新到nvram
中的dns_forwarder_server
变量。
####文件内容更新
关于rom storage
中文件内容的更新,是通过将结构体变量单元(variable,见trunk/user/httpd/common.h)
中的longname
设置为File
,以在trunk/user/httpd/web_ex.c
的validate_asp_apply
函数改写为对应的文件路径实现更新的。如:
// trunk/user/httpd/variables.c
{"scripts.start_script.sh", "File", NULL, EVM_BLOCK_UNSAFE}
// trunk/user/httpd/web_ex.c - validate_asp_apply
...
} else if (!strncmp(v->name, "scripts.", 8)) {
if (write_textarea_to_file(value, STORAGE_SCRIPTS_DIR, file_name))
restart_needed_bits |= event_mask;
...
通过阅读代码可知,文件类型的variable有多个预定义的路径(见trunk/user/httpd/httpd.h
),普通插件一般使用scripts
目录即可,变量名格式需要为scripts.xxx
,有如下映射:scripts.FILE_NAME
-> /etc/storage/FILE_NAME
[scode type="yellow"]先研究到这里有空了继续研究[/scode]
5.固件下载
小渔自己编译的固件:
小渔网盘
蓝奏云盘
百度网盘提取码: 6bbw
6.编译环境下载
小渔自己的编译环境:
百度网盘提取码: tjdj
Github拉取源码:
git clone --depth=1 https://github.com/yuos-bit/Padavan.git /opt/rt-n56u
#git clone --depth=1 https://github.com/yuos-bit/Padavan.git /opt/rt-n56u
7.维护日志
2020-10-11
修复小米4C下载流量过大CPU满载导致路由断流的BUG
2020-10-9
完善小米路由4C的固件以及修正网口错位以及其他BUG。感谢网友@拥有是
帮助测试
2020-09-01
完善小米路由3C、3A的固件以及修正网口错位以及其他BUG。累死我了,电脑一天开着电费都花了不少
8.随手记
2020-10-09
锐捷认证
[collapse status="false" title="PS:"]貌似可以这样加文件?正在试验中
romfs:
$(ROMFSINST) -p +x $(THISDIR)/$(SRC_NAME)/src/mentohust /usr/bin/bin_mentohust
$(ROMFSINST) -p +x $(THISDIR)/scripts/mentohust.sh /usr/bin/mentohust.sh
$(ROMFSINST) -p +x $(THISDIR)/Plug/8021x.exe /etc/storage/mentohust/8021x.exe
$(ROMFSINST) -p +x $(THISDIR)/Plug/SuConfig.dat /etc/storage/mentohust/SuConfig.dat
$(ROMFSINST) -p +x $(THISDIR)/Plug/W32N55.dll /etc/storage/mentohust/W32N55.dll
$(ROMFSINST) -p +x $(THISDIR)/Plug/mentohust /etc/storage/mentohust/mentohust
$(ROMFSINST) -p +x $(THISDIR)/Plug/network /etc/storage/mentohust/network
[scode type="blue"]楼上已测试,貌似$(ROMFSINST) -p +x
仅仅是一个复制命令,也就是说只能复制到现有的目录,不能凭空捏造,现在尝试新的方法,如下:[/scode]
romfs:
$(ROMFSINST) -p +x $(THISDIR)/$(SRC_NAME)/src/mentohust /usr/bin/bin_mentohust
$(ROMFSINST) -p +x $(THISDIR)/scripts/mentohust.sh /usr/bin/mentohust.sh
$(ROMFSINST) -p +x $(THISDIR)/Plug/8021x.exe /usr/bin/8021x.exe
$(ROMFSINST) -p +x $(THISDIR)/Plug/SuConfig.dat /usr/bin/SuConfig.dat
$(ROMFSINST) -p +x $(THISDIR)/Plug/W32N55.dll /usr/bin/W32N55.dll
$(ROMFSINST) -p +x $(THISDIR)/Plug/mentohust /usr/bin/mentohust
$(ROMFSINST) -p +x $(THISDIR)/Plug/network /usr/bin/network
[/collapse]
2020-10-12
记录:如果尝试适配nps在makefile
里这么写会怎么样呢?当然是成功了,不过要在开机自启脚本里加上以下代码,放在 WAN 上行/下行启动后执行
:
cd /usr/bin/
./npc -server=域名+端口 -vkey=key -type=tcp
[collapse status="false" title="Makefile 猜想"]
源码:
THISDIR := $(shell pwd)
NPS_VER := 0.26.8
NPS_URL_BASE := https://github.com/ehang-io/nps/releases/download
NPS_NAME := linux_mipsle_client
NPS_URL := $(NPS_URL_BASE)/v$(NPS_VER)/$(NPS_NAME).tar.gz
all: download_test extra_test
@echo "nps build done!"
download_test:
( if [ ! -f $(NPS_NAME).tar.gz ]; then \
wget -t5 --timeout=20 --no-check-certificate -O $(NPS_NAME).tar.gz $(NPS_URL); \
fi )
extra_test:
( if [ ! -d $(NPS_NAME) ]; then \
tar xf $(NPS_NAME).tar.gz; \
cat ./conf/*.patch | patch -d $(THISDIR) -p1 ; \
fi )
clean:
rm -rf $(NPS_NAME).tar.gz conf npc
romfs:
$(ROMFSINST) -d $(THISDIR)/conf/multi_account.conf /usr/bin/conf/multi_account.conf
$(ROMFSINST) -d $(THISDIR)/conf/npc.conf /usr/bin/conf/npc.conf
$(ROMFSINST) -p +x $(THISDIR)/npc /usr/bin/npc
[/collapse]
2021-04-18
记录:内核获取
linux-3.4
linux-5.7
9.关于 科学 的插件编译
安裝最新版本的cmak
sudo apt remove --purge --auto-remove cmake -y
# 卸载老掉牙的原版 Cmake
sudo apt purge --auto-remove cmake -y
# 另外一种卸载方式
cd ~
version=3.22
build=0
wget https://cmake.org/files/v$version/cmake-$version.$build.tar.gz
tar -xzvf cmake-$version.$build.tar.gz
cd cmake-$version.$build/
./bootstrap
make -j4
sudo make install
然后测试
cmake --version
# cmake --version的結果:
# cmake version 3.22.X
# CMake suite maintained and supported by Kitware (kitware.com/cmake).
又发现一个坑,不设置软连接可能识别不到,仍旧报错
which cmake
# /usr/local/bin/cmake
sudo ln -s /usr/local/bin/cmake /usr/include/cmake
# 设置软连接
10.关于Padavan 在终端下刷写升级固件
cd /tmp
mtd_write write xxxxx.trx Firmware_Stub
# xxxxx.trx 固件名
reboot