├── .github └── workflows │ ├── JDCloud-AX1800-Pro_AX6600.yml │ ├── JDCloud-AX6000-Baili-hanwckf.yml │ ├── JDCloud-AX6000-Baili-immortalwrt.yml │ ├── RAX3000M-eMMC_XR30-eMMC-hanwckf.yml │ └── delete-older-releases.yml ├── JDCloud-AX1800-Pro_AX6600 ├── .config ├── diy-part1.sh ├── diy-part2.sh └── jdcloud-ax1800-pro_ax6600.patch ├── JDCloud-AX6000-Baili-hanwckf ├── .mtwifi-cfg.config ├── diy-part1.sh ├── diy-part2.sh ├── feeds.conf.default ├── mt7986a-dsa-jdcloud-re-cp-03.dts └── mt7986a-gsw-jdcloud-re-cp-03.dts ├── JDCloud-AX6000-Baili-immortalwrt ├── diy-part1.sh ├── diy-part2.sh └── immortalwrt.config ├── LICENSE ├── RAX3000M-eMMC_XR30-eMMC-hanwckf ├── .mtwifi-cfg.config ├── diy-part1.sh ├── diy-part2.sh ├── feeds.conf.default ├── mt7981-dsa-cmcc-rax3000m.dtsi ├── mt79xx_20220907-8b55f5_eeprom.tar.xz └── mt79xx_20231229-4012a0_eeprom.tar.xz ├── Readme.md └── Tutorial ├── JDCloud-AX1800-Pro_AX6600-Athena.md ├── JDCloud-AX6000-Baili.md ├── MT798X_eMMC_Replacement.md └── RAX3000M-eMMC_XR30-eMMC.md /.github/workflows/JDCloud-AX1800-Pro_AX6600.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2019-2020 P3TERX 3 | # 4 | # This is free software, licensed under the MIT License. 5 | # See /LICENSE for more information. 6 | # 7 | # https://github.com/P3TERX/Actions-OpenWrt 8 | # Description: Build OpenWrt using GitHub Actions 9 | # 10 | ###############手动修改############## 11 | name: JDCloud-AX1800-Pro_AX6600-lede 12 | 13 | on: 14 | repository_dispatch: 15 | workflow_dispatch: 16 | inputs: 17 | NO_DOCKERMAN: 18 | description: 'Not build luci-app-dockerman' 19 | required: true 20 | default: false 21 | type: boolean 22 | ssh: 23 | description: 'SSH connection to Actions' 24 | required: false 25 | default: 'false' 26 | # schedule: 27 | # - cron: 0 16 * * * 28 | 29 | env: 30 | ###############手动修改############## 31 | OPENWRT_NAME: lede 32 | UPLOAD_TAG_NAME: jdcloud-ax1800-pro_ax6600 33 | REPO_URL: https://github.com/coolsnowwolf/lede 34 | REPO_BRANCH: master 35 | FEEDS_CONF: feeds.conf.default 36 | CONFIG_FILE: JDCloud-AX1800-Pro_AX6600/.config 37 | DIY_P1_SH: JDCloud-AX1800-Pro_AX6600/diy-part1.sh 38 | DIY_P2_SH: JDCloud-AX1800-Pro_AX6600/diy-part2.sh 39 | SSH_ACTIONS: false 40 | UPLOAD_FIRMWARE: true 41 | UPLOAD_RELEASE: true 42 | TZ: Asia/Shanghai 43 | 44 | jobs: 45 | build: 46 | runs-on: ubuntu-20.04 47 | 48 | permissions: 49 | contents: write 50 | 51 | steps: 52 | - name: 检查项目分支 53 | uses: actions/checkout@main 54 | 55 | - name: 初始化编译环境 56 | env: 57 | DEBIAN_FRONTEND: noninteractive 58 | run: | 59 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 60 | sudo -E apt-get -qq update 61 | sudo -E apt-get -qq install $(curl -fsSL git.io/depends-ubuntu-2004) 62 | sudo -E apt-get -qq autoremove --purge 63 | sudo -E apt-get -qq clean 64 | sudo timedatectl set-timezone "$TZ" 65 | sudo mkdir -p /workdir 66 | sudo chown $USER:$GROUPS /workdir 67 | 68 | - name: 清理磁盘空间(Ubuntu) 69 | uses: jlumbroso/free-disk-space@main 70 | with: 71 | # this might remove tools that are actually needed, 72 | # when set to "true" but frees about 6 GB 73 | tool-cache: true 74 | 75 | # all of these default to true, but feel free to set to 76 | # "false" if necessary for your workflow 77 | android: false 78 | dotnet: false 79 | haskell: false 80 | large-packages: false 81 | swap-storage: false 82 | 83 | - name: 下载固件源码 84 | working-directory: /workdir 85 | run: | 86 | df -hT $PWD 87 | git clone $REPO_URL -b $REPO_BRANCH openwrt 88 | ln -sf /workdir/openwrt $GITHUB_WORKSPACE/openwrt 89 | 90 | - name: 加载feeds.conf.default & DIY_P1_SH 91 | run: | 92 | [ -e $FEEDS_CONF ] && mv $FEEDS_CONF openwrt/feeds.conf.default 93 | chmod +x $DIY_P1_SH 94 | cd openwrt 95 | $GITHUB_WORKSPACE/$DIY_P1_SH 96 | 97 | - name: 应用patch & 更新安装 feeds 98 | run: | 99 | cp JDCloud-AX1800-Pro_AX6600/jdcloud-ax1800-pro_ax6600.patch openwrt/jdcloud-ax1800-pro_ax6600.patch 100 | cd openwrt 101 | git apply jdcloud-ax1800-pro_ax6600.patch 102 | ./scripts/feeds update -a 103 | ./scripts/feeds install -a 104 | 105 | - name: 加载config & DIY_P2_SH 106 | run: | 107 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE openwrt/.config 108 | chmod +x $DIY_P2_SH 109 | cd openwrt 110 | $GITHUB_WORKSPACE/$DIY_P2_SH 111 | 112 | - name: 取消编译dockerman 113 | if: github.event.inputs.NO_DOCKERMAN == 'true' 114 | run: | 115 | cd openwrt 116 | sed -i '/CONFIG_PACKAGE_luci-app-dockerman=y/d' .config 117 | 118 | - name: SSH链接管理 119 | uses: P3TERX/ssh2actions@v1.0.0 120 | if: (github.event.inputs.ssh == 'true' && github.event.inputs.ssh != 'false') || contains(github.event.action, 'ssh') 121 | env: 122 | TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} 123 | TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} 124 | 125 | - name: 下载安装包 126 | id: package 127 | run: | 128 | cd openwrt 129 | make defconfig 130 | make download -j$(nproc) 131 | find dl -size -1024c -exec ls -l {} \; 132 | find dl -size -1024c -exec rm -f {} \; 133 | 134 | - name: 编译固件 135 | id: compile 136 | run: | 137 | cd openwrt 138 | echo -e "$(nproc) thread compile" 139 | make -j$(nproc) || make -j1 || make -j1 V=s 140 | 141 | sed -nE 's/.*(192.168\.[0-9]+\.[0-9]+).*/\1/p' package/base-files/files/bin/config_generate | head -n 1 > IP_ADDR 142 | [ -s IP_ADDR ] && echo "IP_ADDR=$(cat IP_ADDR)" >> $GITHUB_ENV 143 | if grep -q 'CONFIG_PACKAGE_luci-app-dockerman=y' .config; then 144 | echo "BUILD_DOCKERMAN=-docker" >> $GITHUB_ENV 145 | else 146 | echo "BUILD_DOCKERMAN=" >> $GITHUB_ENV 147 | fi 148 | echo "FILE_DATE=$(date +"%Y.%m.%d-%H%M")" >> $GITHUB_ENV 149 | echo "status=success" >> $GITHUB_OUTPUT 150 | 151 | - name: 查看磁盘使用情况 152 | if: (!cancelled()) 153 | run: df -hT 154 | 155 | - name: 整理文件并重命名 156 | id: organize 157 | if: env.UPLOAD_FIRMWARE == 'true' && !cancelled() 158 | run: | 159 | mapfile -t devices < <(grep '^CONFIG_TARGET_DEVICE.*=y' openwrt/.config | sed -r 's/.*DEVICE_(.*)=y/\1/') 160 | cd openwrt/bin/targets/*/* 161 | rm -rf packages 162 | sudo -E apt-get -qq install rename 163 | for val in "${devices[@]}"; do 164 | rename "s/.*${val}/${{ env.FILE_DATE }}-${{ env.OPENWRT_NAME }}-${val}${{ env.BUILD_DOCKERMAN }}/" * 165 | echo "$val" 166 | done 167 | echo "FIRMWARE=$PWD" >> $GITHUB_ENV 168 | echo "status=success" >> $GITHUB_OUTPUT 169 | 170 | - name: 打包上传固件到Actions Artifacts 171 | uses: actions/upload-artifact@main 172 | if: steps.organize.outputs.status == 'success' && !cancelled() 173 | with: 174 | name: ${{ env.FILE_DATE }}-${{ env.OPENWRT_NAME }}-${{ env.UPLOAD_TAG_NAME }}${{ env.BUILD_DOCKERMAN }} 175 | path: ${{ env.FIRMWARE }} 176 | 177 | - name: 生成固件Release标签 178 | id: tag 179 | if: env.UPLOAD_RELEASE == 'true' && !cancelled() 180 | run: | 181 | touch release.txt 182 | echo "- 使用源码:${{ env.REPO_URL }}" >> release.txt 183 | echo "- 登录地址:${{ env.IP_ADDR }}" >> release.txt 184 | echo "- 注意京东云AX1800-Pro亚瑟无线AX1800规格,5G无线不支持160MHz频宽" >> release.txt 185 | echo "- 注意京东云AX6600雅典娜无线AX6600规格,5.8G无线不支持160MHz频宽" >> release.txt 186 | if [[ "${{ env.BUILD_DOCKERMAN }}" == '-docker' ]]; then 187 | echo "- 已编译luci-app-dockerman" >> release.txt 188 | else 189 | echo "- 未编译luci-app-dockerman" >> release.txt 190 | fi 191 | echo "release_tag=${{ env.FILE_DATE }}-${{ env.OPENWRT_NAME }}-${{ env.UPLOAD_TAG_NAME }}${{ env.BUILD_DOCKERMAN }}" >> $GITHUB_OUTPUT 192 | echo "status=success" >> $GITHUB_OUTPUT 193 | 194 | - name: 发布固件至Release 195 | uses: softprops/action-gh-release@v2.1.0 196 | if: steps.tag.outputs.status == 'success' && !cancelled() 197 | env: 198 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 199 | with: 200 | files: ${{ env.FIRMWARE }}/* 201 | name: ${{ env.FILE_DATE }}-${{ env.OPENWRT_NAME }}-${{ env.UPLOAD_TAG_NAME }}${{ env.BUILD_DOCKERMAN }} 202 | tag_name: ${{ steps.tag.outputs.release_tag }} 203 | body_path: release.txt 204 | -------------------------------------------------------------------------------- /.github/workflows/JDCloud-AX6000-Baili-hanwckf.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2019-2020 P3TERX 3 | # 4 | # This is free software, licensed under the MIT License. 5 | # See /LICENSE for more information. 6 | # 7 | # https://github.com/P3TERX/Actions-OpenWrt 8 | # Description: Build OpenWrt using GitHub Actions 9 | # 10 | ###############手动修改############## 11 | name: JDCloud-AX6000-Baili-hanwckf 12 | 13 | on: 14 | repository_dispatch: 15 | workflow_dispatch: 16 | inputs: 17 | LAN_IP: 18 | description: 'Set LAN IP Address' 19 | required: true 20 | default: '192.168.1.1' 21 | WIFI_DRIVER: 22 | description: 'Choose WiFi Driver' 23 | required: true 24 | default: 'v7.6.7.2-fw-20240823(recommend)' 25 | type: choice 26 | options: 27 | - v7.6.7.2-fw-20240823(recommend) 28 | - v7.6.6.1-fw-20230808(recommend) 29 | - v7.6.7.2-fw-default 30 | - v7.6.7.2-fw-20221208 31 | - v7.6.7.2-fw-20230421 32 | - v7.6.7.2-fw-20230808 33 | - v7.6.7.2-fw-20231024 34 | - v7.6.6.1-fw-default 35 | - v7.6.6.1-fw-20221208 36 | - v7.6.6.1-fw-20230421 37 | - v7.6.6.1-fw-20231024 38 | - v7.6.6.1-fw-20240823 39 | SW_DRIVER: 40 | description: 'Choose Switch Driver' 41 | required: true 42 | default: 'GSW' 43 | type: choice 44 | options: 45 | - GSW 46 | - DSA 47 | APP_MTK: 48 | description: 'Use luci-app-mtk wifi config' 49 | required: true 50 | default: false 51 | type: boolean 52 | NO_DOCKERMAN: 53 | description: 'Not build luci-app-dockerman' 54 | required: true 55 | default: false 56 | type: boolean 57 | ssh: 58 | description: 'SSH connection to Actions' 59 | required: false 60 | default: 'false' 61 | # schedule: 62 | # - cron: 0 16 * * * 63 | 64 | env: 65 | ###############手动修改############## 66 | OPENWRT_NAME: hanwckf 67 | REPO_URL: https://github.com/hanwckf/immortalwrt-mt798x 68 | REPO_BRANCH: openwrt-21.02 69 | FEEDS_CONF: JDCloud-AX6000-Baili-hanwckf/feeds.conf.default 70 | CONFIG_FILE: JDCloud-AX6000-Baili-hanwckf/.mtwifi-cfg.config 71 | DIY_P1_SH: JDCloud-AX6000-Baili-hanwckf/diy-part1.sh 72 | DIY_P2_SH: JDCloud-AX6000-Baili-hanwckf/diy-part2.sh 73 | SSH_ACTIONS: false 74 | UPLOAD_FIRMWARE: true 75 | UPLOAD_RELEASE: true 76 | TZ: Asia/Shanghai 77 | 78 | jobs: 79 | build: 80 | runs-on: ubuntu-20.04 81 | 82 | permissions: 83 | contents: write 84 | 85 | steps: 86 | - name: 检查项目分支 87 | uses: actions/checkout@main 88 | 89 | - name: 初始化编译环境 90 | env: 91 | DEBIAN_FRONTEND: noninteractive 92 | run: | 93 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 94 | sudo -E apt-get -qq update 95 | sudo -E apt-get -qq install $(curl -fsSL git.io/depends-ubuntu-2004) 96 | sudo -E apt-get -qq autoremove --purge 97 | sudo -E apt-get -qq clean 98 | sudo timedatectl set-timezone "$TZ" 99 | sudo mkdir -p /workdir 100 | sudo chown $USER:$GROUPS /workdir 101 | 102 | - name: 清理磁盘空间(Ubuntu) 103 | uses: jlumbroso/free-disk-space@main 104 | with: 105 | # this might remove tools that are actually needed, 106 | # when set to "true" but frees about 6 GB 107 | tool-cache: true 108 | 109 | # all of these default to true, but feel free to set to 110 | # "false" if necessary for your workflow 111 | android: false 112 | dotnet: false 113 | haskell: false 114 | large-packages: false 115 | swap-storage: false 116 | 117 | - name: 下载固件源码 118 | working-directory: /workdir 119 | run: | 120 | df -hT $PWD 121 | git clone $REPO_URL -b $REPO_BRANCH openwrt 122 | ln -sf /workdir/openwrt $GITHUB_WORKSPACE/openwrt 123 | 124 | - name: 加载feeds.conf.default & DIY_P1_SH 125 | run: | 126 | [ -e $FEEDS_CONF ] && mv $FEEDS_CONF openwrt/feeds.conf.default 127 | chmod +x $DIY_P1_SH 128 | cd openwrt 129 | $GITHUB_WORKSPACE/$DIY_P1_SH 130 | 131 | - name: 更新 & 安装 feeds 132 | run: | 133 | cd openwrt 134 | ./scripts/feeds update -a 135 | ./scripts/feeds install -a 136 | 137 | - name: 加载config & DIY_P2_SH 138 | run: | 139 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE openwrt/.config 140 | chmod +x $DIY_P2_SH 141 | cd openwrt 142 | $GITHUB_WORKSPACE/$DIY_P2_SH 143 | 144 | - name: 设置LAN IP地址(路由器登录地址) 145 | run: | 146 | cd openwrt 147 | SET_IP=${{ github.event.inputs.LAN_IP }} 148 | if [[ $SET_IP =~ ^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ ]]; then 149 | #修改immortalwrt.lan关联IP 150 | sed -i "s/192\.168\.[0-9]*\.[0-9]*/$SET_IP/g" $(find feeds/luci/modules/luci-mod-system -type f -name "flash.js") 151 | #修改默认IP地址 152 | sed -i "s/192\.168\.[0-9]*\.[0-9]*/$SET_IP/g" package/base-files/files/bin/config_generate 153 | echo "Set LAN IP Address: $SET_IP" 154 | else 155 | echo "Invalid IP address, use default." 156 | fi 157 | 158 | - name: 设置WiFi驱动版本 159 | run: | 160 | cd openwrt 161 | wifi_driver=$(echo "${{ github.event.inputs.WIFI_DRIVER }}" | sed -E 's/^(v[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/') 162 | firmware=$(echo "${{ github.event.inputs.WIFI_DRIVER }}" | sed -E 's/.*fw-([0-9]{8}|default).*/\1/g') 163 | if [ "$wifi_driver" == "v7.6.6.1" ]; then 164 | sed -i 's/CONFIG_MTK_MT_WIFI_DRIVER_VERSION_7672=y/CONFIG_MTK_MT_WIFI_DRIVER_VERSION_7661=y/g' .config 165 | fi 166 | if [ "$firmware" == "default" ]; then 167 | sed -i 's/CONFIG_MTK_MT_WIFI_MT7986_20240823=y/CONFIG_MTK_MT_WIFI_MT7986_DEFAULT_FIRMWARE=y/g' .config 168 | else 169 | sed -i 's/CONFIG_MTK_MT_WIFI_MT7986_20240823=y/CONFIG_MTK_MT_WIFI_MT7986_${firmware}=y/g' .config 170 | fi 171 | echo "Use WiFi Driver: $wifi_driver-fw-$firmware" 172 | 173 | - name: 设置交换机驱动 174 | run: | 175 | cd openwrt 176 | if [ ${{ github.event.inputs.SW_DRIVER }} == 'DSA' ]; then 177 | cp $GITHUB_WORKSPACE/JDCloud-AX6000-Baili-hanwckf/mt7986a-dsa-jdcloud-re-cp-03.dts target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-jdcloud-re-cp-03.dts 178 | sed -i '/jdcloud,re-cp-03)/ {n; /eth0/ {s/eth0/lan1 lan2 lan3 lan4/; n; /ucidef_add_switch/ d}}' target/linux/mediatek/mt7986/base-files/etc/board.d/02_network 179 | echo "Use Switch Driver: DSA" 180 | else 181 | echo "Use Switch Driver: GSW" 182 | fi 183 | 184 | - name: 使用luci-app-mtk无线配置 185 | if: github.event.inputs.APP_MTK == 'true' 186 | run: | 187 | cd openwrt 188 | sed -i 's/CONFIG_PACKAGE_luci-app-mtwifi-cfg=y/CONFIG_PACKAGE_luci-app-mtk=y/g' .config 189 | sed -i 's/CONFIG_PACKAGE_luci-i18n-mtwifi-cfg-zh-cn=y/CONFIG_PACKAGE_luci-i18n-mtk-zh-cn=y/g' .config 190 | sed -i 's/CONFIG_PACKAGE_mtwifi-cfg=y/CONFIG_PACKAGE_wifi-profile=y/g' .config 191 | sed -i 's/CONFIG_PACKAGE_lua-cjson=y/CONFIG_WIFI_NORMAL_SETTING=y/g' .config 192 | 193 | - name: 取消编译dockerman 194 | if: github.event.inputs.NO_DOCKERMAN == 'true' 195 | run: | 196 | cd openwrt 197 | sed -i '/CONFIG_PACKAGE_luci-app-dockerman=y/d' .config 198 | 199 | - name: SSH链接管理 200 | uses: P3TERX/ssh2actions@v1.0.0 201 | if: (github.event.inputs.ssh == 'true' && github.event.inputs.ssh != 'false') || contains(github.event.action, 'ssh') 202 | env: 203 | TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} 204 | TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} 205 | 206 | - name: 下载安装包 207 | id: package 208 | run: | 209 | cd openwrt 210 | make defconfig 211 | make download -j$(nproc) 212 | find dl -size -1024c -exec ls -l {} \; 213 | find dl -size -1024c -exec rm -f {} \; 214 | 215 | - name: 编译固件 216 | id: compile 217 | run: | 218 | cd openwrt 219 | echo -e "$(nproc) thread compile" 220 | make -j$(nproc) || make -j1 || make -j1 V=s 221 | grep '^CONFIG_TARGET.*DEVICE.*=y' .config | sed -r 's/.*DEVICE_(.*)=y/\1/' > DEVICE_NAME 222 | [ -s DEVICE_NAME ] && echo "DEVICE_NAME=$(cat DEVICE_NAME)" >> $GITHUB_ENV 223 | grep '^CONFIG_TARGET.*DEVICE.*=y' .config | sed -r 's/.*TARGET_.*_(.*)_DEVICE_.*=y/\1/' > TARGET_NAME 224 | [ -s TARGET_NAME ] && echo "TARGET_NAME=$(cat TARGET_NAME)" >> $GITHUB_ENV 225 | sed -n 's/.*lan) ipad=${ipaddr:-"\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)"} ;;.*/\1/p' package/base-files/files/bin/config_generate | head -n 1 > IP_ADDR 226 | [ -s IP_ADDR ] && echo "IP_ADDR=$(cat IP_ADDR)" >> $GITHUB_ENV 227 | if grep -q 'CONFIG_MTK_MT_WIFI_DRIVER_VERSION_7661=y' .config; then 228 | echo "WIFI_VERSION=-v7661" >> $GITHUB_ENV 229 | else 230 | echo "WIFI_VERSION=-v7672" >> $GITHUB_ENV 231 | fi 232 | if sed -n '/jdcloud,re-cp-03)/,/;;/p' target/linux/mediatek/mt7986/base-files/etc/board.d/02_network | grep -q 'ucidef_add_switch "switch0"'; then 233 | echo "SWITCH=-gsw" >> $GITHUB_ENV 234 | else 235 | echo "SWITCH=-dsa" >> $GITHUB_ENV 236 | fi 237 | if grep -q 'CONFIG_PACKAGE_mtwifi-cfg=y' .config; then 238 | echo "WIFI_INTERFACE=-mtwifi" >> $GITHUB_ENV 239 | else 240 | echo "WIFI_INTERFACE=" >> $GITHUB_ENV 241 | fi 242 | if grep -q 'CONFIG_PACKAGE_luci-app-dockerman=y' .config; then 243 | echo "BUILD_DOCKERMAN=-docker" >> $GITHUB_ENV 244 | else 245 | echo "BUILD_DOCKERMAN=" >> $GITHUB_ENV 246 | fi 247 | echo "FILE_DATE=$(date +"%Y.%m.%d-%H%M")" >> $GITHUB_ENV 248 | echo "status=success" >> $GITHUB_OUTPUT 249 | 250 | - name: 查看磁盘使用情况 251 | if: (!cancelled()) 252 | run: df -hT 253 | 254 | - name: 整理文件并重命名 255 | id: organize 256 | if: env.UPLOAD_FIRMWARE == 'true' && !cancelled() 257 | run: | 258 | cd openwrt/bin/targets/*/* 259 | rm -rf packages 260 | sudo -E apt-get -qq install rename 261 | rename 's/.*${{ env.DEVICE_NAME }}/${{ env.FILE_DATE }}-${{ env.OPENWRT_NAME }}-${{ env.DEVICE_NAME }}${{ env.WIFI_VERSION }}${{ env.SWITCH }}${{ env.BUILD_DOCKERMAN }}/' * 262 | echo "FIRMWARE=$PWD" >> $GITHUB_ENV 263 | echo "status=success" >> $GITHUB_OUTPUT 264 | 265 | - name: 打包上传固件到Actions Artifacts 266 | uses: actions/upload-artifact@main 267 | if: steps.organize.outputs.status == 'success' && !cancelled() 268 | with: 269 | name: ${{ env.FILE_DATE }}-${{ env.OPENWRT_NAME }}-${{ env.DEVICE_NAME }}${{ env.WIFI_VERSION }}${{ env.SWITCH }}${{ env.BUILD_DOCKERMAN }} 270 | path: ${{ env.FIRMWARE }} 271 | 272 | - name: 生成固件Release标签 273 | id: tag 274 | if: env.UPLOAD_RELEASE == 'true' && !cancelled() 275 | run: | 276 | touch release.txt 277 | echo "- 使用源码:${{ env.REPO_URL }}" >> release.txt 278 | echo "- 使用分支:${{ env.REPO_BRANCH }}" >> release.txt 279 | echo "- 登录地址:${{ env.IP_ADDR }}" >> release.txt 280 | echo "- 使用WiFi驱动${{ github.event.inputs.WIFI_DRIVER }}" >> release.txt 281 | if [[ "${{ env.SWITCH }}" == '-gsw' ]]; then 282 | echo "- 使用GSW交换机驱动(非DSA)" >> release.txt 283 | else 284 | echo "- 使用DSA交换机驱动" >> release.txt 285 | fi 286 | if [[ "${{ env.WIFI_INTERFACE }}" == '-mtwifi' ]]; then 287 | echo "- 使用hanwckf mtwifi-cfg原生luci无线配置工具" >> release.txt 288 | else 289 | echo "- 使用mtk-sdk luci-app-mtk无线配置工具" >> release.txt 290 | fi 291 | if [[ "${{ env.BUILD_DOCKERMAN }}" == '-docker' ]]; then 292 | echo "- 已编译luci-app-dockerman" >> release.txt 293 | else 294 | echo "- 未编译luci-app-dockerman" >> release.txt 295 | fi 296 | echo "release_tag=${{ env.FILE_DATE }}-${{ env.OPENWRT_NAME }}-${{ env.DEVICE_NAME }}${{ env.WIFI_VERSION }}${{ env.SWITCH }}${{ env.BUILD_DOCKERMAN }}" >> $GITHUB_OUTPUT 297 | echo "status=success" >> $GITHUB_OUTPUT 298 | 299 | - name: 发布固件至Release 300 | uses: softprops/action-gh-release@v2.1.0 301 | if: steps.tag.outputs.status == 'success' && !cancelled() 302 | env: 303 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 304 | with: 305 | files: ${{ env.FIRMWARE }}/* 306 | name: ${{ env.FILE_DATE }}-${{ env.OPENWRT_NAME }}-${{ env.DEVICE_NAME }}${{ env.WIFI_VERSION }}${{ env.SWITCH }}${{ env.BUILD_DOCKERMAN }} 307 | tag_name: ${{ steps.tag.outputs.release_tag }} 308 | body_path: release.txt 309 | -------------------------------------------------------------------------------- /.github/workflows/JDCloud-AX6000-Baili-immortalwrt.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2019-2020 P3TERX 3 | # 4 | # This is free software, licensed under the MIT License. 5 | # See /LICENSE for more information. 6 | # 7 | # https://github.com/P3TERX/Actions-OpenWrt 8 | # Description: Build OpenWrt using GitHub Actions 9 | # 10 | ###############手动修改############## 11 | name: JDCloud-AX6000-Baili-immortalwrt 12 | 13 | on: 14 | repository_dispatch: 15 | workflow_dispatch: 16 | inputs: 17 | LAN_IP: 18 | description: 'Set LAN IP Address' 19 | required: true 20 | default: '192.168.1.1' 21 | NO_DOCKERMAN: 22 | description: 'Not build luci-app-dockerman' 23 | required: true 24 | default: false 25 | type: boolean 26 | ssh: 27 | description: 'SSH connection to Actions' 28 | required: false 29 | default: 'false' 30 | # schedule: 31 | # - cron: 0 16 * * * 32 | 33 | env: 34 | ###############手动修改############## 35 | OPENWRT_NAME: immortalwrt 36 | REPO_URL: https://github.com/immortalwrt/immortalwrt 37 | REPO_BRANCH: master 38 | FEEDS_CONF: JDCloud-AX6000-Baili-immortalwrt/feeds.conf.default 39 | CONFIG_FILE: JDCloud-AX6000-Baili-immortalwrt/immortalwrt.config 40 | DIY_P1_SH: JDCloud-AX6000-Baili-immortalwrt/diy-part1.sh 41 | DIY_P2_SH: JDCloud-AX6000-Baili-immortalwrt/diy-part2.sh 42 | SSH_ACTIONS: false 43 | UPLOAD_FIRMWARE: true 44 | UPLOAD_RELEASE: true 45 | TZ: Asia/Shanghai 46 | 47 | jobs: 48 | build: 49 | runs-on: ubuntu-20.04 50 | 51 | permissions: 52 | contents: write 53 | 54 | steps: 55 | - name: 检查项目分支 56 | uses: actions/checkout@main 57 | 58 | - name: 初始化编译环境 59 | env: 60 | DEBIAN_FRONTEND: noninteractive 61 | run: | 62 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 63 | sudo -E apt-get -qq update 64 | sudo -E apt-get -qq install $(curl -fsSL git.io/depends-ubuntu-2004) 65 | sudo -E apt-get -qq autoremove --purge 66 | sudo -E apt-get -qq clean 67 | sudo timedatectl set-timezone "$TZ" 68 | sudo mkdir -p /workdir 69 | sudo chown $USER:$GROUPS /workdir 70 | 71 | - name: 清理磁盘空间(Ubuntu) 72 | uses: jlumbroso/free-disk-space@main 73 | with: 74 | # this might remove tools that are actually needed, 75 | # when set to "true" but frees about 6 GB 76 | tool-cache: true 77 | 78 | # all of these default to true, but feel free to set to 79 | # "false" if necessary for your workflow 80 | android: true 81 | dotnet: true 82 | haskell: true 83 | large-packages: true 84 | swap-storage: true 85 | 86 | - name: 下载固件源码 87 | working-directory: /workdir 88 | run: | 89 | df -hT $PWD 90 | git clone $REPO_URL -b $REPO_BRANCH openwrt 91 | ln -sf /workdir/openwrt $GITHUB_WORKSPACE/openwrt 92 | 93 | - name: 加载feeds.conf.default & DIY_P1_SH 94 | run: | 95 | [ -e $FEEDS_CONF ] && mv $FEEDS_CONF openwrt/feeds.conf.default 96 | chmod +x $DIY_P1_SH 97 | cd openwrt 98 | $GITHUB_WORKSPACE/$DIY_P1_SH 99 | 100 | - name: 更新 & 安装 feeds 101 | run: | 102 | cd openwrt 103 | ./scripts/feeds update -a 104 | ./scripts/feeds install -a 105 | 106 | - name: 加载config & DIY_P2_SH 107 | run: | 108 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE openwrt/.config 109 | chmod +x $DIY_P2_SH 110 | cd openwrt 111 | $GITHUB_WORKSPACE/$DIY_P2_SH 112 | 113 | - name: 设置LAN IP地址(路由器登录地址) 114 | run: | 115 | cd openwrt 116 | SET_IP=${{ github.event.inputs.LAN_IP }} 117 | if [[ $SET_IP =~ ^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ ]]; then 118 | #修改immortalwrt.lan关联IP 119 | sed -i "s/192\.168\.[0-9]*\.[0-9]*/$SET_IP/g" $(find feeds/luci/modules/luci-mod-system -type f -name "flash.js") 120 | #修改默认IP地址 121 | sed -i "s/192\.168\.[0-9]*\.[0-9]*/$SET_IP/g" package/base-files/files/bin/config_generate 122 | echo "Set LAN IP Address: $SET_IP" 123 | else 124 | echo "Invalid IP address, use default." 125 | fi 126 | 127 | - name: 取消编译dockerman 128 | if: github.event.inputs.NO_DOCKERMAN == 'true' 129 | run: | 130 | cd openwrt 131 | sed -i '/CONFIG_PACKAGE_luci-app-dockerman=y/d' .config 132 | 133 | - name: SSH链接管理 134 | uses: P3TERX/ssh2actions@v1.0.0 135 | if: (github.event.inputs.ssh == 'true' && github.event.inputs.ssh != 'false') || contains(github.event.action, 'ssh') 136 | env: 137 | TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} 138 | TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} 139 | 140 | - name: 下载安装包 141 | id: package 142 | run: | 143 | cd openwrt 144 | make defconfig 145 | make download -j$(nproc) 146 | find dl -size -1024c -exec ls -l {} \; 147 | find dl -size -1024c -exec rm -f {} \; 148 | 149 | - name: 编译固件 150 | id: compile 151 | run: | 152 | cd openwrt 153 | echo -e "$(nproc) thread compile" 154 | make -j$(nproc) || make -j1 || make -j1 V=s 155 | grep '^CONFIG_TARGET.*DEVICE.*=y' .config | sed -r 's/.*DEVICE_(.*)=y/\1/' > DEVICE_NAME 156 | [ -s DEVICE_NAME ] && echo "DEVICE_NAME=$(cat DEVICE_NAME)" >> $GITHUB_ENV 157 | grep '^CONFIG_TARGET.*DEVICE.*=y' .config | sed -r 's/.*TARGET_.*_(.*)_DEVICE_.*=y/\1/' > TARGET_NAME 158 | [ -s TARGET_NAME ] && echo "TARGET_NAME=$(cat TARGET_NAME)" >> $GITHUB_ENV 159 | sed -n 's/.*lan) ipad=${ipaddr:-"\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)"} ;;.*/\1/p' package/base-files/files/bin/config_generate | head -n 1 > IP_ADDR 160 | [ -s IP_ADDR ] && echo "IP_ADDR=$(cat IP_ADDR)" >> $GITHUB_ENV 161 | if grep -q 'CONFIG_PACKAGE_luci-app-dockerman=y' .config; then 162 | echo "BUILD_DOCKERMAN=-docker" >> $GITHUB_ENV 163 | else 164 | echo "BUILD_DOCKERMAN=" >> $GITHUB_ENV 165 | fi 166 | echo "FILE_DATE=$(date +"%Y.%m.%d-%H%M")" >> $GITHUB_ENV 167 | echo "status=success" >> $GITHUB_OUTPUT 168 | 169 | - name: 查看磁盘使用情况 170 | if: (!cancelled()) 171 | run: df -hT 172 | 173 | - name: 整理文件并重命名 174 | id: organize 175 | if: env.UPLOAD_FIRMWARE == 'true' && !cancelled() 176 | run: | 177 | cd openwrt/bin/targets/*/* 178 | rm -rf packages 179 | find ./ -iregex ".*\(bl31-uboot.fip\|gpt.bin\|preloader.bin\|bl2.bin\)$" -exec rm -rf {} + 180 | sudo -E apt-get -qq install rename 181 | rename 's/.*${{ env.DEVICE_NAME }}/${{ env.FILE_DATE }}-${{ env.OPENWRT_NAME }}-${{ env.DEVICE_NAME }}${{ env.BUILD_DOCKERMAN }}/' * 182 | echo "FIRMWARE=$PWD" >> $GITHUB_ENV 183 | echo "status=success" >> $GITHUB_OUTPUT 184 | 185 | - name: 打包上传固件到Actions Artifacts 186 | uses: actions/upload-artifact@main 187 | if: steps.organize.outputs.status == 'success' && !cancelled() 188 | with: 189 | name: ${{ env.FILE_DATE }}-${{ env.OPENWRT_NAME }}-${{ env.DEVICE_NAME }}${{ env.BUILD_DOCKERMAN }} 190 | path: ${{ env.FIRMWARE }} 191 | 192 | - name: 生成固件Release标签 193 | id: tag 194 | if: env.UPLOAD_RELEASE == 'true' && !cancelled() 195 | run: | 196 | touch release.txt 197 | echo "- 使用源码:${{ env.REPO_URL }}" >> release.txt 198 | echo "- 使用分支:${{ env.REPO_BRANCH }}" >> release.txt 199 | echo "- 登录地址:${{ env.IP_ADDR }}" >> release.txt 200 | if [[ "${{ env.BUILD_DOCKERMAN }}" == '-docker' ]]; then 201 | echo "- 已编译luci-app-dockerman" >> release.txt 202 | else 203 | echo "- 未编译luci-app-dockerman" >> release.txt 204 | fi 205 | echo "release_tag=${{ env.FILE_DATE }}-${{ env.OPENWRT_NAME }}-${{ env.DEVICE_NAME }}${{ env.BUILD_DOCKERMAN }}" >> $GITHUB_OUTPUT 206 | echo "status=success" >> $GITHUB_OUTPUT 207 | 208 | - name: 发布固件至Release 209 | uses: softprops/action-gh-release@v2.1.0 210 | if: steps.tag.outputs.status == 'success' && !cancelled() 211 | env: 212 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 213 | with: 214 | files: ${{ env.FIRMWARE }}/* 215 | name: ${{ env.FILE_DATE }}-${{ env.OPENWRT_NAME }}-${{ env.DEVICE_NAME }}${{ env.BUILD_DOCKERMAN }} 216 | tag_name: ${{ steps.tag.outputs.release_tag }} 217 | body_path: release.txt 218 | -------------------------------------------------------------------------------- /.github/workflows/RAX3000M-eMMC_XR30-eMMC-hanwckf.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2019-2020 P3TERX 3 | # 4 | # This is free software, licensed under the MIT License. 5 | # See /LICENSE for more information. 6 | # 7 | # https://github.com/P3TERX/Actions-OpenWrt 8 | # Description: Build OpenWrt using GitHub Actions 9 | # 10 | ###############手动修改############## 11 | name: RAX3000M-eMMC_XR30-eMMC-hanwckf 12 | 13 | on: 14 | repository_dispatch: 15 | workflow_dispatch: 16 | inputs: 17 | LAN_IP: 18 | description: 'Set LAN IP Address' 19 | required: true 20 | default: '192.168.1.1' 21 | WIFI_DRIVER: 22 | description: 'Choose WiFi Driver' 23 | required: true 24 | default: 'v7.6.7.2-fw-20240823(recommend)' 25 | type: choice 26 | options: 27 | - v7.6.7.2-fw-20240823(recommend) 28 | - v7.6.6.1-fw-20230306(recommend) 29 | - v7.6.7.2-fw-default 30 | - v7.6.7.2-fw-20230306 31 | - v7.6.7.2-fw-20230330 32 | - v7.6.7.2-fw-20230411 33 | - v7.6.7.2-fw-20230717 34 | - v7.6.7.2-fw-20231024 35 | - v7.6.6.1-fw-default 36 | - v7.6.6.1-fw-20230330 37 | - v7.6.6.1-fw-20230411 38 | - v7.6.6.1-fw-20230717 39 | - v7.6.6.1-fw-20231024 40 | - v7.6.6.1-fw-20240823 41 | EEPROM: 42 | description: 'Use nx30pro eeprom and fixed WiFi MAC address' 43 | required: true 44 | default: true 45 | type: boolean 46 | APP_MTK: 47 | description: 'Use luci-app-mtk wifi config' 48 | required: true 49 | default: false 50 | type: boolean 51 | NO_DOCKERMAN: 52 | description: 'Not build luci-app-dockerman' 53 | required: true 54 | default: false 55 | type: boolean 56 | ssh: 57 | description: 'SSH connection to Actions' 58 | required: false 59 | default: 'false' 60 | # schedule: 61 | # - cron: 0 16 * * * 62 | 63 | env: 64 | ###############手动修改############## 65 | ##因为是两个设备,所以手动设置上传时候的打包名称和tag名称UPLOAD_TAG_NAME 66 | OPENWRT_NAME: hanwckf 67 | UPLOAD_TAG_NAME: rax3000m-emmc_xr30-emmc 68 | REPO_URL: https://github.com/hanwckf/immortalwrt-mt798x 69 | REPO_BRANCH: openwrt-21.02 70 | FEEDS_CONF: RAX3000M-eMMC_XR30-eMMC-hanwckf/feeds.conf.default 71 | RAX3000M_EMMC_DTS_FILE: target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-cmcc-rax3000m-emmc.dts 72 | CONFIG_FILE: RAX3000M-eMMC_XR30-eMMC-hanwckf/.mtwifi-cfg.config 73 | DIY_P1_SH: RAX3000M-eMMC_XR30-eMMC-hanwckf/diy-part1.sh 74 | DIY_P2_SH: RAX3000M-eMMC_XR30-eMMC-hanwckf/diy-part2.sh 75 | SSH_ACTIONS: false 76 | UPLOAD_FIRMWARE: true 77 | UPLOAD_RELEASE: true 78 | TZ: Asia/Shanghai 79 | 80 | jobs: 81 | build: 82 | runs-on: ubuntu-20.04 83 | 84 | permissions: 85 | contents: write 86 | 87 | steps: 88 | - name: 检查项目分支 89 | uses: actions/checkout@main 90 | 91 | - name: 初始化编译环境 92 | env: 93 | DEBIAN_FRONTEND: noninteractive 94 | run: | 95 | sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc 96 | sudo -E apt-get -qq update 97 | sudo -E apt-get -qq install $(curl -fsSL git.io/depends-ubuntu-2004) 98 | sudo -E apt-get -qq autoremove --purge 99 | sudo -E apt-get -qq clean 100 | sudo timedatectl set-timezone "$TZ" 101 | sudo mkdir -p /workdir 102 | sudo chown $USER:$GROUPS /workdir 103 | 104 | - name: 清理磁盘空间(Ubuntu) 105 | uses: jlumbroso/free-disk-space@main 106 | with: 107 | # this might remove tools that are actually needed, 108 | # when set to "true" but frees about 6 GB 109 | tool-cache: true 110 | 111 | # all of these default to true, but feel free to set to 112 | # "false" if necessary for your workflow 113 | android: false 114 | dotnet: false 115 | haskell: false 116 | large-packages: false 117 | swap-storage: false 118 | 119 | - name: 下载固件源码 120 | working-directory: /workdir 121 | run: | 122 | df -hT $PWD 123 | git clone $REPO_URL -b $REPO_BRANCH openwrt 124 | ln -sf /workdir/openwrt $GITHUB_WORKSPACE/openwrt 125 | 126 | - name: 加载feeds.conf.default & DIY_P1_SH 127 | run: | 128 | [ -e $FEEDS_CONF ] && mv $FEEDS_CONF openwrt/feeds.conf.default 129 | chmod +x $DIY_P1_SH 130 | cd openwrt 131 | $GITHUB_WORKSPACE/$DIY_P1_SH 132 | 133 | - name: 更新 & 安装 feeds 134 | run: | 135 | cd openwrt 136 | ./scripts/feeds update -a 137 | ./scripts/feeds install -a 138 | 139 | - name: 加载config & DIY_P2_SH 140 | run: | 141 | [ -e $CONFIG_FILE ] && mv $CONFIG_FILE openwrt/.config 142 | chmod +x $DIY_P2_SH 143 | cd openwrt 144 | $GITHUB_WORKSPACE/$DIY_P2_SH 145 | 146 | - name: 设置RAX3000M-eMMC的eMMC使用highspeed 147 | run: | 148 | cd openwrt 149 | if ! grep -q 'cap-mmc-highspeed' "${{ env.RAX3000M_EMMC_DTS_FILE }}"; then 150 | sed -i -e '/bus-width = <8>;/ a\ cap-mmc-highspeed;' "${{ env.RAX3000M_EMMC_DTS_FILE }}" 151 | fi 152 | 153 | - name: 设置LAN IP地址(路由器登录地址) 154 | run: | 155 | cd openwrt 156 | SET_IP=${{ github.event.inputs.LAN_IP }} 157 | if [[ $SET_IP =~ ^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ ]]; then 158 | #修改immortalwrt.lan关联IP 159 | sed -i "s/192\.168\.[0-9]*\.[0-9]*/$SET_IP/g" $(find feeds/luci/modules/luci-mod-system -type f -name "flash.js") 160 | #修改默认IP地址 161 | sed -i "s/192\.168\.[0-9]*\.[0-9]*/$SET_IP/g" package/base-files/files/bin/config_generate 162 | echo "Set LAN IP Address: $SET_IP" 163 | else 164 | echo "Invalid IP address, use default." 165 | fi 166 | 167 | - name: 设置WiFi驱动版本 168 | run: | 169 | cd openwrt 170 | wifi_driver=$(echo "${{ github.event.inputs.WIFI_DRIVER }}" | sed -E 's/^(v[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/') 171 | firmware=$(echo "${{ github.event.inputs.WIFI_DRIVER }}" | sed -E 's/.*fw-([0-9]{8}|default).*/\1/g') 172 | if [ "$wifi_driver" == "v7.6.6.1" ]; then 173 | sed -i 's/CONFIG_MTK_MT_WIFI_DRIVER_VERSION_7672=y/CONFIG_MTK_MT_WIFI_DRIVER_VERSION_7661=y/g' .config 174 | fi 175 | if [ "$firmware" == "default" ]; then 176 | sed -i 's/CONFIG_MTK_MT_WIFI_MT7981_20240823=y/CONFIG_MTK_MT_WIFI_MT7981_DEFAULT_FIRMWARE=y/g' .config 177 | else 178 | sed -i 's/CONFIG_MTK_MT_WIFI_MT7981_20240823=y/CONFIG_MTK_MT_WIFI_MT7981_${firmware}=y/g' .config 179 | fi 180 | echo "Use WiFi Driver: $wifi_driver-fw-$firmware" 181 | 182 | - name: 使用nx30pro的高功率eeprom并固定WiFi MAC地址 183 | if: github.event.inputs.EEPROM == 'true' 184 | run: | 185 | cd openwrt 186 | wifi_driver=$(echo "${{ github.event.inputs.WIFI_DRIVER }}" | sed -E 's/^(v[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/') 187 | if [ "$wifi_driver" == "v7.6.6.1" ]; then 188 | cp $GITHUB_WORKSPACE/RAX3000M-eMMC_XR30-eMMC-hanwckf/mt79xx_20220907-8b55f5_eeprom.tar.xz dl/mt79xx_20220907-8b55f5.tar.xz 189 | else 190 | cp $GITHUB_WORKSPACE/RAX3000M-eMMC_XR30-eMMC-hanwckf/mt79xx_20231229-4012a0_eeprom.tar.xz dl/mt79xx_20231229-4012a0.tar.xz 191 | fi 192 | ## 创建一个辅助文件。文件内容是写入MAC地址到dat文件,固定wifi MAC地址 193 | echo -e "\t\tlocal wifi0_mac=\"\$(mmc_get_mac_binary factory 0x04)\" 194 | \t\tsed -i \"/^MacAddress=.*/ {s/.*/MacAddress=\$wifi0_mac/;b;}; \\\$aMacAddress=\$wifi0_mac\" /etc/wireless/mediatek/mt7981.dbdc.b0.dat 195 | \t\tlocal wifi1_mac=\"\$(macaddr_setbit_la \$wifi0_mac)\" 196 | \t\tsed -i \"/^MacAddress=.*/ {s/.*/MacAddress=\$wifi1_mac/;b;}; \\\$aMacAddress=\$wifi1_mac\" /etc/wireless/mediatek/mt7981.dbdc.b1.dat" > temp_insert.txt 197 | ## 将文本内容写入02_network 198 | sed -i '/mediatek_setup_macs()/,/\};/ {/cmcc,rax3000m-emmc)/ {n;n;n;r temp_insert.txt 199 | }}' target/linux/mediatek/mt7981/base-files/etc/board.d/02_network 200 | 201 | - name: 使用luci-app-mtk无线配置 202 | if: github.event.inputs.APP_MTK == 'true' 203 | run: | 204 | cd openwrt 205 | sed -i 's/CONFIG_PACKAGE_luci-app-mtwifi-cfg=y/CONFIG_PACKAGE_luci-app-mtk=y/g' .config 206 | sed -i 's/CONFIG_PACKAGE_luci-i18n-mtwifi-cfg-zh-cn=y/CONFIG_PACKAGE_luci-i18n-mtk-zh-cn=y/g' .config 207 | sed -i 's/CONFIG_PACKAGE_mtwifi-cfg=y/CONFIG_PACKAGE_wifi-profile=y/g' .config 208 | sed -i 's/CONFIG_PACKAGE_lua-cjson=y/CONFIG_WIFI_NORMAL_SETTING=y/g' .config 209 | 210 | - name: 取消编译dockerman 211 | if: github.event.inputs.NO_DOCKERMAN == 'true' 212 | run: | 213 | cd openwrt 214 | sed -i '/CONFIG_PACKAGE_luci-app-dockerman=y/d' .config 215 | 216 | - name: SSH链接管理 217 | uses: P3TERX/ssh2actions@v1.0.0 218 | if: (github.event.inputs.ssh == 'true' && github.event.inputs.ssh != 'false') || contains(github.event.action, 'ssh') 219 | env: 220 | TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} 221 | TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} 222 | 223 | - name: 下载安装包 224 | id: package 225 | run: | 226 | cd openwrt 227 | make defconfig 228 | make download -j$(nproc) 229 | find dl -size -1024c -exec ls -l {} \; 230 | find dl -size -1024c -exec rm -f {} \; 231 | 232 | - name: 编译固件 233 | id: compile 234 | run: | 235 | cd openwrt 236 | echo -e "$(nproc) thread compile" 237 | make -j$(nproc) || make -j1 || make -j1 V=s 238 | 239 | sed -n 's/.*lan) ipad=${ipaddr:-"\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)"} ;;.*/\1/p' package/base-files/files/bin/config_generate | head -n 1 > IP_ADDR 240 | [ -s IP_ADDR ] && echo "IP_ADDR=$(cat IP_ADDR)" >> $GITHUB_ENV 241 | if grep -q 'CONFIG_MTK_MT_WIFI_DRIVER_VERSION_7661=y' .config; then 242 | echo "WIFI_VERSION=-v7661" >> $GITHUB_ENV 243 | else 244 | echo "WIFI_VERSION=-v7672" >> $GITHUB_ENV 245 | fi 246 | if [ ${{ github.event.inputs.EEPROM }} == 'true' ]; then 247 | echo "EEPROM=-eeprom" >> $GITHUB_ENV 248 | else 249 | echo "EEPROM=" >> $GITHUB_ENV 250 | fi 251 | if grep -q 'CONFIG_PACKAGE_mtwifi-cfg=y' .config; then 252 | echo "WIFI_INTERFACE=-mtwifi" >> $GITHUB_ENV 253 | else 254 | echo "WIFI_INTERFACE=" >> $GITHUB_ENV 255 | fi 256 | if grep -q 'CONFIG_PACKAGE_luci-app-dockerman=y' .config; then 257 | echo "BUILD_DOCKERMAN=-docker" >> $GITHUB_ENV 258 | else 259 | echo "BUILD_DOCKERMAN=" >> $GITHUB_ENV 260 | fi 261 | echo "FILE_DATE=$(date +"%Y.%m.%d-%H%M")" >> $GITHUB_ENV 262 | echo "status=success" >> $GITHUB_OUTPUT 263 | 264 | - name: 查看磁盘使用情况 265 | if: (!cancelled()) 266 | run: df -hT 267 | 268 | - name: 整理文件并重命名 269 | id: organize 270 | if: env.UPLOAD_FIRMWARE == 'true' && !cancelled() 271 | run: | 272 | mapfile -t devices < <(grep '^CONFIG_TARGET_DEVICE.*=y' openwrt/.config | sed -r 's/.*DEVICE_(.*)=y/\1/') 273 | cd openwrt/bin/targets/*/* 274 | rm -rf packages 275 | sudo -E apt-get -qq install rename 276 | for val in "${devices[@]}"; do 277 | rename "s/.*${val}/${{ env.FILE_DATE }}-${{ env.OPENWRT_NAME }}-${val}${{ env.WIFI_VERSION }}${{ env.EEPROM }}${{ env.BUILD_DOCKERMAN }}/" * 278 | echo "$val" 279 | done 280 | echo "FIRMWARE=$PWD" >> $GITHUB_ENV 281 | echo "status=success" >> $GITHUB_OUTPUT 282 | 283 | - name: 打包上传固件到Actions Artifacts 284 | uses: actions/upload-artifact@main 285 | if: steps.organize.outputs.status == 'success' && !cancelled() 286 | with: 287 | name: ${{ env.FILE_DATE }}-${{ env.OPENWRT_NAME }}-${{ env.UPLOAD_TAG_NAME }}${{ env.WIFI_VERSION }}${{ env.EEPROM }}${{ env.BUILD_DOCKERMAN }} 288 | path: ${{ env.FIRMWARE }} 289 | 290 | - name: 生成固件Release标签 291 | id: tag 292 | if: env.UPLOAD_RELEASE == 'true' && !cancelled() 293 | run: | 294 | touch release.txt 295 | echo "- 使用源码:${{ env.REPO_URL }}" >> release.txt 296 | echo "- 使用分支:${{ env.REPO_BRANCH }}" >> release.txt 297 | echo "- 登录地址:${{ env.IP_ADDR }}" >> release.txt 298 | echo "- 使用WiFi驱动${{ github.event.inputs.WIFI_DRIVER }}" >> release.txt 299 | if [[ "${{ env.EEPROM }}" == '-eeprom' ]]; then 300 | echo "- 使用nx30pro高功率eeprom并固定WiFi MAC地址" >> release.txt 301 | else 302 | echo "- 未使用nx30pro高功率eeprom未固定WiFi MAC地址" >> release.txt 303 | fi 304 | if [[ "${{ env.WIFI_INTERFACE }}" == '-mtwifi' ]]; then 305 | echo "- 使用hanwckf mtwifi-cfg原生luci无线配置工具" >> release.txt 306 | else 307 | echo "- 使用mtk-sdk luci-app-mtk无线配置工具" >> release.txt 308 | fi 309 | if [[ "${{ env.BUILD_DOCKERMAN }}" == '-docker' ]]; then 310 | echo "- 已编译luci-app-dockerman" >> release.txt 311 | else 312 | echo "- 未编译luci-app-dockerman" >> release.txt 313 | fi 314 | echo "release_tag=${{ env.FILE_DATE }}-${{ env.OPENWRT_NAME }}-${{ env.UPLOAD_TAG_NAME }}${{ env.WIFI_VERSION }}${{ env.EEPROM }}${{ env.BUILD_DOCKERMAN }}" >> $GITHUB_OUTPUT 315 | echo "status=success" >> $GITHUB_OUTPUT 316 | 317 | - name: 发布固件至Release 318 | uses: softprops/action-gh-release@v2.1.0 319 | if: steps.tag.outputs.status == 'success' && !cancelled() 320 | env: 321 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 322 | with: 323 | files: ${{ env.FIRMWARE }}/* 324 | name: ${{ env.FILE_DATE }}-${{ env.OPENWRT_NAME }}-${{ env.UPLOAD_TAG_NAME }}${{ env.WIFI_VERSION }}${{ env.EEPROM }}${{ env.BUILD_DOCKERMAN }} 325 | tag_name: ${{ steps.tag.outputs.release_tag }} 326 | body_path: release.txt 327 | -------------------------------------------------------------------------------- /.github/workflows/delete-older-releases.yml: -------------------------------------------------------------------------------- 1 | name: delete-older-releases 2 | on: 3 | workflow_dispatch: 4 | # schedule: 5 | # - cron: 0 16 * * * 6 | 7 | jobs: 8 | del_runs: 9 | runs-on: ubuntu-20.04 10 | steps: 11 | 12 | - name: 删除工作流 13 | uses: GitRML/delete-workflow-runs@main 14 | with: 15 | retain_days: 5 16 | keep_minimum_runs: 0 17 | 18 | - name: 删除旧的Releases 19 | uses: dev-drprasad/delete-older-releases@v0.2.0 20 | with: 21 | keep_latest: 5 22 | delete_tags: true 23 | env: 24 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 25 | -------------------------------------------------------------------------------- /JDCloud-AX1800-Pro_AX6600/.config: -------------------------------------------------------------------------------- 1 | CONFIG_TARGET_qualcommax=y 2 | CONFIG_TARGET_qualcommax_ipq60xx=y 3 | CONFIG_TARGET_MULTI_PROFILE=y 4 | CONFIG_TARGET_DEVICE_qualcommax_ipq60xx_DEVICE_jdcloud_ax1800-pro=y 5 | CONFIG_TARGET_DEVICE_PACKAGES_qualcommax_ipq60xx_DEVICE_jdcloud_ax1800-pro="ipq-wifi-jdcloud_ax1800-pro" 6 | CONFIG_TARGET_DEVICE_qualcommax_ipq60xx_DEVICE_jdcloud_ax6600=y 7 | CONFIG_TARGET_DEVICE_PACKAGES_qualcommax_ipq60xx_DEVICE_jdcloud_ax6600="ipq-wifi-jdcloud_ax6600 ath11k-firmware-qcn9074 kmod-ath11k-pci" 8 | CONFIG_TARGET_PER_DEVICE_ROOTFS=y 9 | 10 | ## 主题 11 | CONFIG_PACKAGE_luci-theme-bootstrap=y 12 | CONFIG_PACKAGE_luci-theme-design=y 13 | CONFIG_PACKAGE_luci-app-design-config=y 14 | 15 | ## 默认已勾选的插件 16 | CONFIG_PACKAGE_luci-app-accesscontrol=y 17 | CONFIG_PACKAGE_luci-app-arpbind=y 18 | CONFIG_PACKAGE_luci-app-autoreboot=y 19 | CONFIG_PACKAGE_luci-app-ddns=y 20 | CONFIG_PACKAGE_luci-app-filetransfer=y 21 | CONFIG_PACKAGE_luci-app-firewall=y 22 | CONFIG_PACKAGE_luci-app-nlbwmon=y 23 | CONFIG_PACKAGE_luci-app-turboacc=y 24 | CONFIG_PACKAGE_luci-app-upnp=y 25 | CONFIG_PACKAGE_luci-app-vlmcsd=y 26 | CONFIG_PACKAGE_luci-app-vsftpd=y 27 | CONFIG_PACKAGE_luci-app-wol=y 28 | 29 | ## 自己添加的插件 30 | CONFIG_PACKAGE_luci-app-adblock=y 31 | CONFIG_PACKAGE_luci-app-cpufreq=y 32 | CONFIG_PACKAGE_luci-app-ttyd=y 33 | CONFIG_PACKAGE_luci-app-diskman=y 34 | CONFIG_PACKAGE_luci-app-dockerman=y 35 | CONFIG_PACKAGE_luci-app-ssr-plus=y 36 | CONFIG_PACKAGE_luci-app-openclash=y 37 | CONFIG_PACKAGE_luci-app-usb-printer=y 38 | ##编译luci-app-samba时无线不能用 换samba4 39 | CONFIG_PACKAGE_luci-app-samba4=y 40 | CONFIG_PACKAGE_samba4-utils=y 41 | #CONFIG_PACKAGE_autosamba=y 42 | ##没加luci-app-ipsec-server因为和qca-nss-ecm冲突 43 | CONFIG_PACKAGE_luci-app-wireguard=y 44 | CONFIG_PACKAGE_luci-app-openvpn-server=y 45 | CONFIG_PACKAGE_luci-app-zerotier=y 46 | 47 | CONFIG_PACKAGE_bash=y 48 | CONFIG_PACKAGE_vim-full=y 49 | CONFIG_PACKAGE_zsh=y 50 | CONFIG_PACKAGE_htop=y 51 | CONFIG_PACKAGE_iperf3=y 52 | CONFIG_PACKAGE_ip-full=y 53 | CONFIG_PACKAGE_ipv6helper=y 54 | CONFIG_PACKAGE_ip6tables=y 55 | CONFIG_PACKAGE_ip6tables-extra=y 56 | CONFIG_PACKAGE_ip6tables-mod-nat=y 57 | CONFIG_PACKAGE_luci-compat=y 58 | CONFIG_PACKAGE_luci-lib-ipkg=y 59 | 60 | ## eMMC及挂载相关 61 | CONFIG_PACKAGE_automount=y 62 | CONFIG_PACKAGE_mmc-utils=y 63 | CONFIG_PACKAGE_f2fsck=y 64 | CONFIG_PACKAGE_f2fs-tools=y 65 | CONFIG_PACKAGE_mkf2fs=y 66 | CONFIG_PACKAGE_kmod-fs-f2fs=y 67 | CONFIG_PACKAGE_kmod-fs-ext4=y 68 | CONFIG_PACKAGE_kmod-mmc=y 69 | CONFIG_PACKAGE_lsblk=y 70 | CONFIG_PACKAGE_fdisk=y 71 | CONFIG_PACKAGE_gdisk=y 72 | CONFIG_PACKAGE_sgdisk=y 73 | CONFIG_PACKAGE_blkid=y 74 | CONFIG_PACKAGE_blockdev=y 75 | CONFIG_PACKAGE_losetup=y 76 | CONFIG_PACKAGE_e2fsprogs=y 77 | 78 | ## USB3相关 79 | CONFIG_PACKAGE_kmod-fuse=y 80 | CONFIG_PACKAGE_kmod-scsi-core=y 81 | CONFIG_PACKAGE_kmod-usb-dwc2=y 82 | CONFIG_PACKAGE_kmod-usb-dwc2-pci=y 83 | CONFIG_PACKAGE_kmod-usb-ehci=y 84 | CONFIG_PACKAGE_kmod-usb-ohci=y 85 | CONFIG_PACKAGE_kmod-usb-ohci-pci=y 86 | CONFIG_PACKAGE_kmod-usb-phy-nop=y 87 | CONFIG_PACKAGE_kmod-usb-roles=y 88 | CONFIG_PACKAGE_kmod-usb-storage=y 89 | CONFIG_PACKAGE_kmod-usb-storage-extras=y 90 | CONFIG_PACKAGE_kmod-usb-storage-uas=y 91 | CONFIG_PACKAGE_kmod-usb-uhci=y 92 | CONFIG_PACKAGE_kmod-usb2=y 93 | CONFIG_PACKAGE_kmod-usb2-pci=y 94 | CONFIG_PACKAGE_kmod-usb3=y 95 | CONFIG_PACKAGE_kmod-nls-cp437=y 96 | CONFIG_PACKAGE_kmod-nls-iso8859-1=y 97 | CONFIG_PACKAGE_kmod-usb-net-rndis=y 98 | CONFIG_PACKAGE_kmod-usb-printer=y 99 | CONFIG_PACKAGE_usbutils=y 100 | 101 | ## zram内存压缩 102 | # CONFIG_PACKAGE_zram-swap=y 103 | CONFIG_PACKAGE_kmod-zram=y 104 | # CONFIG_ZRAM_DEF_COMP_LZORLE=y 105 | -------------------------------------------------------------------------------- /JDCloud-AX1800-Pro_AX6600/diy-part1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright (c) 2019-2020 P3TERX 4 | # 5 | # This is free software, licensed under the MIT License. 6 | # See /LICENSE for more information. 7 | # 8 | # https://github.com/P3TERX/Actions-OpenWrt 9 | # File name: diy-part1.sh 10 | # Description: OpenWrt DIY script part 1 (Before Update feeds) 11 | # 12 | 13 | # Uncomment a feed source 14 | #sed -i 's/^#\(.*helloworld\)/\1/' feeds.conf.default 15 | 16 | # Add a feed source 17 | git clone https://github.com/kenzok8/openwrt-packages package/kenzo 18 | git clone https://github.com/kenzok8/small package/small 19 | -------------------------------------------------------------------------------- /JDCloud-AX1800-Pro_AX6600/diy-part2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright (c) 2019-2020 P3TERX 4 | # 5 | # This is free software, licensed under the MIT License. 6 | # See /LICENSE for more information. 7 | # 8 | # https://github.com/P3TERX/Actions-OpenWrt 9 | # File name: diy-part2.sh 10 | # Description: OpenWrt DIY script part 2 (After Update feeds) 11 | # 12 | 13 | # Modify default IP 14 | #sed -i 's/192.168.1.1/192.168.50.5/g' package/base-files/files/bin/config_generate 15 | ##-----------------Add dev core for kenzo OpenClash------------------ 16 | curl -sL -m 30 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/core/master/dev/clash-linux-arm64.tar.gz -o /tmp/clash.tar.gz 17 | tar zxvf /tmp/clash.tar.gz -C /tmp >/dev/null 2>&1 18 | chmod +x /tmp/clash >/dev/null 2>&1 19 | mkdir -p package/kenzo/luci-app-openclash/root/etc/openclash/core 20 | mv /tmp/clash package/kenzo/luci-app-openclash/root/etc/openclash/core/clash >/dev/null 2>&1 21 | rm -rf /tmp/clash.tar.gz >/dev/null 2>&1 22 | -------------------------------------------------------------------------------- /JDCloud-AX1800-Pro_AX6600/jdcloud-ax1800-pro_ax6600.patch: -------------------------------------------------------------------------------- 1 | diff --git a/package/boot/uboot-envtools/files/qualcommax b/package/boot/uboot-envtools/files/qualcommax 2 | index 0c6b9e60b..e7c7992e9 100644 3 | --- a/package/boot/uboot-envtools/files/qualcommax 4 | +++ b/package/boot/uboot-envtools/files/qualcommax 5 | @@ -48,6 +48,8 @@ qnap,301w) 6 | [ -n "$idx" ] && \ 7 | ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x20000" "0x20000" "1" 8 | ;; 9 | +jdcloud,ax6600|\ 10 | +jdcloud,ax1800-pro|\ 11 | redmi,ax5-jdcloud) 12 | mmcpart="$(find_mmc_part 0:APPSBLENV)" 13 | [ -n "$mmcpart" ] && \ 14 | diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6000-re-ss-01.dts b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6000-ax1800-pro.dts 15 | similarity index 94% 16 | rename from target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6000-re-ss-01.dts 17 | rename to target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6000-ax1800-pro.dts 18 | index c09f77e65..e6272abfb 100644 19 | --- a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6000-re-ss-01.dts 20 | +++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6000-ax1800-pro.dts 21 | @@ -11,14 +11,14 @@ 22 | 23 | / { 24 | model = "JDCloud RE-SS-01 (AX1800 Pro)"; 25 | - compatible = "jdcloud,re-ss-01", "qcom,ipq6018"; 26 | + compatible = "jdcloud,ax1800-pro", "qcom,ipq6018"; 27 | 28 | aliases { 29 | serial0 = &blsp1_uart3; 30 | - led-boot = &led_status_green; 31 | + led-boot = &led_status_red; 32 | led-failsafe = &led_status_red; 33 | - led-running = &led_status_blue; 34 | - led-upgrade = &led_status_red; 35 | + led-running = &led_status_green; 36 | + led-upgrade = &led_status_green; 37 | 38 | ethernet1 = "/soc/dp2"; 39 | ethernet2 = "/soc/dp3"; 40 | diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6010-re-cs-02.dts b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6010-ax6600.dts 41 | similarity index 96% 42 | rename from target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6010-re-cs-02.dts 43 | rename to target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6010-ax6600.dts 44 | index 436f8127e..85cba0765 100644 45 | --- a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6010-re-cs-02.dts 46 | +++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq6010-ax6600.dts 47 | @@ -11,15 +11,15 @@ 48 | 49 | / { 50 | model = "JDCloud RE-CS-02 (AX6600)"; 51 | - compatible = "jdcloud,re-cs-02", "qcom,ipq6018"; 52 | + compatible = "jdcloud,ax6600", "qcom,ipq6018"; 53 | 54 | aliases { 55 | serial0 = &blsp1_uart3; 56 | serial1 = &blsp1_uart6; 57 | - led-boot = &led_status_green; 58 | + led-boot = &led_status_red; 59 | led-failsafe = &led_status_red; 60 | - led-running = &led_status_blue; 61 | - led-upgrade = &led_status_red; 62 | + led-running = &led_status_green; 63 | + led-upgrade = &led_status_green; 64 | 65 | ethernet0 = "/soc/dp1"; 66 | ethernet1 = "/soc/dp2"; 67 | diff --git a/target/linux/qualcommax/image/ipq60xx.mk b/target/linux/qualcommax/image/ipq60xx.mk 68 | index 4f2e29b50..d24348743 100644 69 | --- a/target/linux/qualcommax/image/ipq60xx.mk 70 | +++ b/target/linux/qualcommax/image/ipq60xx.mk 71 | @@ -18,9 +18,8 @@ define Device/UbiFit 72 | endef 73 | 74 | define Device/EmmcImage 75 | - IMAGES := factory.bin recovery.bin sysupgrade.bin 76 | - IMAGE/factory.bin := append-kernel | pad-to 12288k | append-rootfs | append-metadata 77 | - IMAGE/recovery.bin := append-kernel | pad-to 6144k | append-rootfs | append-metadata 78 | + IMAGES := factory.bin sysupgrade.bin 79 | + IMAGE/factory.bin := append-kernel | pad-to 6144k | append-rootfs | append-metadata 80 | IMAGE/sysupgrade.bin/squashfs := append-rootfs | pad-to 64k | sysupgrade-tar rootfs=$$$$@ | append-metadata 81 | endef 82 | 83 | @@ -62,7 +61,7 @@ define Device/glinet_gl-axt1800 84 | endef 85 | TARGET_DEVICES += glinet_gl-axt1800 86 | 87 | -define Device/jdcloud_re-cs-02 88 | +define Device/jdcloud_ax6600 89 | $(call Device/FitImage) 90 | $(call Device/EmmcImage) 91 | DEVICE_VENDOR := JDCloud 92 | @@ -73,7 +72,7 @@ define Device/jdcloud_re-cs-02 93 | DEVICE_DTS_CONFIG := config@cp03-c3 94 | DEVICE_PACKAGES := ipq-wifi-jdcloud_ax6600 kmod-ath11k-pci ath11k-firmware-qcn9074 95 | endef 96 | -TARGET_DEVICES += jdcloud_re-cs-02 97 | +TARGET_DEVICES += jdcloud_ax6600 98 | 99 | define Device/jdcloud_re-cs-07 100 | $(call Device/FitImage) 101 | @@ -88,7 +87,7 @@ define Device/jdcloud_re-cs-07 102 | endef 103 | TARGET_DEVICES += jdcloud_re-cs-07 104 | 105 | -define Device/jdcloud_re-ss-01 106 | +define Device/jdcloud_ax1800-pro 107 | $(call Device/FitImage) 108 | $(call Device/EmmcImage) 109 | DEVICE_VENDOR := JDCloud 110 | @@ -99,7 +98,7 @@ define Device/jdcloud_re-ss-01 111 | DEVICE_DTS_CONFIG := config@cp03-c2 112 | DEVICE_PACKAGES := ipq-wifi-jdcloud_ax1800pro 113 | endef 114 | -TARGET_DEVICES += jdcloud_re-ss-01 115 | +TARGET_DEVICES += jdcloud_ax1800-pro 116 | 117 | define Device/linksys_mr7350 118 | $(call Device/FitImage) 119 | diff --git a/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/02_network b/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/02_network 120 | index 348437b84..f50a76149 100644 121 | --- a/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/02_network 122 | +++ b/target/linux/qualcommax/ipq60xx/base-files/etc/board.d/02_network 123 | @@ -13,14 +13,14 @@ ipq60xx_setup_interfaces() 124 | case "$board" in 125 | cmiot,ax18|\ 126 | jdcloud,re-cs-07|\ 127 | - jdcloud,re-ss-01|\ 128 | + jdcloud,ax1800-pro|\ 129 | qihoo,360v6|\ 130 | redmi,ax5-*|\ 131 | xiaomi,rm1800) 132 | ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan" 133 | ;; 134 | glinet,gl-ax1800|\ 135 | - jdcloud,re-cs-02|\ 136 | + jdcloud,ax6600|\ 137 | linksys,mr7350) 138 | ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan" 139 | ;; 140 | diff --git a/target/linux/qualcommax/ipq60xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata b/target/linux/qualcommax/ipq60xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata 141 | index b82946cdc..b4c880a4b 100644 142 | --- a/target/linux/qualcommax/ipq60xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata 143 | +++ b/target/linux/qualcommax/ipq60xx/base-files/etc/hotplug.d/firmware/11-ath11k-caldata 144 | @@ -16,8 +16,8 @@ case "$FIRMWARE" in 145 | xiaomi,rm1800) 146 | caldata_extract "0:art" 0x1000 0x10000 147 | ;; 148 | - jdcloud,re-cs-02|\ 149 | - jdcloud,re-ss-01|\ 150 | + jdcloud,ax6600|\ 151 | + jdcloud,ax1800-pro|\ 152 | redmi,ax5-jdcloud) 153 | caldata_extract_mmc "0:ART" 0x1000 0x10000 154 | ;; 155 | @@ -25,7 +25,7 @@ case "$FIRMWARE" in 156 | ;; 157 | "ath11k/QCN9074/hw1.0/cal-pci-0000:01:00.0.bin") 158 | case "$board" in 159 | - jdcloud,re-cs-02) 160 | + jdcloud,ax6600) 161 | caldata_extract_mmc "0:ART" 0x26800 0x20000 162 | ;; 163 | esac 164 | diff --git a/target/linux/qualcommax/ipq60xx/base-files/lib/preinit/81_fix_eeprom b/target/linux/qualcommax/ipq60xx/base-files/lib/preinit/81_fix_eeprom 165 | index 34b91f4df..0ce0a4860 100644 166 | --- a/target/linux/qualcommax/ipq60xx/base-files/lib/preinit/81_fix_eeprom 167 | +++ b/target/linux/qualcommax/ipq60xx/base-files/lib/preinit/81_fix_eeprom 168 | @@ -2,8 +2,8 @@ 169 | 170 | preinit_fix_eeprom() { 171 | case $(board_name) in 172 | - jdcloud,re-cs-02|\ 173 | - jdcloud,re-ss-01|\ 174 | + jdcloud,ax6600|\ 175 | + jdcloud,ax1800-pro|\ 176 | redmi,ax5-jdcloud) 177 | mmc_part=$(find_mmc_part 0:ART) 178 | FIRMWARE=""ath11k/IPQ6018/hw1.0/cal-ahb-c000000.wifi.bin"" 179 | diff --git a/target/linux/qualcommax/ipq60xx/base-files/lib/upgrade/platform.sh b/target/linux/qualcommax/ipq60xx/base-files/lib/upgrade/platform.sh 180 | index 6cb255df7..4973bdbec 100644 181 | --- a/target/linux/qualcommax/ipq60xx/base-files/lib/upgrade/platform.sh 182 | +++ b/target/linux/qualcommax/ipq60xx/base-files/lib/upgrade/platform.sh 183 | @@ -17,8 +17,8 @@ platform_do_upgrade() { 184 | xiaomi,rm1800) 185 | nand_do_upgrade "$1" 186 | ;; 187 | - jdcloud,re-cs-02|\ 188 | + jdcloud,ax6600|\ 189 | jdcloud,re-cs-07|\ 190 | - jdcloud,re-ss-01|\ 191 | + jdcloud,ax1800-pro|\ 192 | redmi,ax5-jdcloud) 193 | kernelname="0:HLOS" 194 | rootfsname="rootfs" 195 | -------------------------------------------------------------------------------- /JDCloud-AX6000-Baili-hanwckf/.mtwifi-cfg.config: -------------------------------------------------------------------------------- 1 | CONFIG_TARGET_mediatek=y 2 | CONFIG_TARGET_mediatek_mt7986=y 3 | CONFIG_TARGET_mediatek_mt7986_DEVICE_jdcloud_re-cp-03=y 4 | ##---------下面配置可自行修改------------- 5 | ## 主题皮肤 6 | CONFIG_PACKAGE_luci-theme-argon=y 7 | CONFIG_PACKAGE_luci-theme-design=y 8 | ## 外部插件 9 | CONFIG_PACKAGE_luci-app-oaf=y 10 | ## 内部插件 11 | CONFIG_PACKAGE_luci-app-dockerman=y 12 | CONFIG_PACKAGE_luci-app-ttyd=y 13 | CONFIG_PACKAGE_luci-app-passwall=y 14 | CONFIG_PACKAGE_luci-app-openclash=y 15 | CONFIG_PACKAGE_luci-app-ddns=y 16 | CONFIG_PACKAGE_ddns-scripts=y 17 | CONFIG_PACKAGE_ddns-scripts_aliyun=y 18 | CONFIG_PACKAGE_ddns-scripts-cloudflare=y 19 | CONFIG_PACKAGE_ddns-scripts-cnkuai=y 20 | CONFIG_PACKAGE_ddns-scripts-digitalocean=y 21 | CONFIG_PACKAGE_ddns-scripts-dnspod=y 22 | CONFIG_PACKAGE_ddns-scripts-dnspod-com=y 23 | CONFIG_PACKAGE_ddns-scripts-freedns=y 24 | CONFIG_PACKAGE_ddns-scripts-gandi=y 25 | CONFIG_PACKAGE_ddns-scripts-godaddy=y 26 | CONFIG_PACKAGE_ddns-scripts-noip=y 27 | CONFIG_PACKAGE_ddns-scripts-nsupdate=y 28 | CONFIG_PACKAGE_ddns-scripts-route53=y 29 | CONFIG_PACKAGE_luci-app-arpbind=y 30 | CONFIG_PACKAGE_luci-app-msd_lite=y 31 | CONFIG_PACKAGE_luci-app-lucky=y 32 | CONFIG_PACKAGE_luci-app-wol=y 33 | CONFIG_PACKAGE_luci-app-vlmcsd=y 34 | CONFIG_PACKAGE_luci-app-eqos-mtk=y 35 | CONFIG_PACKAGE_luci-app-upnp=y 36 | CONFIG_PACKAGE_luci-app-samba4=y 37 | CONFIG_PACKAGE_luci-app-vsftpd=y 38 | CONFIG_PACKAGE_luci-app-zerotier=y 39 | CONFIG_PACKAGE_luci-app-openvpn-server=y 40 | CONFIG_PACKAGE_luci-app-ipsec-vpnserver-manyusers=y 41 | CONFIG_PACKAGE_tailscale=y 42 | CONFIG_PACKAGE_luci-app-wireguard=y 43 | CONFIG_PACKAGE_qrencode=y 44 | CONFIG_PACKAGE_coremark=y 45 | CONFIG_PACKAGE_vim-full=y 46 | CONFIG_PACKAGE_zsh=y 47 | CONFIG_PACKAGE_gdisk=y 48 | CONFIG_PACKAGE_sgdisk=y 49 | ## 在线安装alist所需依赖 50 | CONFIG_PACKAGE_kmod-fuse=y 51 | ## 在线安装docker所需依赖 52 | CONFIG_PACKAGE_kmod-dm=y 53 | CONFIG_PACKAGE_kmod-br-netfilter=y 54 | CONFIG_PACKAGE_kmod-ikconfig=y 55 | CONFIG_PACKAGE_kmod-nf-ipvs=y 56 | CONFIG_PACKAGE_kmod-veth=y 57 | ## 针对eMMC加的一些文件系统和工具 58 | CONFIG_PACKAGE_kmod-fs-ext4=y 59 | CONFIG_PACKAGE_kmod-fs-f2fs=y 60 | CONFIG_PACKAGE_e2fsprogs=y 61 | CONFIG_PACKAGE_f2fs-tools=y 62 | CONFIG_PACKAGE_lsblk=y 63 | CONFIG_PACKAGE_mmc-utils=y 64 | ##---------下面默认配置不建议修改------------- 65 | ## 使用mtwifi-cfg无线配置 66 | CONFIG_PACKAGE_luci-app-mtwifi-cfg=y 67 | CONFIG_PACKAGE_luci-i18n-mtwifi-cfg-zh-cn=y 68 | CONFIG_PACKAGE_mtwifi-cfg=y 69 | CONFIG_PACKAGE_lua-cjson=y 70 | ## 使用新的无线驱动 71 | CONFIG_MTK_MT_WIFI_DRIVER_VERSION_7672=y 72 | CONFIG_MTK_MT_WIFI_MT7986_20240823=y 73 | ## 其他默认配置 74 | CONFIG_DEVEL=y 75 | CONFIG_TOOLCHAINOPTS=y 76 | CONFIG_BUSYBOX_CUSTOM=y 77 | CONFIG_AFALG_UPDATE_CTR_IV=y 78 | CONFIG_BUSYBOX_CONFIG_BLKID=y 79 | CONFIG_BUSYBOX_CONFIG_FEATURE_BLKID_TYPE=y 80 | CONFIG_BUSYBOX_CONFIG_VOLUMEID=y 81 | CONFIG_CONNINFRA_AUTO_UP=y 82 | CONFIG_CONNINFRA_EMI_SUPPORT=y 83 | # CONFIG_GDB is not set 84 | CONFIG_INCLUDE_CONFIG=y 85 | CONFIG_JSON_OVERVIEW_IMAGE_INFO=y 86 | # CONFIG_KERNEL_BLK_DEV_THROTTLING is not set 87 | # CONFIG_KERNEL_CFS_BANDWIDTH is not set 88 | CONFIG_KERNEL_CGROUP_DEVICE=y 89 | CONFIG_KERNEL_CGROUP_FREEZER=y 90 | CONFIG_KERNEL_DEVMEM=y 91 | # CONFIG_KERNEL_KEYS is not set 92 | # CONFIG_KERNEL_MEMCG_SWAP is not set 93 | CONFIG_KERNEL_NET_CLS_CGROUP=y 94 | CONFIG_MTK_ACK_CTS_TIMEOUT_SUPPORT=y 95 | CONFIG_MTK_AIR_MONITOR=y 96 | CONFIG_MTK_AMPDU_CONF_SUPPORT=y 97 | CONFIG_MTK_ANTENNA_CONTROL_SUPPORT=y 98 | CONFIG_MTK_APCLI_SUPPORT=y 99 | CONFIG_MTK_ATE_SUPPORT=y 100 | CONFIG_MTK_BACKGROUND_SCAN_SUPPORT=y 101 | CONFIG_MTK_CAL_BIN_FILE_SUPPORT=y 102 | CONFIG_MTK_CFG_SUPPORT_FALCON_MURU=y 103 | CONFIG_MTK_CFG_SUPPORT_FALCON_PP=y 104 | CONFIG_MTK_CFG_SUPPORT_FALCON_SR=y 105 | CONFIG_MTK_CFG_SUPPORT_FALCON_TXCMD_DBG=y 106 | CONFIG_MTK_CHIP_MT7986=y 107 | CONFIG_MTK_CONNINFRA_APSOC=y 108 | CONFIG_MTK_CONNINFRA_APSOC_MT7986=y 109 | CONFIG_MTK_CON_WPS_SUPPORT=y 110 | CONFIG_MTK_DBDC_MODE=y 111 | CONFIG_MTK_DOT11K_RRM_SUPPORT=y 112 | CONFIG_MTK_DOT11R_FT_SUPPORT=y 113 | CONFIG_MTK_DOT11W_PMF_SUPPORT=y 114 | CONFIG_MTK_DOT11_HE_AX=y 115 | CONFIG_MTK_DOT11_N_SUPPORT=y 116 | CONFIG_MTK_DOT11_VHT_AC=y 117 | CONFIG_MTK_FAST_NAT_SUPPORT=y 118 | CONFIG_MTK_FIRST_IF_EEPROM_FLASH=y 119 | CONFIG_MTK_FIRST_IF_IPAILNA=y 120 | CONFIG_MTK_FIRST_IF_MT7986=y 121 | CONFIG_MTK_GREENAP_SUPPORT=y 122 | CONFIG_MTK_G_BAND_256QAM_SUPPORT=y 123 | CONFIG_MTK_HDR_TRANS_RX_SUPPORT=y 124 | CONFIG_MTK_HDR_TRANS_TX_SUPPORT=y 125 | CONFIG_MTK_ICAP_SUPPORT=y 126 | CONFIG_MTK_IGMP_SNOOP_SUPPORT=y 127 | CONFIG_MTK_INTERWORKING=y 128 | CONFIG_MTK_MAP_R2_VER_SUPPORT=y 129 | CONFIG_MTK_MAP_R3_VER_SUPPORT=y 130 | CONFIG_MTK_MAP_SUPPORT=y 131 | CONFIG_MTK_MBSS_DTIM_SUPPORT=y 132 | CONFIG_MTK_MBSS_SUPPORT=y 133 | CONFIG_MTK_MCAST_RATE_SPECIFIC=y 134 | CONFIG_MTK_MGMT_TXPWR_CTRL=y 135 | CONFIG_MTK_MLME_MULTI_QUEUE_SUPPORT=y 136 | CONFIG_MTK_MT_AP_SUPPORT=m 137 | CONFIG_MTK_MT_DFS_SUPPORT=y 138 | CONFIG_MTK_MT_MAC=y 139 | CONFIG_MTK_MT_WIFI=m 140 | CONFIG_MTK_MT_WIFI_PATH="mt_wifi" 141 | CONFIG_MTK_MUMIMO_SUPPORT=y 142 | CONFIG_MTK_MU_RA_SUPPORT=y 143 | CONFIG_MTK_OFFCHANNEL_SCAN_FEATURE=y 144 | CONFIG_MTK_OWE_SUPPORT=y 145 | CONFIG_MTK_PHY_ICS_SUPPORT=y 146 | CONFIG_MTK_QOS_R1_SUPPORT=y 147 | CONFIG_MTK_RA_PHY_RATE_SUPPORT=y 148 | CONFIG_MTK_RED_SUPPORT=y 149 | CONFIG_MTK_RTMP_FLASH_SUPPORT=y 150 | CONFIG_MTK_RT_FIRST_CARD_EEPROM="flash" 151 | CONFIG_MTK_RT_FIRST_IF_RF_OFFSET=0xc0000 152 | CONFIG_MTK_SCS_FW_OFFLOAD=y 153 | CONFIG_MTK_SECOND_IF_NONE=y 154 | CONFIG_MTK_SMART_CARRIER_SENSE_SUPPORT=y 155 | CONFIG_MTK_SPECTRUM_SUPPORT=y 156 | CONFIG_MTK_SUPPORT_OPENWRT=y 157 | CONFIG_MTK_THERMAL_PROTECT_SUPPORT=y 158 | CONFIG_MTK_THIRD_IF_NONE=y 159 | CONFIG_MTK_TPC_SUPPORT=y 160 | CONFIG_MTK_TXBF_SUPPORT=y 161 | CONFIG_MTK_UAPSD=y 162 | CONFIG_MTK_VLAN_SUPPORT=y 163 | CONFIG_MTK_VOW_SUPPORT=y 164 | CONFIG_MTK_WARP_V2=y 165 | CONFIG_MTK_WDS_SUPPORT=y 166 | CONFIG_MTK_WHNAT_SUPPORT=m 167 | CONFIG_MTK_WIFI_ADIE_TYPE="mt7976" 168 | CONFIG_MTK_WIFI_BASIC_FUNC=y 169 | CONFIG_MTK_WIFI_DRIVER=y 170 | CONFIG_MTK_WIFI_EAP_FEATURE=y 171 | CONFIG_MTK_WIFI_FW_BIN_LOAD=y 172 | CONFIG_MTK_WIFI_MODE_AP=m 173 | CONFIG_MTK_WIFI_MT_MAC=y 174 | CONFIG_MTK_WIFI_SKU_TYPE="AX6000" 175 | CONFIG_MTK_WIFI_TWT_SUPPORT=y 176 | CONFIG_MTK_WLAN_HOOK=y 177 | CONFIG_MTK_WLAN_SERVICE=y 178 | CONFIG_MTK_WNM_SUPPORT=y 179 | CONFIG_MTK_WPA3_SUPPORT=y 180 | CONFIG_MTK_WSC_INCLUDED=y 181 | CONFIG_MTK_WSC_V2_SUPPORT=y 182 | # CONFIG_OPENSSL_ENGINE_BUILTIN is not set 183 | # CONFIG_OPENSSL_PREFER_CHACHA_OVER_GCM is not set 184 | CONFIG_OPENSSL_WITH_NPN=y 185 | # CONFIG_PACKAGE_TURBOACC_INCLUDE_FLOW_OFFLOADING is not set 186 | CONFIG_PACKAGE_TURBOACC_INCLUDE_NO_FASTPATH=y 187 | CONFIG_PACKAGE_blockd=y 188 | CONFIG_PACKAGE_ca-certificates=y 189 | CONFIG_PACKAGE_datconf=y 190 | CONFIG_PACKAGE_datconf-lua=y 191 | CONFIG_PACKAGE_ebtables=y 192 | CONFIG_PACKAGE_ethtool=y 193 | CONFIG_PACKAGE_htop=y 194 | CONFIG_PACKAGE_ip-bridge=y 195 | CONFIG_PACKAGE_ip6tables-extra=y 196 | CONFIG_PACKAGE_ipset=y 197 | CONFIG_PACKAGE_iptables-mod-conntrack-extra=y 198 | CONFIG_PACKAGE_iptables-mod-extra=y 199 | CONFIG_PACKAGE_iptables-mod-filter=y 200 | CONFIG_PACKAGE_iptables-mod-hashlimit=y 201 | CONFIG_PACKAGE_iptables-mod-iface=y 202 | CONFIG_PACKAGE_iptables-mod-ipmark=y 203 | CONFIG_PACKAGE_iptables-mod-ipopt=y 204 | CONFIG_PACKAGE_iptables-mod-iprange=y 205 | CONFIG_PACKAGE_iptables-mod-ipv4options=y 206 | CONFIG_PACKAGE_iptables-mod-nat-extra=y 207 | CONFIG_PACKAGE_iptables-mod-proto=y 208 | CONFIG_PACKAGE_iptables-mod-tee=y 209 | CONFIG_PACKAGE_iptables-mod-tproxy=y 210 | CONFIG_PACKAGE_iptables-mod-u32=y 211 | CONFIG_PACKAGE_iw=y 212 | CONFIG_PACKAGE_iwinfo=y 213 | CONFIG_PACKAGE_kmod-ata-core=y 214 | CONFIG_PACKAGE_kmod-conninfra=y 215 | CONFIG_PACKAGE_kmod-crypto-acompress=y 216 | CONFIG_PACKAGE_kmod-crypto-ccm=y 217 | CONFIG_PACKAGE_kmod-crypto-cmac=y 218 | CONFIG_PACKAGE_kmod-crypto-crc32c=y 219 | CONFIG_PACKAGE_kmod-crypto-ctr=y 220 | CONFIG_PACKAGE_kmod-crypto-des=y 221 | CONFIG_PACKAGE_kmod-crypto-gcm=y 222 | CONFIG_PACKAGE_kmod-crypto-gf128=y 223 | CONFIG_PACKAGE_kmod-crypto-ghash=y 224 | CONFIG_PACKAGE_kmod-crypto-hmac=y 225 | CONFIG_PACKAGE_kmod-crypto-md4=y 226 | CONFIG_PACKAGE_kmod-crypto-md5=y 227 | CONFIG_PACKAGE_kmod-crypto-rng=y 228 | CONFIG_PACKAGE_kmod-crypto-seqiv=y 229 | CONFIG_PACKAGE_kmod-crypto-sha256=y 230 | CONFIG_PACKAGE_kmod-crypto-sha512=y 231 | CONFIG_PACKAGE_kmod-ebtables=y 232 | CONFIG_PACKAGE_kmod-ebtables-ipv4=y 233 | CONFIG_PACKAGE_kmod-ebtables-ipv6=y 234 | CONFIG_PACKAGE_kmod-fs-autofs4=y 235 | CONFIG_PACKAGE_kmod-fs-vfat=y 236 | CONFIG_PACKAGE_kmod-ifb=y 237 | CONFIG_PACKAGE_kmod-inet-diag=y 238 | CONFIG_PACKAGE_kmod-ip6tables-extra=y 239 | CONFIG_PACKAGE_kmod-ipt-compat-xtables=y 240 | CONFIG_PACKAGE_kmod-ipt-conntrack-extra=y 241 | CONFIG_PACKAGE_kmod-ipt-extra=y 242 | CONFIG_PACKAGE_kmod-ipt-filter=y 243 | CONFIG_PACKAGE_kmod-ipt-hashlimit=y 244 | CONFIG_PACKAGE_kmod-ipt-iface=y 245 | CONFIG_PACKAGE_kmod-ipt-ipmark=y 246 | CONFIG_PACKAGE_kmod-ipt-ipopt=y 247 | CONFIG_PACKAGE_kmod-ipt-iprange=y 248 | CONFIG_PACKAGE_kmod-ipt-ipv4options=y 249 | CONFIG_PACKAGE_kmod-ipt-nat-extra=y 250 | CONFIG_PACKAGE_kmod-ipt-offload=y 251 | CONFIG_PACKAGE_kmod-ipt-proto=y 252 | CONFIG_PACKAGE_kmod-ipt-raw6=y 253 | CONFIG_PACKAGE_kmod-ipt-tee=y 254 | CONFIG_PACKAGE_kmod-ipt-tproxy=y 255 | CONFIG_PACKAGE_kmod-ipt-u32=y 256 | CONFIG_PACKAGE_kmod-lib-crc32c=y 257 | CONFIG_PACKAGE_kmod-lib-lzo=y 258 | CONFIG_PACKAGE_kmod-mediatek_hnat=y 259 | CONFIG_PACKAGE_kmod-mt_wifi=y 260 | CONFIG_PACKAGE_kmod-nf-flow=y 261 | CONFIG_PACKAGE_kmod-nls-base=y 262 | CONFIG_PACKAGE_kmod-nls-cp437=y 263 | CONFIG_PACKAGE_kmod-nls-iso8859-1=y 264 | CONFIG_PACKAGE_kmod-nls-utf8=y 265 | CONFIG_PACKAGE_kmod-sched-core=y 266 | CONFIG_PACKAGE_kmod-scsi-core=y 267 | CONFIG_PACKAGE_kmod-tcp-bbr=y 268 | CONFIG_PACKAGE_kmod-tun=y 269 | CONFIG_PACKAGE_kmod-warp=y 270 | CONFIG_PACKAGE_kmod-zram=y 271 | CONFIG_PACKAGE_kvcedit=y 272 | CONFIG_PACKAGE_libatomic=y 273 | CONFIG_PACKAGE_libblkid=y 274 | CONFIG_PACKAGE_libcap-ng=y 275 | CONFIG_PACKAGE_libcbor=y 276 | CONFIG_PACKAGE_libevdev=y 277 | CONFIG_PACKAGE_libfido2=y 278 | CONFIG_PACKAGE_libipset=y 279 | CONFIG_PACKAGE_libkvcutil=y 280 | CONFIG_PACKAGE_libncurses=y 281 | CONFIG_PACKAGE_libnl=y 282 | CONFIG_PACKAGE_libnl-core=y 283 | CONFIG_PACKAGE_libnl-genl=y 284 | CONFIG_PACKAGE_libnl-nf=y 285 | CONFIG_PACKAGE_libnl-route=y 286 | CONFIG_PACKAGE_libopenssl-afalg_sync=y 287 | CONFIG_PACKAGE_libopenssl-devcrypto=y 288 | CONFIG_PACKAGE_libpcap=y 289 | CONFIG_PACKAGE_libstdcpp=y 290 | CONFIG_PACKAGE_libudev-zero=y 291 | CONFIG_PACKAGE_libuuid=y 292 | # CONFIG_PACKAGE_luci-app-rclone_INCLUDE_rclone-ng is not set 293 | # CONFIG_PACKAGE_luci-app-rclone_INCLUDE_rclone-webui is not set 294 | # CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_ChinaDNS_NG is not set 295 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_NONE_V2RAY=y 296 | # CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_ShadowsocksR_Libev_Client is not set 297 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_NONE_Client=y 298 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_NONE_Server=y 299 | # CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Client is not set 300 | # CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Server is not set 301 | # CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Simple_Obfs is not set 302 | # CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Xray is not set 303 | CONFIG_PACKAGE_luci-app-turboacc-mtk=y 304 | # CONFIG_PACKAGE_luci-app-vssr_INCLUDE_ShadowsocksR_Libev_Server is not set 305 | # CONFIG_PACKAGE_luci-app-vssr_INCLUDE_Trojan is not set 306 | # CONFIG_PACKAGE_luci-app-vssr_INCLUDE_Xray is not set 307 | # CONFIG_PACKAGE_luci-app-vssr_INCLUDE_Xray_plugin is not set 308 | CONFIG_PACKAGE_luci-i18n-turboacc-mtk-zh-cn=y 309 | CONFIG_PACKAGE_mii_mgr=y 310 | CONFIG_PACKAGE_mtkhqos_util=y 311 | CONFIG_PACKAGE_nano=y 312 | CONFIG_PACKAGE_openssh-keygen=y 313 | CONFIG_PACKAGE_openssh-sftp-server=y 314 | CONFIG_PACKAGE_openssl-util=y 315 | CONFIG_PACKAGE_regs=y 316 | CONFIG_PACKAGE_resolveip=y 317 | CONFIG_PACKAGE_swconfig=y 318 | CONFIG_PACKAGE_switch=y 319 | CONFIG_PACKAGE_tc-mod-iptables=y 320 | CONFIG_PACKAGE_tc-tiny=y 321 | CONFIG_PACKAGE_tcpdump=y 322 | CONFIG_PACKAGE_terminfo=y 323 | CONFIG_PACKAGE_wifi-dats=y 324 | CONFIG_PACKAGE_wireless-regdb=y 325 | CONFIG_PACKAGE_wireless-tools=y 326 | CONFIG_PACKAGE_zram-swap=y 327 | # CONFIG_PKG_CHECK_FORMAT_SECURITY is not set 328 | # CONFIG_PKG_FORTIFY_SOURCE_1 is not set 329 | CONFIG_PKG_FORTIFY_SOURCE_2=y 330 | CONFIG_WARP_CHIPSET="mt7986" 331 | CONFIG_WARP_DBG_SUPPORT=y 332 | CONFIG_WARP_MEMORY_LEAK_DBG=y 333 | CONFIG_WARP_VERSION=2 334 | CONFIG_WED_HW_RRO_SUPPORT=y 335 | # CONFIG_WOLFSSL_HAS_ECC25519 is not set 336 | CONFIG_first_card=y 337 | CONFIG_first_card_name="MT7986" 338 | # CONFIG_AFALG_FALLBACK is not set 339 | # CONFIG_MTK_BAND_STEERING is not set 340 | # CONFIG_MTK_DEFAULT_5G_PROFILE is not set 341 | # CONFIG_MTK_MAC_REPEATER_SUPPORT is not set 342 | # CONFIG_MTK_MULTI_PROFILE_SUPPORT is not set 343 | # CONFIG_MTK_PCIE_ASPM_DYM_CTRL_SUPPORT is not set 344 | # CONFIG_MTK_PRE_CAL_TRX_SET1_SUPPORT is not set 345 | # CONFIG_MTK_PRE_CAL_TRX_SET2_SUPPORT is not set 346 | # CONFIG_MTK_RLM_CAL_CACHE_SUPPORT is not set 347 | # CONFIG_MTK_SNIFFER_RADIOTAP_SUPPORT is not set 348 | -------------------------------------------------------------------------------- /JDCloud-AX6000-Baili-hanwckf/diy-part1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright (c) 2019-2020 P3TERX 4 | # 5 | # This is free software, licensed under the MIT License. 6 | # See /LICENSE for more information. 7 | # 8 | # https://github.com/P3TERX/Actions-OpenWrt 9 | # File name: diy-part1.sh 10 | # Description: OpenWrt DIY script part 1 (Before Update feeds) 11 | # 12 | 13 | # Uncomment a feed source 14 | #sed -i 's/^#\(.*helloworld\)/\1/' feeds.conf.default 15 | 16 | # Add a feed source 17 | #echo 'src-git helloworld https://github.com/fw876/helloworld' >>feeds.conf.default 18 | #echo 'src-git passwall https://github.com/xiaorouji/openwrt-passwall' >>feeds.conf.default 19 | #git clone https://github.com/messense/aliyundrive-webdav package/messense 20 | git clone https://github.com/destan19/OpenAppFilter package/OpenAppFilter 21 | -------------------------------------------------------------------------------- /JDCloud-AX6000-Baili-hanwckf/diy-part2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright (c) 2019-2020 P3TERX 4 | # 5 | # This is free software, licensed under the MIT License. 6 | # See /LICENSE for more information. 7 | # 8 | # https://github.com/P3TERX/Actions-OpenWrt 9 | # File name: diy-part2.sh 10 | # Description: OpenWrt DIY script part 2 (After Update feeds) 11 | # 12 | 13 | # Modify default IP 14 | #sed -i 's/192.168.1.1/192.168.50.5/g' package/base-files/files/bin/config_generate 15 | ##-----------------Del duplicate packages------------------ 16 | rm -rf feeds/packages/net/open-app-filter 17 | ##-----------------Add OpenClash dev core------------------ 18 | curl -sL -m 30 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/core/master/dev/clash-linux-arm64.tar.gz -o /tmp/clash.tar.gz 19 | tar zxvf /tmp/clash.tar.gz -C /tmp >/dev/null 2>&1 20 | chmod +x /tmp/clash >/dev/null 2>&1 21 | mkdir -p feeds/luci/applications/luci-app-openclash/root/etc/openclash/core 22 | mv /tmp/clash feeds/luci/applications/luci-app-openclash/root/etc/openclash/core/clash >/dev/null 2>&1 23 | rm -rf /tmp/clash.tar.gz >/dev/null 2>&1 24 | ##-----------------Delete DDNS's examples----------------- 25 | sed -i '/myddns_ipv4/,$d' feeds/packages/net/ddns-scripts/files/etc/config/ddns 26 | ##-----------------Manually set CPU frequency for MT7986A----------------- 27 | sed -i '/"mediatek"\/\*|\"mvebu"\/\*/{n; s/.*/\tcpu_freq="2.0GHz" ;;/}' package/emortal/autocore/files/generic/cpuinfo 28 | -------------------------------------------------------------------------------- /JDCloud-AX6000-Baili-hanwckf/feeds.conf.default: -------------------------------------------------------------------------------- 1 | src-git-full packages https://github.com/lgs2007m/immortalwrt-mt798x-packages.git;openwrt-21.02 2 | src-git-full luci https://github.com/lgs2007m/immortalwrt-mt798x-luci.git;openwrt-21.02 3 | src-git-full routing https://github.com/openwrt/routing.git;openwrt-21.02 4 | src-git-full telephony https://github.com/openwrt/telephony.git;openwrt-21.02 5 | -------------------------------------------------------------------------------- /JDCloud-AX6000-Baili-hanwckf/mt7986a-dsa-jdcloud-re-cp-03.dts: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later OR MIT 2 | 3 | /dts-v1/; 4 | #include 5 | #include 6 | #include 7 | 8 | #include "mt7986a.dtsi" 9 | #include "mt7986a-pinctrl.dtsi" 10 | 11 | / { 12 | model = "JDCloud RE-CP-03"; 13 | compatible = "jdcloud,re-cp-03", "mediatek,mt7986a"; 14 | 15 | aliases { 16 | led-boot = &red_led; 17 | led-failsafe = &red_led; 18 | led-running = &green_led; 19 | led-upgrade = &green_led; 20 | }; 21 | 22 | chosen { 23 | bootargs = "console=ttyS0,115200n1 loglevel=8 \ 24 | earlycon=uart8250,mmio32,0x11002000 \ 25 | root=PARTLABEL=rootfs rootwait rootfstype=squashfs,f2fs"; 26 | }; 27 | 28 | memory { 29 | reg = <0 0x40000000 0 0x40000000>; 30 | }; 31 | 32 | gpio-keys { 33 | compatible = "gpio-keys"; 34 | 35 | button-joylink { 36 | label = "joylink"; 37 | linux,code = ; 38 | gpios = <&pio 10 GPIO_ACTIVE_LOW>; 39 | }; 40 | 41 | button-reset { 42 | label = "reset"; 43 | linux,code = ; 44 | gpios = <&pio 9 GPIO_ACTIVE_LOW>; 45 | }; 46 | }; 47 | 48 | gpio-leds { 49 | compatible = "gpio-leds"; 50 | 51 | led-0 { 52 | label = "blue:status"; 53 | gpios = <&pio 7 GPIO_ACTIVE_HIGH>; 54 | }; 55 | 56 | red_led: led-1 { 57 | label = "red:status"; 58 | gpios = <&pio 11 GPIO_ACTIVE_HIGH>; 59 | }; 60 | 61 | green_led: led-2 { 62 | label = "green:status"; 63 | gpios = <&pio 12 GPIO_ACTIVE_LOW>; 64 | }; 65 | }; 66 | 67 | reg_1p8v: regulator-1p8v { 68 | compatible = "regulator-fixed"; 69 | regulator-name = "fixed-1.8V"; 70 | regulator-min-microvolt = <1800000>; 71 | regulator-max-microvolt = <1800000>; 72 | regulator-boot-on; 73 | regulator-always-on; 74 | }; 75 | 76 | reg_3p3v: regulator-3p3v { 77 | compatible = "regulator-fixed"; 78 | regulator-name = "fixed-3.3V"; 79 | regulator-min-microvolt = <3300000>; 80 | regulator-max-microvolt = <3300000>; 81 | regulator-boot-on; 82 | regulator-always-on; 83 | }; 84 | }; 85 | 86 | ð { 87 | status = "okay"; 88 | 89 | gmac0: mac@0 { 90 | compatible = "mediatek,eth-mac"; 91 | reg = <0>; 92 | phy-mode = "2500base-x"; 93 | 94 | fixed-link { 95 | speed = <2500>; 96 | full-duplex; 97 | pause; 98 | }; 99 | }; 100 | 101 | gmac1: mac@1 { 102 | compatible = "mediatek,eth-mac"; 103 | reg = <1>; 104 | phy-mode = "2500base-x"; 105 | 106 | ext-phy-reg = <6>; 107 | ext-phy-reset-gpios = <&pio 6 0>; 108 | 109 | fixed-link { 110 | speed = <2500>; 111 | full-duplex; 112 | pause; 113 | }; 114 | }; 115 | 116 | mdio: mdio-bus { 117 | #address-cells = <1>; 118 | #size-cells = <0>; 119 | }; 120 | }; 121 | 122 | &hnat { 123 | mtketh-wan = "eth1"; 124 | mtketh-lan = "lan"; 125 | mtketh-max-gmac = <2>; 126 | status = "okay"; 127 | }; 128 | 129 | &mdio { 130 | switch: switch@1f { 131 | compatible = "mediatek,mt7531"; 132 | reg = <31>; 133 | reset-gpios = <&pio 5 GPIO_ACTIVE_HIGH>; 134 | interrupt-controller; 135 | #interrupt-cells = <1>; 136 | interrupt-parent = <&pio>; 137 | interrupts = <66 IRQ_TYPE_LEVEL_HIGH>; 138 | }; 139 | }; 140 | 141 | &mmc0 { 142 | bus-width = <8>; 143 | cap-mmc-highspeed; 144 | hs400-ds-delay = <0x14014>; 145 | max-frequency = <200000000>; 146 | mmc-hs200-1_8v; 147 | mmc-hs400-1_8v; 148 | no-sd; 149 | no-sdio; 150 | non-removable; 151 | pinctrl-names = "default", "state_uhs"; 152 | pinctrl-0 = <&mmc0_pins_default>; 153 | pinctrl-1 = <&mmc0_pins_uhs>; 154 | vmmc-supply = <®_3p3v>; 155 | vqmmc-supply = <®_1p8v>; 156 | status = "okay"; 157 | }; 158 | 159 | &pio { 160 | mmc0_pins_default: mmc0-pins-default { 161 | mux { 162 | function = "flash"; 163 | groups = "emmc_51"; 164 | }; 165 | conf-cmd-dat { 166 | pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2", 167 | "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5", 168 | "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD"; 169 | input-enable; 170 | drive-strength = ; 171 | mediatek,pull-up-adv = <1>; 172 | }; 173 | conf-clk { 174 | pins = "EMMC_CK"; 175 | drive-strength = ; 176 | mediatek,pull-down-adv = <2>; 177 | }; 178 | conf-ds { 179 | pins = "EMMC_DSL"; 180 | mediatek,pull-down-adv = <2>; 181 | }; 182 | conf-rst { 183 | pins = "EMMC_RSTB"; 184 | drive-strength = ; 185 | mediatek,pull-up-adv = <1>; 186 | }; 187 | }; 188 | 189 | mmc0_pins_uhs: mmc0-uhs-pins { 190 | mux { 191 | function = "flash"; 192 | groups = "emmc_51"; 193 | }; 194 | conf-cmd-dat { 195 | pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2", 196 | "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5", 197 | "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD"; 198 | input-enable; 199 | drive-strength = ; 200 | mediatek,pull-up-adv = <1>; 201 | }; 202 | conf-clk { 203 | pins = "EMMC_CK"; 204 | drive-strength = ; 205 | mediatek,pull-down-adv = <2>; 206 | }; 207 | conf-ds { 208 | pins = "EMMC_DSL"; 209 | mediatek,pull-down-adv = <2>; 210 | }; 211 | conf-rst { 212 | pins = "EMMC_RSTB"; 213 | drive-strength = ; 214 | mediatek,pull-up-adv = <1>; 215 | }; 216 | }; 217 | 218 | wf_2g_5g_pins: wf-2g-5g-pins { 219 | mux { 220 | function = "wifi"; 221 | groups = "wf_2g", "wf_5g"; 222 | }; 223 | conf { 224 | pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4", 225 | "WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6", 226 | "WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10", 227 | "WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1", 228 | "WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0", 229 | "WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8", 230 | "WF1_TOP_CLK", "WF1_TOP_DATA"; 231 | drive-strength = ; 232 | }; 233 | }; 234 | }; 235 | 236 | &switch { 237 | ports { 238 | #address-cells = <1>; 239 | #size-cells = <0>; 240 | 241 | port@1 { 242 | reg = <1>; 243 | label = "lan1"; 244 | }; 245 | 246 | port@2 { 247 | reg = <2>; 248 | label = "lan2"; 249 | }; 250 | 251 | port@3 { 252 | reg = <3>; 253 | label = "lan3"; 254 | }; 255 | 256 | port@4 { 257 | reg = <4>; 258 | label = "lan4"; 259 | }; 260 | 261 | port@6 { 262 | reg = <6>; 263 | label = "cpu"; 264 | ethernet = <&gmac0>; 265 | phy-mode = "2500base-x"; 266 | 267 | fixed-link { 268 | speed = <2500>; 269 | full-duplex; 270 | pause; 271 | }; 272 | }; 273 | }; 274 | }; 275 | 276 | &uart0 { 277 | status = "okay"; 278 | }; 279 | 280 | &watchdog { 281 | status = "okay"; 282 | }; 283 | 284 | &wbsys { 285 | pinctrl-names = "default"; 286 | pinctrl-0 = <&wf_2g_5g_pins>; 287 | status = "okay"; 288 | }; 289 | -------------------------------------------------------------------------------- /JDCloud-AX6000-Baili-hanwckf/mt7986a-gsw-jdcloud-re-cp-03.dts: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: GPL-2.0-or-later OR MIT 2 | 3 | /dts-v1/; 4 | #include 5 | #include 6 | #include 7 | 8 | #include "mt7986a.dtsi" 9 | #include "mt7986a-pinctrl.dtsi" 10 | 11 | / { 12 | model = "JDCloud RE-CP-03"; 13 | compatible = "jdcloud,re-cp-03", "mediatek,mt7986a"; 14 | 15 | aliases { 16 | led-boot = &red_led; 17 | led-failsafe = &red_led; 18 | led-running = &green_led; 19 | led-upgrade = &green_led; 20 | }; 21 | 22 | chosen { 23 | bootargs = "console=ttyS0,115200n1 loglevel=8 \ 24 | earlycon=uart8250,mmio32,0x11002000 \ 25 | root=PARTLABEL=rootfs rootwait rootfstype=squashfs,f2fs"; 26 | }; 27 | 28 | memory { 29 | reg = <0 0x40000000 0 0x40000000>; 30 | }; 31 | 32 | gsw: gsw@0 { 33 | compatible = "mediatek,mt753x"; 34 | mediatek,ethsys = <ðsys>; 35 | #address-cells = <1>; 36 | #size-cells = <0>; 37 | }; 38 | 39 | gpio-keys { 40 | compatible = "gpio-keys"; 41 | 42 | button-joylink { 43 | label = "joylink"; 44 | linux,code = ; 45 | gpios = <&pio 10 GPIO_ACTIVE_LOW>; 46 | }; 47 | 48 | button-reset { 49 | label = "reset"; 50 | linux,code = ; 51 | gpios = <&pio 9 GPIO_ACTIVE_LOW>; 52 | }; 53 | }; 54 | 55 | gpio-leds { 56 | compatible = "gpio-leds"; 57 | 58 | led-0 { 59 | label = "blue:status"; 60 | gpios = <&pio 7 GPIO_ACTIVE_HIGH>; 61 | }; 62 | 63 | red_led: led-1 { 64 | label = "red:status"; 65 | gpios = <&pio 11 GPIO_ACTIVE_HIGH>; 66 | }; 67 | 68 | green_led: led-2 { 69 | label = "green:status"; 70 | gpios = <&pio 12 GPIO_ACTIVE_LOW>; 71 | }; 72 | }; 73 | 74 | reg_1p8v: regulator-1p8v { 75 | compatible = "regulator-fixed"; 76 | regulator-name = "fixed-1.8V"; 77 | regulator-min-microvolt = <1800000>; 78 | regulator-max-microvolt = <1800000>; 79 | regulator-boot-on; 80 | regulator-always-on; 81 | }; 82 | 83 | reg_3p3v: regulator-3p3v { 84 | compatible = "regulator-fixed"; 85 | regulator-name = "fixed-3.3V"; 86 | regulator-min-microvolt = <3300000>; 87 | regulator-max-microvolt = <3300000>; 88 | regulator-boot-on; 89 | regulator-always-on; 90 | }; 91 | }; 92 | 93 | ð { 94 | status = "okay"; 95 | 96 | gmac0: mac@0 { 97 | compatible = "mediatek,eth-mac"; 98 | reg = <0>; 99 | phy-mode = "2500base-x"; 100 | 101 | fixed-link { 102 | speed = <2500>; 103 | full-duplex; 104 | pause; 105 | }; 106 | }; 107 | 108 | gmac1: mac@1 { 109 | compatible = "mediatek,eth-mac"; 110 | reg = <1>; 111 | phy-mode = "2500base-x"; 112 | 113 | ext-phy-reg = <6>; 114 | ext-phy-reset-gpios = <&pio 6 0>; 115 | 116 | fixed-link { 117 | speed = <2500>; 118 | full-duplex; 119 | pause; 120 | }; 121 | }; 122 | 123 | mdio: mdio-bus { 124 | #address-cells = <1>; 125 | #size-cells = <0>; 126 | 127 | phy5: phy@5 { 128 | compatible = "ethernet-phy-id67c9.de0a"; 129 | reg = <5>; 130 | }; 131 | 132 | phy6: phy@6 { 133 | compatible = "ethernet-phy-ieee802.3-c45"; 134 | reg = <6>; 135 | }; 136 | }; 137 | }; 138 | 139 | &hnat { 140 | mtketh-wan = "eth1"; 141 | mtketh-lan = "eth0"; 142 | mtketh-max-gmac = <2>; 143 | status = "okay"; 144 | }; 145 | 146 | &gsw { 147 | mediatek,mdio = <&mdio>; 148 | mediatek,portmap = "lllll"; 149 | mediatek,mdio_master_pinmux = <0>; 150 | reset-gpios = <&pio 5 0>; 151 | interrupt-parent = <&pio>; 152 | interrupts = <66 IRQ_TYPE_LEVEL_HIGH>; 153 | status = "okay"; 154 | 155 | port5: port@5 { 156 | compatible = "mediatek,mt753x-port"; 157 | reg = <5>; 158 | phy-mode = "sgmii"; 159 | 160 | fixed-link { 161 | speed = <2500>; 162 | full-duplex; 163 | }; 164 | }; 165 | 166 | port6: port@6 { 167 | compatible = "mediatek,mt753x-port"; 168 | mediatek,ssc-on; 169 | reg = <6>; 170 | phy-mode = "sgmii"; 171 | fixed-link { 172 | speed = <2500>; 173 | full-duplex; 174 | }; 175 | }; 176 | }; 177 | 178 | &mmc0 { 179 | bus-width = <8>; 180 | cap-mmc-highspeed; 181 | hs400-ds-delay = <0x14014>; 182 | max-frequency = <200000000>; 183 | mmc-hs200-1_8v; 184 | mmc-hs400-1_8v; 185 | no-sd; 186 | no-sdio; 187 | non-removable; 188 | pinctrl-names = "default", "state_uhs"; 189 | pinctrl-0 = <&mmc0_pins_default>; 190 | pinctrl-1 = <&mmc0_pins_uhs>; 191 | vmmc-supply = <®_3p3v>; 192 | vqmmc-supply = <®_1p8v>; 193 | status = "okay"; 194 | }; 195 | 196 | &pio { 197 | mmc0_pins_default: mmc0-pins-default { 198 | mux { 199 | function = "flash"; 200 | groups = "emmc_51"; 201 | }; 202 | conf-cmd-dat { 203 | pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2", 204 | "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5", 205 | "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD"; 206 | input-enable; 207 | drive-strength = ; 208 | mediatek,pull-up-adv = <1>; 209 | }; 210 | conf-clk { 211 | pins = "EMMC_CK"; 212 | drive-strength = ; 213 | mediatek,pull-down-adv = <2>; 214 | }; 215 | conf-ds { 216 | pins = "EMMC_DSL"; 217 | mediatek,pull-down-adv = <2>; 218 | }; 219 | conf-rst { 220 | pins = "EMMC_RSTB"; 221 | drive-strength = ; 222 | mediatek,pull-up-adv = <1>; 223 | }; 224 | }; 225 | 226 | mmc0_pins_uhs: mmc0-uhs-pins { 227 | mux { 228 | function = "flash"; 229 | groups = "emmc_51"; 230 | }; 231 | conf-cmd-dat { 232 | pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2", 233 | "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5", 234 | "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD"; 235 | input-enable; 236 | drive-strength = ; 237 | mediatek,pull-up-adv = <1>; 238 | }; 239 | conf-clk { 240 | pins = "EMMC_CK"; 241 | drive-strength = ; 242 | mediatek,pull-down-adv = <2>; 243 | }; 244 | conf-ds { 245 | pins = "EMMC_DSL"; 246 | mediatek,pull-down-adv = <2>; 247 | }; 248 | conf-rst { 249 | pins = "EMMC_RSTB"; 250 | drive-strength = ; 251 | mediatek,pull-up-adv = <1>; 252 | }; 253 | }; 254 | 255 | wf_2g_5g_pins: wf-2g-5g-pins { 256 | mux { 257 | function = "wifi"; 258 | groups = "wf_2g", "wf_5g"; 259 | }; 260 | conf { 261 | pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4", 262 | "WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6", 263 | "WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10", 264 | "WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1", 265 | "WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0", 266 | "WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8", 267 | "WF1_TOP_CLK", "WF1_TOP_DATA"; 268 | drive-strength = ; 269 | }; 270 | }; 271 | }; 272 | 273 | &uart0 { 274 | status = "okay"; 275 | }; 276 | 277 | &watchdog { 278 | status = "okay"; 279 | }; 280 | 281 | &wbsys { 282 | pinctrl-names = "default"; 283 | pinctrl-0 = <&wf_2g_5g_pins>; 284 | status = "okay"; 285 | }; 286 | -------------------------------------------------------------------------------- /JDCloud-AX6000-Baili-immortalwrt/diy-part1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright (c) 2019-2020 P3TERX 4 | # 5 | # This is free software, licensed under the MIT License. 6 | # See /LICENSE for more information. 7 | # 8 | # https://github.com/P3TERX/Actions-OpenWrt 9 | # File name: diy-part1.sh 10 | # Description: OpenWrt DIY script part 1 (Before Update feeds) 11 | # 12 | 13 | # Uncomment a feed source 14 | #sed -i 's/^#\(.*helloworld\)/\1/' feeds.conf.default 15 | 16 | # Add a feed source 17 | #echo 'src-git helloworld https://github.com/fw876/helloworld' >>feeds.conf.default 18 | #echo 'src-git passwall https://github.com/xiaorouji/openwrt-passwall' >>feeds.conf.default 19 | #git clone https://github.com/messense/aliyundrive-webdav package/messense 20 | git clone https://github.com/gdy666/luci-app-lucky package/lucky 21 | git clone https://github.com/destan19/OpenAppFilter package/OpenAppFilter 22 | -------------------------------------------------------------------------------- /JDCloud-AX6000-Baili-immortalwrt/diy-part2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright (c) 2019-2020 P3TERX 4 | # 5 | # This is free software, licensed under the MIT License. 6 | # See /LICENSE for more information. 7 | # 8 | # https://github.com/P3TERX/Actions-OpenWrt 9 | # File name: diy-part2.sh 10 | # Description: OpenWrt DIY script part 2 (After Update feeds) 11 | # 12 | 13 | # Modify default IP 14 | #sed -i 's/192.168.1.1/192.168.50.5/g' package/base-files/files/bin/config_generate 15 | ##-----------------Del duplicate packages------------------ 16 | rm -rf feeds/packages/net/open-app-filter 17 | ##-----------------Add OpenClash dev core------------------ 18 | curl -sL -m 30 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/core/master/dev/clash-linux-arm64.tar.gz -o /tmp/clash.tar.gz 19 | tar zxvf /tmp/clash.tar.gz -C /tmp >/dev/null 2>&1 20 | chmod +x /tmp/clash >/dev/null 2>&1 21 | mkdir -p feeds/luci/applications/luci-app-openclash/root/etc/openclash/core 22 | mv /tmp/clash feeds/luci/applications/luci-app-openclash/root/etc/openclash/core/clash >/dev/null 2>&1 23 | rm -rf /tmp/clash.tar.gz >/dev/null 2>&1 24 | ##-----------------Delete DDNS's examples----------------- 25 | sed -i '/myddns_ipv4/,$d' feeds/packages/net/ddns-scripts/files/etc/config/ddns 26 | -------------------------------------------------------------------------------- /JDCloud-AX6000-Baili-immortalwrt/immortalwrt.config: -------------------------------------------------------------------------------- 1 | CONFIG_TARGET_mediatek=y 2 | CONFIG_TARGET_mediatek_filogic=y 3 | CONFIG_TARGET_mediatek_filogic_DEVICE_jdcloud_re-cp-03=y 4 | CONFIG_PACKAGE_default-settings-chn=y 5 | CONFIG_PACKAGE_luci-compat=y 6 | ##---------下面配置可自行修改------------- 7 | ## 主题皮肤 8 | CONFIG_PACKAGE_luci-theme-argon=y 9 | ## 外部软件源插件 10 | CONFIG_PACKAGE_luci-app-oaf=y 11 | CONFIG_PACKAGE_luci-app-lucky=y 12 | ## 默认feeds可选插件 13 | CONFIG_PACKAGE_luci-app-dockerman=y 14 | CONFIG_PACKAGE_luci-app-ttyd=y 15 | CONFIG_PACKAGE_luci-app-homeproxy=y 16 | CONFIG_PACKAGE_luci-app-passwall=y 17 | CONFIG_PACKAGE_luci-app-openclash=y 18 | CONFIG_PACKAGE_luci-app-ddns=y 19 | CONFIG_PACKAGE_ddns-scripts=y 20 | CONFIG_PACKAGE_ddns-scripts_aliyun=y 21 | CONFIG_PACKAGE_ddns-scripts-cloudflare=y 22 | CONFIG_PACKAGE_ddns-scripts-cnkuai=y 23 | CONFIG_PACKAGE_ddns-scripts-digitalocean=y 24 | CONFIG_PACKAGE_ddns-scripts-dnspod=y 25 | CONFIG_PACKAGE_ddns-scripts-dnspod-com=y 26 | CONFIG_PACKAGE_ddns-scripts-freedns=y 27 | CONFIG_PACKAGE_ddns-scripts-gandi=y 28 | CONFIG_PACKAGE_ddns-scripts-godaddy=y 29 | CONFIG_PACKAGE_ddns-scripts-noip=y 30 | CONFIG_PACKAGE_ddns-scripts-nsupdate=y 31 | CONFIG_PACKAGE_ddns-scripts-route53=y 32 | CONFIG_PACKAGE_luci-app-arpbind=y 33 | CONFIG_PACKAGE_luci-app-msd_lite=y 34 | CONFIG_PACKAGE_luci-app-wol=y 35 | CONFIG_PACKAGE_luci-app-vlmcsd=y 36 | CONFIG_PACKAGE_luci-app-eqos=y 37 | CONFIG_PACKAGE_luci-app-upnp=y 38 | CONFIG_PACKAGE_luci-app-samba4=y 39 | CONFIG_PACKAGE_luci-app-vsftpd=y 40 | CONFIG_PACKAGE_luci-app-zerotier=y 41 | CONFIG_PACKAGE_luci-app-openvpn-server=y 42 | CONFIG_PACKAGE_luci-app-ipsec-vpnserver-manyusers=y 43 | CONFIG_PACKAGE_tailscale=y 44 | CONFIG_PACKAGE_luci-proto-wireguard=y 45 | CONFIG_PACKAGE_qrencode=y 46 | CONFIG_PACKAGE_coremark=y 47 | CONFIG_PACKAGE_autocore=y 48 | CONFIG_PACKAGE_iperf3=y 49 | CONFIG_PACKAGE_vim=y 50 | CONFIG_PACKAGE_nano=y 51 | CONFIG_PACKAGE_zsh=y 52 | CONFIG_PACKAGE_gdisk=y 53 | CONFIG_PACKAGE_sgdisk=y 54 | CONFIG_PACKAGE_kmod-fuse=y 55 | CONFIG_PACKAGE_kmod-dm=y 56 | CONFIG_PACKAGE_kmod-br-netfilter=y 57 | CONFIG_PACKAGE_kmod-ikconfig=y 58 | CONFIG_PACKAGE_kmod-nf-ipvs=y 59 | CONFIG_PACKAGE_kmod-veth=y 60 | ## 针对eMMC加的一些文件系统和工具 61 | CONFIG_PACKAGE_automount=y 62 | CONFIG_PACKAGE_kmod-fs-ext4=y 63 | CONFIG_PACKAGE_kmod-fs-f2fs=y 64 | CONFIG_PACKAGE_e2fsprogs=y 65 | CONFIG_PACKAGE_f2fs-tools=y 66 | CONFIG_PACKAGE_lsblk=y 67 | CONFIG_PACKAGE_mmc-utils=y 68 | ## 内存压缩 69 | CONFIG_PACKAGE_zram-swap=y 70 | ## 其他 71 | # CONFIG_PKG_FORTIFY_SOURCE_1 is not set 72 | CONFIG_PKG_FORTIFY_SOURCE_2=y 73 | CONFIG_PACKAGE_blkid=y 74 | CONFIG_PACKAGE_blockd=y 75 | CONFIG_PACKAGE_ca-certificates=y 76 | CONFIG_PACKAGE_ethtool=y 77 | CONFIG_PACKAGE_htop=y 78 | CONFIG_PACKAGE_ip-bridge=y 79 | CONFIG_PACKAGE_ip6tables-extra=y 80 | CONFIG_PACKAGE_ip6tables-mod-nat=y 81 | CONFIG_PACKAGE_ipset=y 82 | CONFIG_PACKAGE_iptables-mod-conntrack-extra=y 83 | CONFIG_PACKAGE_iptables-mod-extra=y 84 | CONFIG_PACKAGE_iptables-mod-filter=y 85 | CONFIG_PACKAGE_iptables-mod-hashlimit=y 86 | CONFIG_PACKAGE_iptables-mod-iface=y 87 | CONFIG_PACKAGE_iptables-mod-ipmark=y 88 | CONFIG_PACKAGE_iptables-mod-ipopt=y 89 | CONFIG_PACKAGE_iptables-mod-iprange=y 90 | CONFIG_PACKAGE_iptables-mod-ipv4options=y 91 | CONFIG_PACKAGE_iptables-mod-nat-extra=y 92 | CONFIG_PACKAGE_iptables-mod-proto=y 93 | CONFIG_PACKAGE_iptables-mod-tee=y 94 | CONFIG_PACKAGE_iptables-mod-tproxy=y 95 | CONFIG_PACKAGE_iptables-mod-u32=y 96 | CONFIG_PACKAGE_iw=y 97 | CONFIG_PACKAGE_iwinfo=y 98 | CONFIG_PACKAGE_kmod-ata-core=y 99 | CONFIG_PACKAGE_kmod-ebtables=y 100 | CONFIG_PACKAGE_kmod-ebtables-ipv4=y 101 | CONFIG_PACKAGE_kmod-ebtables-ipv6=y 102 | CONFIG_PACKAGE_kmod-fs-autofs4=y 103 | CONFIG_PACKAGE_kmod-fs-vfat=y 104 | CONFIG_PACKAGE_kmod-ifb=y 105 | CONFIG_PACKAGE_kmod-inet-diag=y 106 | CONFIG_PACKAGE_kmod-ip6tables-extra=y 107 | CONFIG_PACKAGE_kmod-ipt-compat-xtables=y 108 | CONFIG_PACKAGE_kmod-ipt-conntrack-extra=y 109 | CONFIG_PACKAGE_kmod-ipt-extra=y 110 | CONFIG_PACKAGE_kmod-ipt-filter=y 111 | CONFIG_PACKAGE_kmod-ipt-hashlimit=y 112 | CONFIG_PACKAGE_kmod-ipt-iface=y 113 | CONFIG_PACKAGE_kmod-ipt-ipmark=y 114 | CONFIG_PACKAGE_kmod-ipt-ipopt=y 115 | CONFIG_PACKAGE_kmod-ipt-iprange=y 116 | CONFIG_PACKAGE_kmod-ipt-ipv4options=y 117 | CONFIG_PACKAGE_kmod-ipt-nat-extra=y 118 | CONFIG_PACKAGE_kmod-ipt-offload=y 119 | CONFIG_PACKAGE_kmod-ipt-proto=y 120 | CONFIG_PACKAGE_kmod-ipt-raw6=y 121 | CONFIG_PACKAGE_kmod-ipt-tee=y 122 | CONFIG_PACKAGE_kmod-ipt-tproxy=y 123 | CONFIG_PACKAGE_kmod-ipt-u32=y 124 | CONFIG_PACKAGE_kmod-nf-flow=y 125 | CONFIG_PACKAGE_kmod-nls-base=y 126 | CONFIG_PACKAGE_kmod-nls-cp437=y 127 | CONFIG_PACKAGE_kmod-nls-iso8859-1=y 128 | CONFIG_PACKAGE_kmod-nls-utf8=y 129 | CONFIG_PACKAGE_kmod-sched-core=y 130 | CONFIG_PACKAGE_kmod-scsi-core=y 131 | CONFIG_PACKAGE_kmod-tcp-bbr=y 132 | CONFIG_PACKAGE_kmod-tun=y 133 | CONFIG_PACKAGE_libatomic=y 134 | CONFIG_PACKAGE_libblkid=y 135 | CONFIG_PACKAGE_libcap-ng=y 136 | CONFIG_PACKAGE_libcbor=y 137 | CONFIG_PACKAGE_libevdev=y 138 | CONFIG_PACKAGE_libfido2=y 139 | CONFIG_PACKAGE_libipset=y 140 | CONFIG_PACKAGE_libncurses=y 141 | CONFIG_PACKAGE_libnl=y 142 | CONFIG_PACKAGE_libnl-core=y 143 | CONFIG_PACKAGE_libnl-genl=y 144 | CONFIG_PACKAGE_libnl-nf=y 145 | CONFIG_PACKAGE_libnl-route=y 146 | CONFIG_PACKAGE_libopenssl-afalg_sync=y 147 | CONFIG_PACKAGE_libopenssl-devcrypto=y 148 | CONFIG_PACKAGE_libpcap=y 149 | CONFIG_PACKAGE_libstdcpp=y 150 | CONFIG_PACKAGE_libudev-zero=y 151 | CONFIG_PACKAGE_openssh-keygen=y 152 | CONFIG_PACKAGE_openssh-sftp-server=y 153 | CONFIG_PACKAGE_openssl-util=y 154 | CONFIG_PACKAGE_resolveip=y 155 | CONFIG_PACKAGE_tc-tiny=y 156 | CONFIG_PACKAGE_tcpdump=y 157 | CONFIG_PACKAGE_terminfo=y 158 | CONFIG_PACKAGE_wireless-regdb=y 159 | CONFIG_PACKAGE_wireless-tools=y 160 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019-2020 P3TERX 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /RAX3000M-eMMC_XR30-eMMC-hanwckf/.mtwifi-cfg.config: -------------------------------------------------------------------------------- 1 | CONFIG_TARGET_mediatek=y 2 | CONFIG_TARGET_mediatek_mt7981=y 3 | CONFIG_TARGET_MULTI_PROFILE=y 4 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_cmcc_rax3000m-emmc=y 5 | CONFIG_TARGET_DEVICE_PACKAGES_mediatek_mt7981_DEVICE_cmcc_rax3000m-emmc="" 6 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_cmcc_xr30-emmc=y 7 | CONFIG_TARGET_DEVICE_PACKAGES_mediatek_mt7981_DEVICE_cmcc_xr30-emmc="" 8 | CONFIG_TARGET_PER_DEVICE_ROOTFS=y 9 | ##---------下面配置可自行修改------------- 10 | ## 主题皮肤 11 | CONFIG_PACKAGE_luci-theme-argon=y 12 | CONFIG_PACKAGE_luci-theme-design=y 13 | ## 外部插件 14 | CONFIG_PACKAGE_luci-app-oaf=y 15 | ## 内部插件 16 | CONFIG_PACKAGE_luci-app-dockerman=y 17 | CONFIG_PACKAGE_luci-app-ttyd=y 18 | CONFIG_PACKAGE_luci-app-passwall=y 19 | CONFIG_PACKAGE_luci-app-openclash=y 20 | CONFIG_PACKAGE_luci-app-ddns=y 21 | CONFIG_PACKAGE_ddns-scripts=y 22 | CONFIG_PACKAGE_ddns-scripts_aliyun=y 23 | CONFIG_PACKAGE_ddns-scripts-cloudflare=y 24 | CONFIG_PACKAGE_ddns-scripts-cnkuai=y 25 | CONFIG_PACKAGE_ddns-scripts-digitalocean=y 26 | CONFIG_PACKAGE_ddns-scripts-dnspod=y 27 | CONFIG_PACKAGE_ddns-scripts-dnspod-com=y 28 | CONFIG_PACKAGE_ddns-scripts-freedns=y 29 | CONFIG_PACKAGE_ddns-scripts-gandi=y 30 | CONFIG_PACKAGE_ddns-scripts-godaddy=y 31 | CONFIG_PACKAGE_ddns-scripts-noip=y 32 | CONFIG_PACKAGE_ddns-scripts-nsupdate=y 33 | CONFIG_PACKAGE_ddns-scripts-route53=y 34 | CONFIG_PACKAGE_luci-app-arpbind=y 35 | CONFIG_PACKAGE_luci-app-msd_lite=y 36 | CONFIG_PACKAGE_luci-app-lucky=y 37 | CONFIG_PACKAGE_luci-app-wol=y 38 | CONFIG_PACKAGE_luci-app-vlmcsd=y 39 | CONFIG_PACKAGE_luci-app-eqos-mtk=y 40 | CONFIG_PACKAGE_luci-app-upnp=y 41 | CONFIG_PACKAGE_luci-app-samba4=y 42 | CONFIG_PACKAGE_luci-app-vsftpd=y 43 | CONFIG_PACKAGE_luci-app-zerotier=y 44 | CONFIG_PACKAGE_luci-app-openvpn-server=y 45 | CONFIG_PACKAGE_luci-app-ipsec-vpnserver-manyusers=y 46 | CONFIG_PACKAGE_tailscale=y 47 | CONFIG_PACKAGE_luci-app-wireguard=y 48 | CONFIG_PACKAGE_qrencode=y 49 | CONFIG_PACKAGE_coremark=y 50 | CONFIG_PACKAGE_vim-full=y 51 | CONFIG_PACKAGE_zsh=y 52 | CONFIG_PACKAGE_gdisk=y 53 | CONFIG_PACKAGE_sgdisk=y 54 | ## 针对USB3加的一些插件和依赖 55 | ## RAX3000M eMMC默认配置已开启MT7981_USB_PKGS和luci-app-samba4 56 | ## MT7981_USB_PKGS := automount blkid blockdev fdisk \ 57 | ## kmod-nls-cp437 kmod-nls-iso8859-1 kmod-usb2 kmod-usb3 \ 58 | ## luci-app-usb-printer luci-i18n-usb-printer-zh-cn \ 59 | ## kmod-usb-net-rndis usbutils 60 | CONFIG_PACKAGE_luci-app-diskman=y 61 | CONFIG_PACKAGE_luci-app-qbittorrent=y 62 | CONFIG_PACKAGE_luci-app-usb3disable=y 63 | CONFIG_PACKAGE_luci-app-usb-printer=y 64 | CONFIG_PACKAGE_kmod-usb-net-huawei-cdc-ncm=y 65 | CONFIG_PACKAGE_kmod-usb-net-ipheth=y 66 | CONFIG_PACKAGE_kmod-usb-net-aqc111=y 67 | CONFIG_PACKAGE_kmod-usb-net-rtl8152-vendor=y 68 | CONFIG_PACKAGE_kmod-usb-net-sierrawireless=y 69 | CONFIG_PACKAGE_kmod-usb-ohci=y 70 | CONFIG_PACKAGE_kmod-usb-uhci=y 71 | CONFIG_PACKAGE_usb-modeswitch=y 72 | CONFIG_PACKAGE_sendat=y 73 | ## 7981_WWAN_PKGS 74 | CONFIG_PACKAGE_wwan=y 75 | CONFIG_PACKAGE_uqmi=y 76 | CONFIG_PACKAGE_modemmanager=y 77 | CONFIG_PACKAGE_luci-proto-modemmanager=y 78 | CONFIG_PACKAGE_luci-proto-qmi=y 79 | CONFIG_PACKAGE_kmod-usb-net-cdc-ether=y 80 | CONFIG_PACKAGE_kmod-usb-net-cdc-mbim=y 81 | CONFIG_PACKAGE_kmod-usb-net-cdc-ncm=y 82 | CONFIG_PACKAGE_kmod-usb-serial-option=y 83 | CONFIG_PACKAGE_kmod-usb-serial-qualcomm=y 84 | ## 在线安装alist所需依赖 85 | CONFIG_PACKAGE_kmod-fuse=y 86 | ## 在线安装docker所需依赖 87 | CONFIG_PACKAGE_kmod-dm=y 88 | CONFIG_PACKAGE_kmod-br-netfilter=y 89 | CONFIG_PACKAGE_kmod-ikconfig=y 90 | CONFIG_PACKAGE_kmod-nf-ipvs=y 91 | CONFIG_PACKAGE_kmod-veth=y 92 | ## 针对eMMC加的一些文件系统和工具 93 | CONFIG_PACKAGE_kmod-fs-ext4=y 94 | CONFIG_PACKAGE_kmod-fs-f2fs=y 95 | CONFIG_PACKAGE_e2fsprogs=y 96 | CONFIG_PACKAGE_f2fs-tools=y 97 | CONFIG_PACKAGE_lsblk=y 98 | CONFIG_PACKAGE_mmc-utils=y 99 | ##---------下面默认配置不建议修改------------- 100 | ## 使用mtwifi-cfg无线配置 101 | CONFIG_PACKAGE_luci-app-mtwifi-cfg=y 102 | CONFIG_PACKAGE_luci-i18n-mtwifi-cfg-zh-cn=y 103 | CONFIG_PACKAGE_mtwifi-cfg=y 104 | CONFIG_PACKAGE_lua-cjson=y 105 | ## 使用新的无线驱动 106 | CONFIG_MTK_MT_WIFI_DRIVER_VERSION_7672=y 107 | CONFIG_MTK_MT_WIFI_MT7981_20240823=y 108 | ## 其他默认配置 109 | CONFIG_DEVEL=y 110 | CONFIG_TOOLCHAINOPTS=y 111 | CONFIG_BUSYBOX_CUSTOM=y 112 | CONFIG_AFALG_UPDATE_CTR_IV=y 113 | CONFIG_BUSYBOX_CONFIG_BLKID=y 114 | CONFIG_BUSYBOX_CONFIG_FEATURE_BLKID_TYPE=y 115 | CONFIG_BUSYBOX_CONFIG_VOLUMEID=y 116 | CONFIG_CONNINFRA_AUTO_UP=y 117 | CONFIG_CONNINFRA_EMI_SUPPORT=y 118 | # CONFIG_GDB is not set 119 | CONFIG_INCLUDE_CONFIG=y 120 | CONFIG_JSON_OVERVIEW_IMAGE_INFO=y 121 | # CONFIG_KERNEL_BLK_DEV_THROTTLING is not set 122 | # CONFIG_KERNEL_CFS_BANDWIDTH is not set 123 | CONFIG_KERNEL_CGROUP_DEVICE=y 124 | CONFIG_KERNEL_CGROUP_FREEZER=y 125 | CONFIG_KERNEL_DEVMEM=y 126 | # CONFIG_KERNEL_KEYS is not set 127 | # CONFIG_KERNEL_MEMCG_SWAP is not set 128 | CONFIG_KERNEL_NET_CLS_CGROUP=y 129 | CONFIG_MTK_ACK_CTS_TIMEOUT_SUPPORT=y 130 | CONFIG_MTK_AIR_MONITOR=y 131 | CONFIG_MTK_AMPDU_CONF_SUPPORT=y 132 | CONFIG_MTK_ANTENNA_CONTROL_SUPPORT=y 133 | CONFIG_MTK_APCLI_SUPPORT=y 134 | CONFIG_MTK_ATE_SUPPORT=y 135 | CONFIG_MTK_BACKGROUND_SCAN_SUPPORT=y 136 | CONFIG_MTK_CAL_BIN_FILE_SUPPORT=y 137 | CONFIG_MTK_CFG_SUPPORT_FALCON_MURU=y 138 | CONFIG_MTK_CFG_SUPPORT_FALCON_PP=y 139 | CONFIG_MTK_CFG_SUPPORT_FALCON_SR=y 140 | CONFIG_MTK_CFG_SUPPORT_FALCON_TXCMD_DBG=y 141 | CONFIG_MTK_CHIP_MT7981=y 142 | CONFIG_MTK_CONNINFRA_APSOC=y 143 | CONFIG_MTK_CONNINFRA_APSOC_MT7981=y 144 | CONFIG_MTK_CON_WPS_SUPPORT=y 145 | CONFIG_MTK_DBDC_MODE=y 146 | CONFIG_MTK_DOT11K_RRM_SUPPORT=y 147 | CONFIG_MTK_DOT11R_FT_SUPPORT=y 148 | CONFIG_MTK_DOT11W_PMF_SUPPORT=y 149 | CONFIG_MTK_DOT11_HE_AX=y 150 | CONFIG_MTK_DOT11_N_SUPPORT=y 151 | CONFIG_MTK_DOT11_VHT_AC=y 152 | CONFIG_MTK_FAST_NAT_SUPPORT=y 153 | CONFIG_MTK_FIRST_IF_EEPROM_FLASH=y 154 | CONFIG_MTK_FIRST_IF_IPAILNA=y 155 | CONFIG_MTK_FIRST_IF_MT7981=y 156 | CONFIG_MTK_GREENAP_SUPPORT=y 157 | CONFIG_MTK_G_BAND_256QAM_SUPPORT=y 158 | CONFIG_MTK_HDR_TRANS_RX_SUPPORT=y 159 | CONFIG_MTK_HDR_TRANS_TX_SUPPORT=y 160 | CONFIG_MTK_ICAP_SUPPORT=y 161 | CONFIG_MTK_IGMP_SNOOP_SUPPORT=y 162 | CONFIG_MTK_INTERWORKING=y 163 | CONFIG_MTK_MAP_R2_VER_SUPPORT=y 164 | CONFIG_MTK_MAP_R3_VER_SUPPORT=y 165 | CONFIG_MTK_MAP_SUPPORT=y 166 | CONFIG_MTK_MBSS_DTIM_SUPPORT=y 167 | CONFIG_MTK_MBSS_SUPPORT=y 168 | CONFIG_MTK_MCAST_RATE_SPECIFIC=y 169 | CONFIG_MTK_MEMORY_SHRINK=y 170 | CONFIG_MTK_MEMORY_SHRINK_AGGRESS=y 171 | CONFIG_MTK_MGMT_TXPWR_CTRL=y 172 | CONFIG_MTK_MLME_MULTI_QUEUE_SUPPORT=y 173 | CONFIG_MTK_MT_AP_SUPPORT=m 174 | CONFIG_MTK_MT_DFS_SUPPORT=y 175 | CONFIG_MTK_MT_MAC=y 176 | CONFIG_MTK_MT_WIFI=m 177 | CONFIG_MTK_MT_WIFI_PATH="mt_wifi" 178 | CONFIG_MTK_MUMIMO_SUPPORT=y 179 | CONFIG_MTK_MU_RA_SUPPORT=y 180 | CONFIG_MTK_OFFCHANNEL_SCAN_FEATURE=y 181 | CONFIG_MTK_OWE_SUPPORT=y 182 | CONFIG_MTK_QOS_R1_SUPPORT=y 183 | CONFIG_MTK_RA_PHY_RATE_SUPPORT=y 184 | CONFIG_MTK_RED_SUPPORT=y 185 | CONFIG_MTK_RTMP_FLASH_SUPPORT=y 186 | CONFIG_MTK_RT_FIRST_CARD_EEPROM="flash" 187 | CONFIG_MTK_RT_FIRST_IF_RF_OFFSET=0xc0000 188 | CONFIG_MTK_SCS_FW_OFFLOAD=y 189 | CONFIG_MTK_SECOND_IF_NONE=y 190 | CONFIG_MTK_SMART_CARRIER_SENSE_SUPPORT=y 191 | CONFIG_MTK_SPECTRUM_SUPPORT=y 192 | CONFIG_MTK_SUPPORT_OPENWRT=y 193 | CONFIG_MTK_THIRD_IF_NONE=y 194 | CONFIG_MTK_TPC_SUPPORT=y 195 | CONFIG_MTK_TXBF_SUPPORT=y 196 | CONFIG_MTK_UAPSD=y 197 | CONFIG_MTK_VLAN_SUPPORT=y 198 | CONFIG_MTK_VOW_SUPPORT=y 199 | CONFIG_MTK_WARP_V2=y 200 | CONFIG_MTK_WDS_SUPPORT=y 201 | CONFIG_MTK_WHNAT_SUPPORT=m 202 | CONFIG_MTK_WIFI_BASIC_FUNC=y 203 | CONFIG_MTK_WIFI_DRIVER=y 204 | CONFIG_MTK_WIFI_EAP_FEATURE=y 205 | CONFIG_MTK_WIFI_FW_BIN_LOAD=y 206 | CONFIG_MTK_WIFI_MODE_AP=m 207 | CONFIG_MTK_WIFI_MT_MAC=y 208 | CONFIG_MTK_WIFI_TWT_SUPPORT=y 209 | CONFIG_MTK_WLAN_HOOK=y 210 | CONFIG_MTK_WLAN_SERVICE=y 211 | CONFIG_MTK_WNM_SUPPORT=y 212 | CONFIG_MTK_WPA3_SUPPORT=y 213 | CONFIG_MTK_WSC_INCLUDED=y 214 | CONFIG_MTK_WSC_V2_SUPPORT=y 215 | # CONFIG_OPENSSL_ENGINE_BUILTIN is not set 216 | # CONFIG_OPENSSL_PREFER_CHACHA_OVER_GCM is not set 217 | CONFIG_OPENSSL_WITH_NPN=y 218 | # CONFIG_PACKAGE_TURBOACC_INCLUDE_FLOW_OFFLOADING is not set 219 | CONFIG_PACKAGE_TURBOACC_INCLUDE_NO_FASTPATH=y 220 | CONFIG_PACKAGE_blockd=y 221 | CONFIG_PACKAGE_ca-certificates=y 222 | CONFIG_PACKAGE_datconf=y 223 | CONFIG_PACKAGE_datconf-lua=y 224 | CONFIG_PACKAGE_ebtables=y 225 | CONFIG_PACKAGE_ethtool=y 226 | CONFIG_PACKAGE_htop=y 227 | CONFIG_PACKAGE_ip-bridge=y 228 | CONFIG_PACKAGE_ip6tables-extra=y 229 | CONFIG_PACKAGE_ipset=y 230 | CONFIG_PACKAGE_iptables-mod-conntrack-extra=y 231 | CONFIG_PACKAGE_iptables-mod-extra=y 232 | CONFIG_PACKAGE_iptables-mod-filter=y 233 | CONFIG_PACKAGE_iptables-mod-hashlimit=y 234 | CONFIG_PACKAGE_iptables-mod-iface=y 235 | CONFIG_PACKAGE_iptables-mod-ipmark=y 236 | CONFIG_PACKAGE_iptables-mod-ipopt=y 237 | CONFIG_PACKAGE_iptables-mod-iprange=y 238 | CONFIG_PACKAGE_iptables-mod-ipv4options=y 239 | CONFIG_PACKAGE_iptables-mod-nat-extra=y 240 | CONFIG_PACKAGE_iptables-mod-proto=y 241 | CONFIG_PACKAGE_iptables-mod-tee=y 242 | CONFIG_PACKAGE_iptables-mod-tproxy=y 243 | CONFIG_PACKAGE_iptables-mod-u32=y 244 | CONFIG_PACKAGE_iw=y 245 | CONFIG_PACKAGE_iwinfo=y 246 | CONFIG_PACKAGE_kmod-ata-core=y 247 | CONFIG_PACKAGE_kmod-conninfra=y 248 | CONFIG_PACKAGE_kmod-crypto-acompress=y 249 | CONFIG_PACKAGE_kmod-crypto-ccm=y 250 | CONFIG_PACKAGE_kmod-crypto-cmac=y 251 | CONFIG_PACKAGE_kmod-crypto-crc32c=y 252 | CONFIG_PACKAGE_kmod-crypto-ctr=y 253 | CONFIG_PACKAGE_kmod-crypto-des=y 254 | CONFIG_PACKAGE_kmod-crypto-gcm=y 255 | CONFIG_PACKAGE_kmod-crypto-gf128=y 256 | CONFIG_PACKAGE_kmod-crypto-ghash=y 257 | CONFIG_PACKAGE_kmod-crypto-hmac=y 258 | CONFIG_PACKAGE_kmod-crypto-md4=y 259 | CONFIG_PACKAGE_kmod-crypto-md5=y 260 | CONFIG_PACKAGE_kmod-crypto-rng=y 261 | CONFIG_PACKAGE_kmod-crypto-seqiv=y 262 | CONFIG_PACKAGE_kmod-crypto-sha256=y 263 | CONFIG_PACKAGE_kmod-crypto-sha512=y 264 | CONFIG_PACKAGE_kmod-ebtables=y 265 | CONFIG_PACKAGE_kmod-ebtables-ipv4=y 266 | CONFIG_PACKAGE_kmod-ebtables-ipv6=y 267 | CONFIG_PACKAGE_kmod-fs-autofs4=y 268 | CONFIG_PACKAGE_kmod-fs-vfat=y 269 | CONFIG_PACKAGE_kmod-ifb=y 270 | CONFIG_PACKAGE_kmod-inet-diag=y 271 | CONFIG_PACKAGE_kmod-ip6tables-extra=y 272 | CONFIG_PACKAGE_kmod-ipt-compat-xtables=y 273 | CONFIG_PACKAGE_kmod-ipt-conntrack-extra=y 274 | CONFIG_PACKAGE_kmod-ipt-extra=y 275 | CONFIG_PACKAGE_kmod-ipt-filter=y 276 | CONFIG_PACKAGE_kmod-ipt-hashlimit=y 277 | CONFIG_PACKAGE_kmod-ipt-iface=y 278 | CONFIG_PACKAGE_kmod-ipt-ipmark=y 279 | CONFIG_PACKAGE_kmod-ipt-ipopt=y 280 | CONFIG_PACKAGE_kmod-ipt-iprange=y 281 | CONFIG_PACKAGE_kmod-ipt-ipv4options=y 282 | CONFIG_PACKAGE_kmod-ipt-nat-extra=y 283 | CONFIG_PACKAGE_kmod-ipt-offload=y 284 | CONFIG_PACKAGE_kmod-ipt-proto=y 285 | CONFIG_PACKAGE_kmod-ipt-raw6=y 286 | CONFIG_PACKAGE_kmod-ipt-tee=y 287 | CONFIG_PACKAGE_kmod-ipt-tproxy=y 288 | CONFIG_PACKAGE_kmod-ipt-u32=y 289 | CONFIG_PACKAGE_kmod-lib-crc32c=y 290 | CONFIG_PACKAGE_kmod-lib-lzo=y 291 | CONFIG_PACKAGE_kmod-mediatek_hnat=y 292 | CONFIG_PACKAGE_kmod-mt_wifi=y 293 | CONFIG_PACKAGE_kmod-nf-flow=y 294 | CONFIG_PACKAGE_kmod-nls-base=y 295 | CONFIG_PACKAGE_kmod-nls-cp437=y 296 | CONFIG_PACKAGE_kmod-nls-iso8859-1=y 297 | CONFIG_PACKAGE_kmod-nls-utf8=y 298 | CONFIG_PACKAGE_kmod-sched-core=y 299 | CONFIG_PACKAGE_kmod-scsi-core=y 300 | CONFIG_PACKAGE_kmod-tcp-bbr=y 301 | CONFIG_PACKAGE_kmod-tun=y 302 | CONFIG_PACKAGE_kmod-warp=y 303 | CONFIG_PACKAGE_kmod-zram=y 304 | CONFIG_PACKAGE_kvcedit=y 305 | CONFIG_PACKAGE_libatomic=y 306 | CONFIG_PACKAGE_libblkid=y 307 | CONFIG_PACKAGE_libcap-ng=y 308 | CONFIG_PACKAGE_libcbor=y 309 | CONFIG_PACKAGE_libevdev=y 310 | CONFIG_PACKAGE_libfido2=y 311 | CONFIG_PACKAGE_libipset=y 312 | CONFIG_PACKAGE_libkvcutil=y 313 | CONFIG_PACKAGE_libncurses=y 314 | CONFIG_PACKAGE_libnl=y 315 | CONFIG_PACKAGE_libnl-core=y 316 | CONFIG_PACKAGE_libnl-genl=y 317 | CONFIG_PACKAGE_libnl-nf=y 318 | CONFIG_PACKAGE_libnl-route=y 319 | CONFIG_PACKAGE_libopenssl-afalg_sync=y 320 | CONFIG_PACKAGE_libopenssl-devcrypto=y 321 | CONFIG_PACKAGE_libpcap=y 322 | CONFIG_PACKAGE_libstdcpp=y 323 | CONFIG_PACKAGE_libudev-zero=y 324 | CONFIG_PACKAGE_libuuid=y 325 | # CONFIG_PACKAGE_luci-app-rclone_INCLUDE_rclone-ng is not set 326 | # CONFIG_PACKAGE_luci-app-rclone_INCLUDE_rclone-webui is not set 327 | # CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_ChinaDNS_NG is not set 328 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_NONE_V2RAY=y 329 | # CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_ShadowsocksR_Libev_Client is not set 330 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_NONE_Client=y 331 | CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_NONE_Server=y 332 | # CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Client is not set 333 | # CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Server is not set 334 | # CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Simple_Obfs is not set 335 | # CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Xray is not set 336 | CONFIG_PACKAGE_luci-app-turboacc-mtk=y 337 | # CONFIG_PACKAGE_luci-app-vssr_INCLUDE_ShadowsocksR_Libev_Server is not set 338 | # CONFIG_PACKAGE_luci-app-vssr_INCLUDE_Trojan is not set 339 | # CONFIG_PACKAGE_luci-app-vssr_INCLUDE_Xray is not set 340 | # CONFIG_PACKAGE_luci-app-vssr_INCLUDE_Xray_plugin is not set 341 | CONFIG_PACKAGE_luci-i18n-turboacc-mtk-zh-cn=y 342 | CONFIG_PACKAGE_mii_mgr=y 343 | CONFIG_PACKAGE_mtkhqos_util=y 344 | CONFIG_PACKAGE_nano=y 345 | CONFIG_PACKAGE_openssh-keygen=y 346 | CONFIG_PACKAGE_openssh-sftp-server=y 347 | CONFIG_PACKAGE_openssl-util=y 348 | CONFIG_PACKAGE_regs=y 349 | CONFIG_PACKAGE_resolveip=y 350 | CONFIG_PACKAGE_swconfig=y 351 | CONFIG_PACKAGE_switch=y 352 | CONFIG_PACKAGE_tc-mod-iptables=y 353 | CONFIG_PACKAGE_tc-tiny=y 354 | CONFIG_PACKAGE_tcpdump=y 355 | CONFIG_PACKAGE_terminfo=y 356 | CONFIG_PACKAGE_wifi-dats=y 357 | CONFIG_PACKAGE_wireless-regdb=y 358 | CONFIG_PACKAGE_wireless-tools=y 359 | CONFIG_PACKAGE_zram-swap=y 360 | # CONFIG_PKG_CHECK_FORMAT_SECURITY is not set 361 | # CONFIG_PKG_FORTIFY_SOURCE_1 is not set 362 | CONFIG_PKG_FORTIFY_SOURCE_2=y 363 | CONFIG_WARP_CHIPSET="mt7981" 364 | CONFIG_WARP_DBG_SUPPORT=y 365 | CONFIG_WARP_VERSION=2 366 | CONFIG_WED_HW_RRO_SUPPORT=y 367 | # CONFIG_WOLFSSL_HAS_ECC25519 is not set 368 | CONFIG_first_card=y 369 | CONFIG_first_card_name="MT7981" 370 | # CONFIG_AFALG_FALLBACK is not set 371 | # CONFIG_MTK_BAND_STEERING is not set 372 | # CONFIG_MTK_DEFAULT_5G_PROFILE is not set 373 | # CONFIG_MTK_MAC_REPEATER_SUPPORT is not set 374 | # CONFIG_MTK_MULTI_PROFILE_SUPPORT is not set 375 | # CONFIG_MTK_PCIE_ASPM_DYM_CTRL_SUPPORT is not set 376 | # CONFIG_MTK_PRE_CAL_TRX_SET1_SUPPORT is not set 377 | # CONFIG_MTK_PRE_CAL_TRX_SET2_SUPPORT is not set 378 | # CONFIG_MTK_RLM_CAL_CACHE_SUPPORT is not set 379 | # CONFIG_MTK_SNIFFER_RADIOTAP_SUPPORT is not set 380 | -------------------------------------------------------------------------------- /RAX3000M-eMMC_XR30-eMMC-hanwckf/diy-part1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright (c) 2019-2020 P3TERX 4 | # 5 | # This is free software, licensed under the MIT License. 6 | # See /LICENSE for more information. 7 | # 8 | # https://github.com/P3TERX/Actions-OpenWrt 9 | # File name: diy-part1.sh 10 | # Description: OpenWrt DIY script part 1 (Before Update feeds) 11 | # 12 | 13 | # Uncomment a feed source 14 | #sed -i 's/^#\(.*helloworld\)/\1/' feeds.conf.default 15 | 16 | # Add a feed source 17 | #echo 'src-git helloworld https://github.com/fw876/helloworld' >>feeds.conf.default 18 | #echo 'src-git passwall https://github.com/xiaorouji/openwrt-passwall' >>feeds.conf.default 19 | #git clone https://github.com/messense/aliyundrive-webdav package/messense 20 | git clone https://github.com/destan19/OpenAppFilter package/OpenAppFilter 21 | -------------------------------------------------------------------------------- /RAX3000M-eMMC_XR30-eMMC-hanwckf/diy-part2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright (c) 2019-2020 P3TERX 4 | # 5 | # This is free software, licensed under the MIT License. 6 | # See /LICENSE for more information. 7 | # 8 | # https://github.com/P3TERX/Actions-OpenWrt 9 | # File name: diy-part2.sh 10 | # Description: OpenWrt DIY script part 2 (After Update feeds) 11 | # 12 | 13 | # Modify default IP 14 | #sed -i 's/192.168.1.1/192.168.50.5/g' package/base-files/files/bin/config_generate 15 | ##-----------------Del duplicate packages------------------ 16 | rm -rf feeds/packages/net/open-app-filter 17 | ##-----------------Add OpenClash dev core------------------ 18 | curl -sL -m 30 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/core/master/dev/clash-linux-arm64.tar.gz -o /tmp/clash.tar.gz 19 | tar zxvf /tmp/clash.tar.gz -C /tmp >/dev/null 2>&1 20 | chmod +x /tmp/clash >/dev/null 2>&1 21 | mkdir -p feeds/luci/applications/luci-app-openclash/root/etc/openclash/core 22 | mv /tmp/clash feeds/luci/applications/luci-app-openclash/root/etc/openclash/core/clash >/dev/null 2>&1 23 | rm -rf /tmp/clash.tar.gz >/dev/null 2>&1 24 | ##-----------------Delete DDNS's examples----------------- 25 | sed -i '/myddns_ipv4/,$d' feeds/packages/net/ddns-scripts/files/etc/config/ddns 26 | ##-----------------Manually set CPU frequency for MT7981B----------------- 27 | sed -i '/"mediatek"\/\*|\"mvebu"\/\*/{n; s/.*/\tcpu_freq="1.3GHz" ;;/}' package/emortal/autocore/files/generic/cpuinfo 28 | -------------------------------------------------------------------------------- /RAX3000M-eMMC_XR30-eMMC-hanwckf/feeds.conf.default: -------------------------------------------------------------------------------- 1 | src-git-full packages https://github.com/lgs2007m/immortalwrt-mt798x-packages.git;openwrt-21.02 2 | src-git-full luci https://github.com/lgs2007m/immortalwrt-mt798x-luci.git;openwrt-21.02 3 | src-git-full routing https://github.com/openwrt/routing.git;openwrt-21.02 4 | src-git-full telephony https://github.com/openwrt/telephony.git;openwrt-21.02 5 | -------------------------------------------------------------------------------- /RAX3000M-eMMC_XR30-eMMC-hanwckf/mt7981-dsa-cmcc-rax3000m.dtsi: -------------------------------------------------------------------------------- 1 | /dts-v1/; 2 | #include "mt7981.dtsi" 3 | 4 | / { 5 | aliases { 6 | led-boot = &red_led; 7 | led-failsafe = &red_led; 8 | led-running = &green_led; 9 | led-upgrade = &blue_led; 10 | }; 11 | 12 | memory { 13 | reg = <0 0x40000000 0 0x20000000>; 14 | }; 15 | 16 | leds { 17 | compatible = "gpio-leds"; 18 | 19 | red_led: red { 20 | label = "rax3000m:red"; 21 | gpios = <&pio 35 GPIO_ACTIVE_LOW>; 22 | }; 23 | 24 | green_led: green { 25 | label = "rax3000m:green"; 26 | gpios = <&pio 9 GPIO_ACTIVE_LOW>; 27 | }; 28 | 29 | blue_led: blue { 30 | label = "rax3000m:blue"; 31 | gpios = <&pio 12 GPIO_ACTIVE_LOW>; 32 | }; 33 | }; 34 | 35 | gpio-keys { 36 | compatible = "gpio-keys"; 37 | reset { 38 | label = "reset"; 39 | linux,code = ; 40 | gpios = <&pio 1 GPIO_ACTIVE_LOW>; 41 | }; 42 | 43 | mesh { 44 | label = "mesh"; 45 | gpios = <&pio 0 GPIO_ACTIVE_LOW>; 46 | linux,code = ; 47 | linux,input-type = ; 48 | }; 49 | }; 50 | 51 | }; 52 | 53 | &uart0 { 54 | status = "okay"; 55 | }; 56 | 57 | &watchdog { 58 | status = "okay"; 59 | }; 60 | 61 | ð { 62 | status = "okay"; 63 | 64 | gmac0: mac@0 { 65 | compatible = "mediatek,eth-mac"; 66 | reg = <0>; 67 | phy-mode = "2500base-x"; 68 | 69 | fixed-link { 70 | speed = <2500>; 71 | full-duplex; 72 | pause; 73 | }; 74 | }; 75 | 76 | gmac1: mac@1 { 77 | compatible = "mediatek,eth-mac"; 78 | reg = <1>; 79 | phy-mode = "gmii"; 80 | phy-handle = <&phy0>; 81 | }; 82 | 83 | mdio: mdio-bus { 84 | #address-cells = <1>; 85 | #size-cells = <0>; 86 | 87 | phy0: ethernet-phy@0 { 88 | compatible = "ethernet-phy-id03a2.9461"; 89 | reg = <0>; 90 | phy-mode = "gmii"; 91 | nvmem-cells = <&phy_calibration>; 92 | nvmem-cell-names = "phy-cal-data"; 93 | }; 94 | 95 | switch@0 { 96 | compatible = "mediatek,mt7531"; 97 | reg = <31>; 98 | reset-gpios = <&pio 39 0>; 99 | 100 | ports { 101 | #address-cells = <1>; 102 | #size-cells = <0>; 103 | 104 | port@0 { 105 | reg = <0>; 106 | label = "lan3"; 107 | }; 108 | 109 | port@1 { 110 | reg = <1>; 111 | label = "lan2"; 112 | }; 113 | 114 | port@2 { 115 | reg = <2>; 116 | label = "lan1"; 117 | }; 118 | 119 | port@6 { 120 | reg = <6>; 121 | label = "cpu"; 122 | ethernet = <&gmac0>; 123 | phy-mode = "2500base-x"; 124 | 125 | fixed-link { 126 | speed = <2500>; 127 | full-duplex; 128 | pause; 129 | }; 130 | }; 131 | }; 132 | }; 133 | }; 134 | }; 135 | 136 | &hnat { 137 | mtketh-wan = "eth1"; 138 | mtketh-lan = "lan"; 139 | mtketh-max-gmac = <2>; 140 | status = "okay"; 141 | }; 142 | 143 | &xhci { 144 | mediatek,u3p-dis-msk = <0x0>; 145 | phys = <&u2port0 PHY_TYPE_USB2>, 146 | <&u3port0 PHY_TYPE_USB3>; 147 | status = "okay"; 148 | }; 149 | -------------------------------------------------------------------------------- /RAX3000M-eMMC_XR30-eMMC-hanwckf/mt79xx_20220907-8b55f5_eeprom.tar.xz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lgs2007m/Actions-OpenWrt/334a2cd2219ed6fe5b5c237a388ccf0d0b3139f6/RAX3000M-eMMC_XR30-eMMC-hanwckf/mt79xx_20220907-8b55f5_eeprom.tar.xz -------------------------------------------------------------------------------- /RAX3000M-eMMC_XR30-eMMC-hanwckf/mt79xx_20231229-4012a0_eeprom.tar.xz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lgs2007m/Actions-OpenWrt/334a2cd2219ed6fe5b5c237a388ccf0d0b3139f6/RAX3000M-eMMC_XR30-eMMC-hanwckf/mt79xx_20231229-4012a0_eeprom.tar.xz -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # 借助 GitHub Actions 的 OpenWrt 在线自动编译. 2 | 3 | #### hanwckf大佬mt798x闭源仓库- [hanwckf/immortalwrt-mt798x](https://github.com/hanwckf/immortalwrt-mt798x). 4 | 5 | #### 237大佬mt798x闭源仓库- [padavanonly/immortalwrt-mt798x](https://github.com/padavanonly/immortalwrt-mt798x). 6 | 7 | #### hanwckf大佬mt798x uboot仓库- [hanwckf/bl-mt798x](https://github.com/hanwckf/bl-mt798x). 8 | 9 | ### 刷砖也不怕!可以通过串口救砖:[MediaTek Filogic 系列路由器串口救砖教程](https://www.cnblogs.com/p123/p/18046679) 10 | 11 | ### 我的刷机教程:[Tutorial](https://github.com/lgs2007m/Actions-OpenWrt/tree/main/Tutorial) 12 | --- 13 | ## JDCloud-AX6000-Baili workflow 手动运行可选项: 14 | - Set LAN IP Address 15 | - Choose WiFi Driver 16 | - Choose Switch Driver 17 | - [ ] Use luci-app-mtk wifi config 18 | - [ ] Not build luci-app-dockerman 19 | 20 | - #### 说明 21 | 源码中的WAN、LAN地址顺序已修复并固定了WiFi MAC地址,交换机驱动已改为使用GSW 22 | 23 | - #### 1. Set LAN IP Address 24 | 设置LAN IP地址(路由器登录地址),默认192.168.1.1。 25 | 26 | - #### 2. Choose WiFi Driver 27 | 默认使用WiFi驱动版本v7.6.7.2-fw-20240823(recommend)。 28 | mt_wifi的firmware可选,warp默认使用v7.6.7.2配套的warp_20231229-5f71ec,firmware用驱动自带的,不可选。 29 | 驱动版本v7.6.7.2-fw-default不建议使用,我使用5G无线,电脑打CS2同时手机刷视频,CS2会延迟增高卡顿。 30 | 根据网络和ChatGPT查询,我理解: 31 | mt_wifi是MediaTek的WiFi驱动程序,主要用于控制无线网络功能,提供WiFi协议栈支持、无线电控制、连接管理等。 32 | warp是MediaTek的WiFi Warp Accelerator加速框架,通常用于WiFi网络数据处理的加速。 33 | mt_wifi和warp中的固件(firmware)是驱动程序与无线芯片之间的中间层。它通常被加载到无线芯片中,以控制其硬件功能,管理无线协议并处理数据传输,会影响无线性能和稳定性。 34 | v7.6.7.2-fw-20240823(recommend) 推荐,使用[mtk-openwrt-feeds(20240823)](https://git01.mediatek.com/plugins/gitiles/openwrt/feeds/mtk-openwrt-feeds/+/0fdbc0e6d84bbc0216da2842a494bdf01f745c6c) 35 | v7.6.6.1-fw-20230808(recommend) 推荐,使用提取自TP-XDR6088固件的fw-20230808 36 | v7.6.7.2-fw-default 使用驱动包自带firmware fw-20231229 37 | v7.6.6.1-fw-default 使用驱动包自带firmware fw-20220906 38 | 其他firmware可自行组合尝试: 39 | fw-20221208 使用mt7986-7.6.7.0-20221209-b9c02f-obj驱动包的fw-20221208 40 | fw-20230421 使用mtk-openwrt-feeds(20230421)的fw-20230421 41 | fw-20231024 使用mtk-openwrt-feeds(20231024)的fw-20231024 42 | ``` 43 | # SSH查看内核版本 44 | uname -a 45 | # 查看WiFi驱动版本 46 | iwpriv ra0 get_driverinfo 47 | # 查看WiFi驱动mt_wifi mt7986 firmware版本 48 | strings /lib/firmware/7986_WACPU_RAM_CODE_release.bin | grep -E '202[0-9]{6}' 49 | strings /lib/firmware/mt7986_patch_e1_hdr.bin | grep -E '202[0-9]{6}' 50 | strings /lib/firmware/mt7986_patch_e1_hdr_mt7975.bin | grep -E '202[0-9]{6}' 51 | strings /lib/firmware/WIFI_RAM_CODE_MT7986.bin | grep -E '202[0-9]{6}' 52 | strings /lib/firmware/WIFI_RAM_CODE_MT7986_MT7975.bin | grep -E '202[0-9]{6}' 53 | # 查看WiFi驱动warp mt7986 firmware版本 54 | strings /lib/firmware/7986_WOCPU0_RAM_CODE_release.bin | grep -E '202[0-9]{6}' 55 | strings /lib/firmware/7986_WOCPU1_RAM_CODE_release.bin | grep -E '202[0-9]{6}' 56 | ``` 57 | 58 | - #### 3. Choose Switch Driver 59 | 默认使用GSW交换机驱动,可选DSA交换机驱动。 60 | GSW:Gigabit Switch swconfig 模式,有交换机配置插件,不过京东云百里AX6000的WAN是单独接CPU的2.5G PHY RTL8221B,不接在MT7531交换机上,所以WAN不支持在交换机配置插件中设置VLAN。 61 | DSA:Distributed Switch Architecture 分布式交换架构模式,DSA没有单独的交换机配置插件,但在“网口”-“接口”-“设备”选项卡中的br-lan设备中的网桥VLAN过滤中可以查看网口状态设置VLAN。 62 | 百里原厂固件使用的是DSA,hanwckf大佬源码中百里的交换机驱动先前是DSA,听说在WAN、LAN互换时硬件加速可能失效,但是我测试了是正常的。 63 | 目前hanwckf大佬源码中百里已改为使用GSW,使用GSW在WAN、LAN互换时硬件加速正常,所以DSA、GSW随便用吧。 64 | 两者具体区别可以参考OpenWrt社区资料:[converting-to-dsa](https://openwrt.org/docs/guide-user/network/dsa/converting-to-dsa) [dsa-mini-tutorial](https://openwrt.org/docs/guide-user/network/dsa/dsa-mini-tutorial) 65 | 66 | - #### 4. Use luci-app-mtk wifi config 67 | 该选项默认关闭,即按.mtwifi-cfg.config配置文件,使用mtwifi-cfg配置工具,需要使用旧的luci-app-mtk无线配置工具请打钩。 68 | mtwifi-cfg:为mtwifi设计的无线配置工具,兼容openwrt原生luci和netifd,可调整无线驱动的参数较少,配置界面美观友好。 69 | luci-app-mtk:源自mtk-sdk提供的配置工具,需要配合wifi-profile脚本使用,可调整无线驱动的几乎所有参数,配置界面较为简陋。 70 | 区别详见大佬的博客[mtwifi无线配置工具说明](https://cmi.hanwckf.top/p/immortalwrt-mt798x/#mtwifi%E6%97%A0%E7%BA%BF%E9%85%8D%E7%BD%AE%E5%B7%A5%E5%85%B7%E8%AF%B4%E6%98%8E) 71 | .mtwifi-cfg.config配置文件中已设置使用mtwifi-cfg配置工具: 72 | CONFIG_PACKAGE_luci-app-mtwifi-cfg=y 73 | CONFIG_PACKAGE_luci-i18n-mtwifi-cfg-zh-cn=y 74 | CONFIG_PACKAGE_mtwifi-cfg=y 75 | CONFIG_PACKAGE_lua-cjson=y 76 | 77 | - #### 5. Not build luci-app-dockerman 78 | 该选项默认关闭,即按.mtwifi-cfg.config配置文件编译dockerman,不需要编译dockerman请打钩。 79 | .mtwifi-cfg.config配置文件中已设置编译dockerman: 80 | CONFIG_PACKAGE_luci-app-dockerman=y 81 | 82 | - #### Other 83 | 百里5G无线发射功率23dBm,2.4G发送功率25dBm。大佬们已研究出修改5G发射功率的方法。 84 | 其中各个功率十六进制数据代表如下: 85 | 23dBm x2A 86 | 24dBm x2B 87 | 25dBm x2C 或 x2D 88 | 百里直接SSH使用下面命令,软修改(即不修改factory分区)5G为24dBm,修改好之后reboot重启即可。 89 | MT7986_ePAeLNA_EEPROM_AX6000.bin文件只在固件第一次启动时从factory复制出来,所以修改一次即可。 90 | ``` 91 | hex_value='\x2B' 92 | printf "$hex_value%.0s" {1..20} > /tmp/tmp.bin 93 | dd if=/tmp/tmp.bin of=/lib/firmware/MT7986_ePAeLNA_EEPROM_AX6000.bin bs=1 seek=$((0x445)) conv=notrunc 94 | ``` 95 | 当然也可以直接硬修改factory分区,使得以后每次刷新固件都不用再修改了。 96 | 首先备份好原厂factory分区,然后修改MT7986_ePAeLNA_EEPROM_AX6000.bin并写入factory分区,再备份一次factory分区。 97 | 自行到tmp下载保存好备份,然后reboot重启即可。 98 | ``` 99 | hex_value='\x2B' 100 | printf "$hex_value%.0s" {1..20} > /tmp/tmp.bin 101 | dd if=$(blkid -t PARTLABEL=factory -o device) of=/tmp/mmcblk0px_factory_backup.bin conv=fsync 102 | dd if=/tmp/tmp.bin of=/lib/firmware/MT7986_ePAeLNA_EEPROM_AX6000.bin bs=1 seek=$((0x445)) conv=notrunc 103 | dd if=/tmp/tmp.bin of=$(blkid -t PARTLABEL=factory -o device) bs=1 seek=$((0x445)) conv=notrunc 104 | dd if=$(blkid -t PARTLABEL=factory -o device) of=/tmp/mmcblk0px_factory.bin conv=fsync 105 | ``` 106 | 107 | --- 108 | ## RAX3000M-eMMC/XR30-eMMC workflow 手动运行可选项: 109 | - Set LAN IP Address 110 | - Choose WiFi Driver 111 | - [x] Use nx30pro eeprom and fixed WiFi MAC address 112 | - [ ] Use luci-app-mtk wifi config 113 | - [ ] Not build luci-app-dockerman 114 | 115 | - #### 说明 116 | 源码中的WAN、LAN地址顺序已修复 117 | RAX3000M算力版(RAX3000M-eMMC)的eMMC默认使用26MHz频率 118 | RAX3000Z增强版(XR30-eMMC)的eMMC默认使用52MHz频率 119 | 120 | - #### 1. Set LAN IP Address 121 | 设置LAN IP地址(路由器登录地址),默认192.168.1.1。 122 | 123 | - #### 2. Choose WiFi Driver 124 | 默认使用WiFi驱动版本v7.6.7.2-fw-20240823(recommend)。 125 | mt_wifi的firmware可选,warp默认使用v7.6.7.2配套的warp_20231229-5f71ec,firmware用驱动自带的,不可选。 126 | 【mt7981的机子上未测试,建议直接使用推荐的选项。】 127 | 根据网络和ChatGPT查询,我理解: 128 | mt_wifi是MediaTek的WiFi驱动程序,主要用于控制无线网络功能,提供WiFi协议栈支持、无线电控制、连接管理等。 129 | warp是MediaTek的WiFi Warp Accelerator加速框架,通常用于WiFi网络数据处理的加速。 130 | mt_wifi和warp中的固件(firmware)是驱动程序与无线芯片之间的中间层。它通常被加载到无线芯片中,以控制其硬件功能,管理无线协议并处理数据传输,会影响无线性能和稳定性。 131 | v7.6.7.2-fw-20240823(recommend) 推荐,使用[mtk-openwrt-feeds(20240823)](https://git01.mediatek.com/plugins/gitiles/openwrt/feeds/mtk-openwrt-feeds/+/0fdbc0e6d84bbc0216da2842a494bdf01f745c6c) 132 | v7.6.6.1-fw-20230306(recommend) 推荐,使用提取自H3C-NX30Pro固件的fw-20230306 133 | v7.6.7.2-fw-default 使用驱动包自带firmware fw-20231229 134 | v7.6.6.1-fw-default 使用驱动包自带firmware fw-20220906 135 | 其他firmware可自行组合尝试: 136 | fw-20230330 使用提取自TP-XDR3030固件的fw-20230330 137 | fw-20230411 使用提取自H3C-NX30Pro固件的fw-20230411 138 | fw-20230717 使用提取自Xiaomi-AX3000T固件的fw-20230717 139 | fw-20231024 使用mtk-openwrt-feeds(20231024)的fw-20231024 140 | ``` 141 | # SSH查看内核版本 142 | uname -a 143 | # 查看WiFi驱动版本 144 | iwpriv ra0 get_driverinfo 145 | # 查看WiFi驱动mt_wifi mt7981 firmware版本 146 | strings /lib/firmware/7981_WACPU_RAM_CODE_release.bin | grep -E '202[0-9]{6}' 147 | strings /lib/firmware/mt7981_patch_e1_hdr.bin | grep -E '202[0-9]{6}' 148 | strings /lib/firmware/WIFI_RAM_CODE_MT7981.bin | grep -E '202[0-9]{6}' 149 | # 查看WiFi驱动warp mt7981 firmware版本 150 | strings /lib/firmware/7981_WOCPU0_RAM_CODE_release.bin | grep -E '202[0-9]{6}' 151 | ``` 152 | 153 | - #### 3. Use nx30pro eeprom and fixed WiFi MAC address 154 | 该选项默认开启,即使用nx30pro的高功率eeprom,不需要请取消打钩。 155 | 不使用独立fem无线功放的MT7981B路由器可以通过替换高功率的eeprom提高信号强度。 156 | RAX3000M/XR30的factory eeprom设置功率不高,2.4G是23dBm、5G是22dBm,使用NX30 PRO的高功率eeprom,2.4G可提升至25dBm、5G提升至24dBm。 157 | 开启该选项会使用NX30 PRO的eeprom替换掉固件中的MT7981_iPAiLNA_EEPROM.bin文件,并将facotry分区读取的MAC写入到dat以便固定WiFi MAC。 158 | 159 | - #### 4. Use luci-app-mtk wifi config 160 | 该选项默认关闭,即按.mtwifi-cfg.config配置文件,使用mtwifi-cfg配置工具,需要使用旧的luci-app-mtk无线配置工具请打钩。 161 | mtwifi-cfg:为mtwifi设计的无线配置工具,兼容openwrt原生luci和netifd,可调整无线驱动的参数较少,配置界面美观友好。 162 | luci-app-mtk:源自mtk-sdk提供的配置工具,需要配合wifi-profile脚本使用,可调整无线驱动的几乎所有参数,配置界面较为简陋。 163 | 区别详见大佬的博客[mtwifi无线配置工具说明](https://cmi.hanwckf.top/p/immortalwrt-mt798x/#mtwifi%E6%97%A0%E7%BA%BF%E9%85%8D%E7%BD%AE%E5%B7%A5%E5%85%B7%E8%AF%B4%E6%98%8E) 164 | .mtwifi-cfg.config配置文件中已设置使用mtwifi-cfg配置工具: 165 | CONFIG_PACKAGE_luci-app-mtwifi-cfg=y 166 | CONFIG_PACKAGE_luci-i18n-mtwifi-cfg-zh-cn=y 167 | CONFIG_PACKAGE_mtwifi-cfg=y 168 | CONFIG_PACKAGE_lua-cjson=y 169 | 170 | - #### 5. Not build luci-app-dockerman 171 | 该选项默认关闭,即按.mtwifi-cfg.config配置文件编译dockerman,不需要编译dockerman请打钩。 172 | .mtwifi-cfg.config配置文件中已设置编译dockerman: 173 | CONFIG_PACKAGE_luci-app-dockerman=y 174 | 175 | --- 176 | ### 感谢P3TERX的Actions-OpenWrt 177 | - [P3TERX](https://github.com/P3TERX/Actions-OpenWrt) 178 | [Read the details in my blog (in Chinese) | 中文教程](https://p3terx.com/archives/build-openwrt-with-github-actions.html) 179 | -------------------------------------------------------------------------------- /Tutorial/JDCloud-AX1800-Pro_AX6600-Athena.md: -------------------------------------------------------------------------------- 1 | 最新教程和原厂固件下载链接: 2 | https://github.com/lgs2007m/Actions-OpenWrt/releases/tag/Router-Flashing-Files 3 | 4 | 目录 5 | 1.旧版本固件开SSH 6 | 2.系统分区及eMMC简单介绍(不需要可以不看) 7 | 3.备份分区(SSH备份 TTL备份) 8 | 4.刷不死uboot和双分区gpt分区表 9 | 5.新建storage分区并还原跑分分区 10 | 6.USB 9008救砖 11 | 12 | 下载好工具软件备用: 13 | SSH工具软件:Xshell https://pan.lanzoui.com/b0f19ry9g 或者putty https://www.423down.com/11333.html 14 | 文件传输工具软件:WinSCP https://www.ghxi.com/winscp.html 15 | TFTP服务器工具:Tftpd64 https://bitbucket.org/phjounin/tftpd64/downloads/tftpd64.464.zip 16 | 17 | 18 | # 1.旧版本固件开SSH 19 | 1.5.40.r2181(2022-03-01)及之前版本SSH开门: 20 | 直接浏览器登录路由器,浏览器上按F12打开控制台,在Console选项卡下方编辑区域粘贴并回车运行下方代码。 21 | 然后就可以SSH登录路由器了,IP 192.168.68.1,端口22,用户名root,密码是路由器登录密码。 22 | 注:如果Console不能输入代码,先解除浏览器上的限制。 23 | ``` 24 | $.ajax({ 25 | url: "/jdcapi", 26 | async: false, 27 | data: JSON.stringify({ 28 | jsonrpc: "2.0", 29 | id: 1, 30 | method: "call", 31 | params: [ 32 | $.cookie("sessionid"), 33 | "service", 34 | "set", 35 | { 36 | "name": "dropbear", 37 | "instances": {"instance1": {"command": ["/usr/sbin/dropbear"]}} 38 | } 39 | ] 40 | }), 41 | dataType: "json", 42 | type: "POST" 43 | }) 44 | ``` 45 | 46 | 1.5.50r2204(2022-04-22)的SSH开门参考: 47 | 京东云 - 郑羊羊咩的窝 https://zyyme.com/jdc.html 48 | 49 | 1.5.80.r2262(2022-12-15)及之前版本SSH开门参考: 50 | 京东云无线宝r2262之前固件版本开SSH(有限) https://www.bilibili.com/read/cv21409975 51 | 京东云无线宝升级r2262固件后打开SSH(有限) https://www.bilibili.com/read/cv21907565 52 | 注:因为固件联网会自动接收下发的热补丁干掉SSH进程,所以需要先断网,再重置系统才能开门。 53 | SSH开门后,只要联网也会下方补丁,SSH就没了。 54 | 详见https://www.right.com.cn/forum/forum.php?mod=redirect&goto=findpost&ptid=8278061&pid=18501460 55 | 56 | 1.5.80.r2262方法中在Linux或带USB的openwrt中生成uci.sh文件的快捷方式,将系统中的uci.sh映射到移动硬盘第二分区的uci.sh,以便通过添加网络位置编辑uci.sh,后面通过网络位置编辑uci.sh需要不报错正常保存才可以。 57 | 58 | 1.5.81.r2279(2023-04-06)、4.0.0.r4015(2023-10-16)和最新4.3.0.r4211(2024-06-14)目前未见公开解锁SSH(Telnet)方法。 59 | 【注意】在线升级4.3.0.r4211(2024-06-14)会强制更新uboot,官方新uboot不能中断,如果升级了只能USB 9008或者等公开解锁SSH(Telnet)方法。 60 | 可以直接不死uboot刷4.3.0.r4211,uboot不会掉,但是不要官方系统上直接升级4.3.0.r4211。 61 | 62 | # 2.系统分区及eMMC简单介绍(不需要可以不看) 63 | 如果原厂系统可以开SSH,则SSH软件直接登录192.168.68.1,端口22,用户名root,密码是设置的路由器登录密码。 64 | 不能开则只能拆机接USB转TTL(亚瑟建议1.8V电平的,雅典娜建议3.3V电平的),来备份和刷机了。 65 | 66 | 下面以亚瑟为例,SSH登录输入blkid命令可以看到分区信息。 67 | 亚瑟和雅典娜采用的分区布局相同,个别分区大小不同。 68 | 注意使用TTL备份分区时,读分区是通过偏移量读取的,所以两者备份命令有所不同。 69 | SSH备份分区则是直接读取分区,两者备份分区命令相同。 70 | 71 | 可以看到blkid输出中,许多分区都有两个,即一个正常命名的分区,一个尾部加“_1”的分区,其中系统分区有两组0:HLOS、rootfs、WIFIFW和0:HLOS_1、rootfs_1、WIFIFW_1,就是所说的双分区,共享同一个rootfs_data挂载系统数据。原厂分区表0:HLOS有6MB,rootfs只有60MB,所以原厂分区表下如果刷第三方单分区OP固件,只能小于60MB,且刷之后会利用剩余rootfs空间/dev/loop0挂载为overlay,可用空间更小。 72 | BOOTCONFIG和BOOTCONFIG1两个分区数据完全相同,存储分区切换的信息,除了上述的两组系统分区会在升级固件或者一些启动失败failsafe情况下切换,其他分区一般默认不变。但在官方进行强制更新时,其他分区会切换。比如BOOTCONFIG记录现在系统使用0:DEVCFG、0:DEVCFG、0:RPM、0:CDT、0:APPSBL这组分区启动,在官方进行强制更新single image镜像时就会刷写新的数据到另外一组带“_1”的分区,并更新BOOTCONFIG和BOOTCONFIG1,反之相同。其他分区是官方强制更新时才会切换,系统分区则是每次固件更新就切换,当然强制更新也会更新固件。如BOOTCONFIG记录使用的是0:HLOS、rootfs、WIFIFW,更新固件会写入数据到0:HLOS_1、rootfs_1、WIFIFW_1,并更新BOOTCONFIG和BOOTCONFIG1切换系统分区到0:HLOS_1、rootfs_1、WIFIFW_1。 73 | 74 | 其他一些分区可以看下面的简单解释: 75 | GPT: GUID Partition Table (GPT分区表,在eMMC的UserData区域即/dev/mmcblk0的前34个扇区) 76 | SBL1: Secondary Boot Loader Stage 1 77 | BOOTCONFIG: Boot configuration (Failsafe partition information 存储分区切换的信息,其中第5个扇区存储age,即切换分区的次数,可以理解为原厂系统升级的次数) 78 | QSEE: Qualcomm Secure Execution Environment (TrustZone/TZ) 79 | DEVCFG: Device Configuration (Dynamic xPU configuration) 80 | RPM: Resource Power Manager 81 | CDT: Configuration Data Table (Platform ID and DDR configuration 包含平台ID和DDR参数,SBL1根据这个平台ID加载对应uboot,uboot根据平台ID加载对应DTB) 82 | ART: Atheros Radio Test (Wi-Fi calibration data 无线校准数据,包含MAC,每台机子是唯一的,注意备份) 83 | APPSBLENV: APPS Boot Loader Environment (U-Boot ENV variables U-Boot环境变量,建议备份) 84 | APPSBL: APPS Boot Loader (U-Boot applications boot loader) 85 | HLOS: High-Level Operating System (Kernel + DTB) 86 | rootfs: Root file system 87 | WIFIFW: Wi-Fi firmware 88 | rootfs_data: Root file system data (原厂固件需要挂载overlay到rootfs_data,一般单分区固件直接挂载overlay到/dev/loop0,不需要这个分区) 89 | plugin: 京东云原厂使用这个分区保存跑分log,不知为何命名为plugin分区 90 | log: 京东云原厂使用这个分区保存跑分插件,不知为何命名为log分区,恢复跑分并绑定,需要这个分区,建议备份 91 | swap: swap memory (这个分区是使用闪存空间当做虚拟内存,会损耗eMMC寿命) 92 | storage: 京东云原厂使用这个分区存储跑分的缓存数据 93 | BackupGPT: Backup GUID partition table (GPT备份分区表,在eMMC的UserData区域即/dev/mmcblk0的最后33个扇区) 94 | 95 | U-Boot (High-level boot loader for Linux) 96 | ELF (Executable and Linkable Format 可执行链接格式) 97 | MBN (Modem Configuration binary) 98 | XPU (Embedded Memory Protected Unit) 99 | DTB (Device Tree Blob 设备树二进制) 100 | DTS (Device Tree Source 设备树源码) 101 | FDT (Flattened Device Tree 扁平设备树) 102 | 103 | 高通IPQ60XX、IPQ807X QSDK系统启动过程分析 https://www.openwrt.pro/post-595.html 104 | 高通android开发摘要 https://www.cnblogs.com/liang123/p/6325271.html 105 | ``` 106 | BusyBox v1.30.1 () built-in shell (ash) 107 | 108 | -------------------------------------------------------------------------- 109 | Welcome to JDBox Router 110 | -------------------------------------------------------------------------- 111 | 112 | $$$$$\ $$$$$$$\ $$$$$$\ $$\ $$$$$$\ $$\ $$\ $$$$$$$\ 113 | \__$$ |$$ __$$\ $$ __$$\ $$ | $$ __$$\ $$ | $$ |$$ __$$\ 114 | $$ |$$ | $$ | $$ / \__|$$ | $$ / $$ |$$ | $$ |$$ | $$ | 115 | $$ |$$ | $$ | $$ | $$ | $$ | $$ |$$ | $$ |$$ | $$ | 116 | $$\ $$ |$$ | $$ | $$ | $$ | $$ | $$ |$$ | $$ |$$ | $$ | 117 | $$ | $$ |$$ | $$ | $$ | $$\ $$ | $$ | $$ |$$ | $$ |$$ | $$ | 118 | \$$$$$$ |$$$$$$$ | \$$$$$$ |$$$$$$$$\ $$$$$$ |\$$$$$$ |$$$$$$$ | 119 | \______/ \_______/ \______/ \________|\______/ \______/ \_______/ 120 | 121 | -------------------------------------------------------------------------- 122 | For those about to rock... (1.5.40.r2181, facbb2f3e+r49254) 123 | -------------------------------------------------------------------------- 124 | root@JDBoxV2:~# blkid 125 | /dev/mmcblk0: PTUUID="98101b32-bbe2-4bf2-a06e-2bb33d000c20" PTTYPE="gpt" 126 | /dev/mmcblk0p1: PARTLABEL="0:SBL1" PARTUUID="76956397-a5ca-abcf-cfff-49da1c1c1be8" 127 | /dev/mmcblk0p2: PARTLABEL="0:BOOTCONFIG" PARTUUID="7ba9c6de-ca09-2821-690a-64095242d2a0" 128 | /dev/mmcblk0p3: PARTLABEL="0:BOOTCONFIG1" PARTUUID="1a1ed8db-f385-e8e6-9c74-e18d77bd489b" 129 | /dev/mmcblk0p4: PARTLABEL="0:QSEE" PARTUUID="60f4eda8-3aad-0876-e16a-85254a9fd2a0" 130 | /dev/mmcblk0p5: PARTLABEL="0:QSEE_1" PARTUUID="0cbb89b7-6322-4f98-2a36-c86b2161e82d" 131 | /dev/mmcblk0p6: PARTLABEL="0:DEVCFG" PARTUUID="3871eeb7-ffd8-da0b-c61a-3b98b877a59e" 132 | /dev/mmcblk0p7: PARTLABEL="0:DEVCFG_1" PARTUUID="4d84d3c2-4b7e-026a-3859-9399e060fd5b" 133 | /dev/mmcblk0p8: PARTLABEL="0:RPM" PARTUUID="ad59f4d5-ef22-0f8f-08eb-e52be4d4fd62" 134 | /dev/mmcblk0p9: PARTLABEL="0:RPM_1" PARTUUID="0315721b-068c-c728-8f13-b5154fe16902" 135 | /dev/mmcblk0p10: PARTLABEL="0:CDT" PARTUUID="55d84ba7-7afe-068e-f02b-2b67dd330510" 136 | /dev/mmcblk0p11: PARTLABEL="0:CDT_1" PARTUUID="8d32c906-b4e5-28bc-3050-5be0a3401b36" 137 | /dev/mmcblk0p12: PARTLABEL="0:APPSBLENV" PARTUUID="a65238ed-379f-52e9-f01a-0e45a12d9da4" 138 | /dev/mmcblk0p13: PARTLABEL="0:APPSBL" PARTUUID="88236518-8902-2ecf-6bfb-a33684f1fea0" 139 | /dev/mmcblk0p14: PARTLABEL="0:APPSBL_1" PARTUUID="37a1760e-fea6-1e41-3446-9f4b78492b4c" 140 | /dev/mmcblk0p15: PARTLABEL="0:ART" PARTUUID="e0ab46b9-b259-2644-58d6-5edd6f28e130" 141 | /dev/mmcblk0p16: PARTLABEL="0:HLOS" PARTUUID="8a64c084-9d78-bc87-1438-cbeb2dd343ee" 142 | /dev/mmcblk0p17: PARTLABEL="0:HLOS_1" PARTUUID="486078f8-baec-2466-2dc0-4e4d197f4440" 143 | /dev/mmcblk0p18: TYPE="squashfs" PARTLABEL="rootfs" PARTUUID="39677e50-19f8-f4e2-71c0-8998c27e4b12" 144 | /dev/mmcblk0p19: TYPE="squashfs" PARTLABEL="0:WIFIFW" PARTUUID="d1f6197d-bc9b-8f34-3d34-867f2a94c20a" 145 | /dev/mmcblk0p20: TYPE="squashfs" PARTLABEL="rootfs_1" PARTUUID="8821dc34-da76-d18d-5141-7ed3c9c988d8" 146 | /dev/mmcblk0p21: TYPE="squashfs" PARTLABEL="0:WIFIFW_1" PARTUUID="0665f737-3484-6a78-51fb-f5bc008dee0d" 147 | /dev/mmcblk0p22: UUID="3d9a7891-66d6-4c9d-892f-10d850a7e19a" TYPE="ext4" PARTLABEL="rootfs_data" PARTUUID="a3c6191b-5e4b-9895-6289-886424d7a8ca" 148 | /dev/mmcblk0p23: PARTLABEL="0:ETHPHYFW" PARTUUID="4a60b8d4-5f17-c1eb-5ea8-ada9a8fc0a9d" 149 | /dev/mmcblk0p24: UUID="1d89ec7d-79d9-4a35-9329-30999a73f5af" TYPE="ext4" PARTLABEL="plugin" PARTUUID="4856f760-73f1-4db4-d89d-1eaae564bb24" 150 | /dev/mmcblk0p25: UUID="1dc4f6fd-f03f-4589-9e37-409872cbde7c" TYPE="ext4" PARTLABEL="log" PARTUUID="380a410e-0479-abb6-37f7-0c792c436ef2" 151 | /dev/mmcblk0p26: TYPE="swap" PARTLABEL="swap" PARTUUID="da210aab-3fdf-2640-f432-4c604371906b" 152 | /dev/mmcblk0p27: UUID="afe9b133-ad0d-4f1f-86d6-c577b9df2490" TYPE="ext4" PARTLABEL="storage" PARTUUID="ceb8abfc-7258-fe04-17ae-6e699579e38f" 153 | root@JDBoxV2:~# fdisk -l /dev/mmcblk0 154 | 155 | Disk /dev/mmcblk0: 57.1 GiB, 61329113088 bytes, 119783424 sectors 156 | Units: sectors of 1 * 512 = 512 bytes 157 | Sector size (logical/physical): 512 bytes / 512 bytes 158 | I/O size (minimum/optimal): 512 bytes / 512 bytes 159 | Disklabel type: gpt 160 | Disk identifier: 98101B32-BBE2-4BF2-A06E-2BB33D000C20 161 | 162 | Device 163 | /dev/mmcblk0p1 164 | /dev/mmcblk0p2 165 | /dev/mmcblk0p3 166 | /dev/mmcblk0p4 167 | /dev/mmcblk0p5 168 | /dev/mmcblk0p6 169 | /dev/mmcblk0p7 170 | /dev/mmcblk0p8 171 | /dev/mmcblk0p9 172 | /dev/mmcblk0p10 173 | /dev/mmcblk0p11 174 | /dev/mmcblk0p12 175 | /dev/mmcblk0p13 176 | /dev/mmcblk0p14 177 | /dev/mmcblk0p15 178 | /dev/mmcblk0p16 179 | /dev/mmcblk0p17 180 | /dev/mmcblk0p18 181 | /dev/mmcblk0p19 182 | /dev/mmcblk0p20 183 | /dev/mmcblk0p21 184 | /dev/mmcblk0p22 185 | /dev/mmcblk0p23 186 | /dev/mmcblk0p24 187 | /dev/mmcblk0p25 188 | /dev/mmcblk0p26 189 | /dev/mmcblk0p27 190 | root@JDBoxV2:~# cat /proc/partitions 191 | major minor #blocks name 192 | 193 | 1 0 4096 ram0 194 | 1 1 4096 ram1 195 | 1 2 4096 ram2 196 | 1 3 4096 ram3 197 | 1 4 4096 ram4 198 | 1 5 4096 ram5 199 | 1 6 4096 ram6 200 | 1 7 4096 ram7 201 | 1 8 4096 ram8 202 | 1 9 4096 ram9 203 | 1 10 4096 ram10 204 | 1 11 4096 ram11 205 | 1 12 4096 ram12 206 | 1 13 4096 ram13 207 | 1 14 4096 ram14 208 | 1 15 4096 ram15 209 | 179 0 59891712 mmcblk0 210 | 179 1 768 mmcblk0p1 211 | 179 2 256 mmcblk0p2 212 | 179 3 256 mmcblk0p3 213 | 179 4 1792 mmcblk0p4 214 | 179 5 1792 mmcblk0p5 215 | 179 6 256 mmcblk0p6 216 | 179 7 256 mmcblk0p7 217 | 179 8 256 mmcblk0p8 218 | 179 9 256 mmcblk0p9 219 | 179 10 256 mmcblk0p10 220 | 179 11 256 mmcblk0p11 221 | 179 12 256 mmcblk0p12 222 | 179 13 640 mmcblk0p13 223 | 179 14 640 mmcblk0p14 224 | 179 15 256 mmcblk0p15 225 | 179 16 6144 mmcblk0p16 226 | 179 17 6144 mmcblk0p17 227 | 179 18 61440 mmcblk0p18 228 | 179 19 4096 mmcblk0p19 229 | 179 20 61440 mmcblk0p20 230 | 179 21 4096 mmcblk0p21 231 | 179 22 20480 mmcblk0p22 232 | 179 23 512 mmcblk0p23 233 | 179 24 89600 mmcblk0p24 234 | 179 25 307200 mmcblk0p25 235 | 179 26 524288 mmcblk0p26 236 | 179 27 58798046 mmcblk0p27 237 | 179 32 4096 mmcblk0rpmb 238 | root@JDBoxV2:~# cat /sys/kernel/debug/mmc0/ios 239 | clock: 192000000 Hz 240 | actual clock: 192000000 Hz 241 | vdd: 18 (3.0 ~ 3.1 V) 242 | bus mode: 2 (push-pull) 243 | chip select: 0 (don't care) 244 | power mode: 2 (on) 245 | bus width: 3 (8 bits) 246 | timing spec: 9 (mmc HS200) 247 | signal voltage: 0 (1.80 V) 248 | driver type: 0 (driver type B) 249 | ``` 250 | 查看eMMC寿命(不知道准不准): 251 | ``` 252 | var="$(cat /sys/kernel/debug/mmc0/mmc0\:0001/ext_csd)" 253 | eol=${var:534:2};slc=${var:536:2};mlc=${var:538:2} 254 | echo "EOL:0x$eol SLC:0x$slc MLC:0x$mlc" 255 | ``` 256 | 输出是这样的: 257 | ``` 258 | root@JDBoxV2:~# var="$(cat /sys/kernel/debug/mmc0/mmc0\:0001/ext_csd)" 259 | root@JDBoxV2:~# eol=${var:534:2};slc=${var:536:2};mlc=${var:538:2} 260 | root@JDBoxV2:~# echo "EOL:0x$eol SLC:0x$slc MLC:0x$mlc" 261 | EOL:0x01 SLC:0x04 MLC:0x01 262 | ``` 263 | EOL:0x01代表eMMC状态正常 264 | SLC:0x04代表已使用30%-40%的寿命,预计剩余60%。 265 | MLC:0x01江波龙这个型号的这个参数好像不变,不用看 266 | 不同型号SLC和MCL定义不同,简单只看数最大的即可。 267 | 268 | 或者刷第三方OP后自己安装mmc-utils再运行命令查看: 269 | ``` 270 | opkg update 271 | opkg install mmc-utils 272 | mmc extcsd read /dev/mmcblk0 | grep -e "Life Time" -e "EOL" 273 | ``` 274 | 查看emmc的启动设置命令: 275 | ``` 276 | mmc extcsd read /dev/mmcblk0 | grep -e BOOT_BUS_CONDITIONS -e PARTITION_CONFIG -e RST_N_FUNCTION 277 | ``` 278 | 可以看到亚瑟和雅典娜的eMMC并没有设置/dev/mmcblk0/boot0或者boot1硬件分区启动。 279 | SBL1在UserData硬件分区,这个硬件分区使用软件分区表GPT进行分区,SBL1在第一个软件分区上。 280 | ``` 281 | root@QWRT:~# mmc extcsd read /dev/mmcblk0 | grep -e "Life Time" -e "EOL" 282 | eMMC Life Time Estimation A [EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_A]: 0x04 283 | eMMC Life Time Estimation B [EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B]: 0x01 284 | eMMC Pre EOL information [EXT_CSD_PRE_EOL_INFO]: 0x01 285 | root@QWRT:~# mmc extcsd read /dev/mmcblk0 | grep -e BOOT_BUS_CONDITIONS -e PARTITION_CONFIG -e RST_N_FUNCTION 286 | Boot configuration bytes [PARTITION_CONFIG: 0x00] 287 | Boot bus Conditions [BOOT_BUS_CONDITIONS: 0x00] 288 | H/W reset function [RST_N_FUNCTION]: 0x00 289 | ``` 290 | 291 | [EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_A]: life time estimation for the MLC user partition eraseblocks, provided in steps of 10%, e.g.: 292 | 0x01 means 0%-10% device life time used. 293 | 0x02 means 10%-20% device life time used. 294 | ... 295 | [EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B]: life time estimation for the SLC boot partition eraseblocks, provided in steps of 10%, e.g.: 296 | 0x01 means 0%-10% device life time used. 297 | 0x02 means 10%-20% device life time used. 298 | ... 299 | [EXT_CSD_DEVICE_PRE_EOL_INFO]: overall status for reserved blocks. Possible values are: 300 | 0x00 - Not defined. 301 | 0x01 - Normal: consumed less than 80% of the reserved blocks. 302 | 0x02 - Warning: consumed 80% of the reserved blocks. 303 | 0x03 - Urgent: consumed 90% of the reserved blocks. 304 | 305 | 寿命说明:0x0是未定义,0x1是已使用0-10%寿命,0x2是已使用10%-20%寿命,依次类推,详见下方 306 | https://wiki.friendlyelec.com/wiki/index.php/EMMC/zh 307 | eMMC 5.1 JEDEC标准 308 | https://pdfcoffee.com/jesd84-b51-pdf-free.html 309 | 310 | 311 | # 3.备份分区 312 | ## SSH备份分区 313 | 如果原厂系统可以开SSH,可以直接系统中备份分区。 314 | 如果不能开则需要拆机TTL刷uboot,再刷旧版固件以便破解SSH。 315 | 拆机接TTL详看TTL备份分区那部分的内容,先TTL备份uboot分区(0:APPSBL和0:APPSBL_1),当然原厂uboot不备份也可,然后TTL刷uboot。 316 | 重启进uboot刷原厂1.5.40.r2181原厂固件,再按旧版本固件方法,不联网破解SSH后,系统中备份分区。 317 | 318 | 刷其他第三方OP固件再备份也可,自行选择。 319 | 第三方OP固件是单分区的,刷固件只是覆盖0:HLOS和rootfs这两个分区,不会影响其他分区数据。 320 | 当然直接TTL(uboot控制台)备份也可,不过麻烦,详细TTL备份看后面。 321 | 322 | 固件启动后SSH输入ls -l /mnt查看是是否挂载了/mnt/mmcblk0p27 323 | ``` 324 | root@JDBoxV2:~# ls -l /mnt 325 | drwxrwxrwx 4 root root 4096 Mar 24 15:20 mmcblk0p27 326 | ``` 327 | 刷其他OP没有挂载的,自己新建文件夹并挂载,然后再ls -l /mnt检查: 328 | ``` 329 | mkdir /mnt/mmcblk0p27 330 | mount -t ext4 /dev/mmcblk0p27 /mnt/mmcblk0p27 331 | ``` 332 | 然后按照老方法备份到eMMC的storage分区即/mnt/mmcblk0p27,再通过WinScp登录路由器下载保存。 333 | WinScp软件登录原厂系统,协议SCP,IP 192.168.68.1,端口22。 334 | WInScp下载大文件会提示主机超过15秒无通信,需要登录时点击高级,高级站点设置-连接 去掉勾选“优化连接缓冲大小”,再登录。 335 | 336 | 如果心疼读写2G数据到eMMC的话,备份到USB移动硬盘也可以,命令中/mnt/mmcblk0p27替换为USB的挂载点例如/mnt/sda1即可。 337 | 确保USB移动硬盘有2G剩余空间,插上后查看移动硬盘的挂载点,这里是/mnt/sda1。 338 | ``` 339 | root@JDBoxV2:~# ls -l /mnt 340 | drwxrwxrwx 4 root root 4096 Mar 24 15:20 mmcblk0p27 341 | drwxrwxrwx 2 root root 1024 Mar 1 2022 sda1 342 | ``` 343 | 只备份GPT分区表和mmcblk0p1-26,mmcblk0p27是京东云跑分缓存数据,太大且恢复跑分可以重新缓存,不备份了。 344 | 建议分开备份分区,后面需要的时候只要按顺序合并就得到了mmcblk0p0-26.img镜像了。 345 | 复制下面全部命令粘贴执行,最后一行sync回车执行即可,注意看最后一个swap分区是否备份完成: 346 | ``` 347 | dd if=/dev/mmcblk0 bs=512 count=34 of=/mnt/mmcblk0p27/mmcblk0_GPT.bin conv=fsync 348 | dd if=/dev/mmcblk0p1 of=/mnt/mmcblk0p27/mmcblk0p1_0SBL1.bin conv=fsync 349 | dd if=/dev/mmcblk0p2 of=/mnt/mmcblk0p27/mmcblk0p2_0BOOTCONFIG.bin conv=fsync 350 | dd if=/dev/mmcblk0p3 of=/mnt/mmcblk0p27/mmcblk0p3_0BOOTCONFIG1.bin conv=fsync 351 | dd if=/dev/mmcblk0p4 of=/mnt/mmcblk0p27/mmcblk0p4_0QSEE.bin conv=fsync 352 | dd if=/dev/mmcblk0p5 of=/mnt/mmcblk0p27/mmcblk0p5_0QSEE_1.bin conv=fsync 353 | dd if=/dev/mmcblk0p6 of=/mnt/mmcblk0p27/mmcblk0p6_0DEVCFG.bin conv=fsync 354 | dd if=/dev/mmcblk0p7 of=/mnt/mmcblk0p27/mmcblk0p7_0DEVCFG_1.bin conv=fsync 355 | dd if=/dev/mmcblk0p8 of=/mnt/mmcblk0p27/mmcblk0p8_0RPM.bin conv=fsync 356 | dd if=/dev/mmcblk0p9 of=/mnt/mmcblk0p27/mmcblk0p9_0RPM_1.bin conv=fsync 357 | dd if=/dev/mmcblk0p10 of=/mnt/mmcblk0p27/mmcblk0p10_0CDT.bin conv=fsync 358 | dd if=/dev/mmcblk0p11 of=/mnt/mmcblk0p27/mmcblk0p11_0CDT_1.bin conv=fsync 359 | dd if=/dev/mmcblk0p12 of=/mnt/mmcblk0p27/mmcblk0p12_0APPSBLENV.bin conv=fsync 360 | dd if=/dev/mmcblk0p13 of=/mnt/mmcblk0p27/mmcblk0p13_0APPSBL.bin conv=fsync 361 | dd if=/dev/mmcblk0p14 of=/mnt/mmcblk0p27/mmcblk0p14_0APPSBL_1.bin conv=fsync 362 | dd if=/dev/mmcblk0p15 of=/mnt/mmcblk0p27/mmcblk0p15_0ART.bin conv=fsync 363 | dd if=/dev/mmcblk0p16 of=/mnt/mmcblk0p27/mmcblk0p16_0HLOS.bin conv=fsync 364 | dd if=/dev/mmcblk0p17 of=/mnt/mmcblk0p27/mmcblk0p17_0HLOS_1.bin conv=fsync 365 | dd if=/dev/mmcblk0p18 of=/mnt/mmcblk0p27/mmcblk0p18_rootfs.bin conv=fsync 366 | dd if=/dev/mmcblk0p19 of=/mnt/mmcblk0p27/mmcblk0p19_0WIFIFW.bin conv=fsync 367 | dd if=/dev/mmcblk0p20 of=/mnt/mmcblk0p27/mmcblk0p20_rootfs_1.bin conv=fsync 368 | dd if=/dev/mmcblk0p21 of=/mnt/mmcblk0p27/mmcblk0p21_0WIFIFW_1.bin conv=fsync 369 | dd if=/dev/mmcblk0p22 of=/mnt/mmcblk0p27/mmcblk0p22_rootfs_data.bin conv=fsync 370 | dd if=/dev/mmcblk0p23 of=/mnt/mmcblk0p27/mmcblk0p23_0ETHPHYFW.bin conv=fsync 371 | dd if=/dev/mmcblk0p24 of=/mnt/mmcblk0p27/mmcblk0p24_plugin.bin conv=fsync 372 | dd if=/dev/mmcblk0p25 of=/mnt/mmcblk0p27/mmcblk0p25_log.bin conv=fsync 373 | dd if=/dev/mmcblk0p26 of=/mnt/mmcblk0p27/mmcblk0p26_swap.bin conv=fsync 374 | sync 375 | ``` 376 | 注意亚瑟和雅典娜GPT分区表是不一样的,因为有三个分区大小是不一样的: 377 | ART: 亚瑟256KiB 雅典娜512KiB 378 | plugin: 亚瑟87.5MiB 雅典娜87.25MiB 379 | log: 亚瑟300MiB 雅典娜1024 MiB 380 | 381 | ## TTL备份分区 382 | 如果没有办法SSH或者eMMC已经接近挂了,路由器红灯重置也没有用,那只能拆机试试TTL有没有输出。 383 | 【亚瑟拆机】 384 | 从机身底部开始拆,把底部橡胶垫对准5个角的部分撕开,就可以看到5颗十字螺丝,不需要把底部橡胶垫全部撕开。 385 | 拆掉底盖5颗螺丝,拿下底盖,然后再拆支架的4颗十字螺丝,新机型顶部还有2颗十字螺丝,需要先垂直五边形用撬棒撬开顶盖,再拆这2颗螺丝。 386 | 拆完之后可以把路由器横放在地上(地上用毛巾之类的垫着防止刮花)。 387 | 有网口那一面横放,然后稍微用力往下压外壳,使之变形,以便网口陷进外壳,支架和主板可以从底部慢慢抽出来了。 388 | 【亚瑟接TTL】 389 | 可以看到主板上4个并排的孔V R T G就是TTL接口了,VCC RX TX GND,线序详见刷机文件压缩包中的图片,亚瑟建议用1.8V的USB转TTL。 390 | VCC不用接,路由器的RX接USB转TTL的TX,路由器的TX接USB转TTL的RX,GND接GND。 391 | 使用串口工具软件打开USB转TTL,然后路由器上电,串口工具软件会跑马,不停按回车中断启动进入uboot控制台。 392 | 窗口出现 IPQ6018# 即进入uboot控制台了。 393 | 394 | 【雅典娜拆机】 395 | 雅典娜需要轻轻撬开前面板,然后使用梅花带孔T10或者T9的螺丝刀扭开4颗螺丝就可以拆开外壳,还有内部有两颗螺丝需要3.5或3.0的十字螺丝刀。 396 | 【雅典娜接TTL】 397 | 雅典娜支持TTL探针,只需要拆前面板,然后使用间距是2.54mm的TTL探针即可,详见刷机文件压缩包中的图片。 398 | 有梅花带孔T10螺丝刀直接拆也可以,拆开可以看到主板边缘有TTL焊盘,需要焊接或者用夹子什么的固定住。雅典娜建议使用3.3V的USB转TTL,线序详见刷机文件压缩包中的图片。 399 | 注:拆开散热器里面还有一组带孔的TTL接口。但是旧机子不改内存不建议拆散热器,拆开再装上不如之前的贴合度好,温度会提高1-2摄氏度。 400 | 401 | 【搭建tftp服务器】 402 | 接好USB转TTL路由器上电开机,不停按回车中断启动进入uboot控制台。 403 | 输入help命令可以查看uboot支持的命令,输入printenv查看环境变量。 404 | 可以看到tftp服务器IP是192.168.10.1,电脑搭建fttp服务器,将电脑的有线网卡设置IP为192.168.10.1。 405 | 关闭电脑防火墙,打开tftp软件Tftpd64,选择192.168.10.1网卡,则tftp服务器设置好了。 406 | 网卡连接路由器LAN口,然后uboot控制台中输入ping 192.168.10.1来查看是否通。 407 | ``` 408 | IPQ6018# printenv 409 | baudrate=115200 410 | bootargs=console=ttyMSM0,115200n8 411 | bootcmd=bootipq 412 | bootdelay=2 413 | eth1addr=dc:d8:7c:00:00:4a 414 | eth2addr=dc:d8:7d:00:00:4a 415 | eth3addr=dc:d8:7e:00:00:4a 416 | eth4addr=dc:d8:7c:00:00:4b 417 | ethact=eth0 418 | ethaddr=dc:d8:7b:00:00:4a 419 | fdt_high=0x48500000 420 | fdtcontroladdr=4a477ea0 421 | flash_type=5 422 | ipaddr=192.168.10.10 ##<<<<<<<<<<<<< 路由器IP 423 | jdc_crc_enable=1 424 | machid=8030201 425 | netmask=255.255.255.0 426 | serverip=192.168.10.1 ##<<<<<<<<<<<<< tftp服务器即电脑IP 427 | soc_hw_version=20170100 428 | soc_version_major=1 429 | soc_version_minor=0 430 | stderr=serial@78B1000 431 | stdin=serial@78B1000 432 | stdout=serial@78B1000 433 | 434 | Environment size: 556/262140 bytes 435 | ``` 436 | TTL备份是通过mmc read先将分区读取到内存,再通过tftpput传给tftp服务器保存到电脑。 437 | 不过tftpput命令好像传输过大,在传输完成后会重启,所以备份的单个分区不能太大。 438 | 像最后两个分区log有300M(雅典娜log有1024M),swap有512M,我单独对这两个分区进行了分段备份。 439 | 后面用BIN文件合并工具或者命令合并还原回log和swap分区。 440 | 使用教程文件夹里的BIN文件合并工具V1.1合并,或者使用下面命令合并(自行修改文件名,注意文件顺序)。 441 | ``` 442 | Linux: 443 | cat file1.bin file2.bin file3.bin > merged_file.bin 444 | 445 | Windows: 446 | copy /B file1.bin + file2.bin + file3.bin merged_file.bin 447 | ``` 448 | mmc read命令用法:mmc read addr blk# cnt 449 | addr是数据读取到内存中的地址,blk#是要读取的扇区起始地址(十六进制),一个扇区是512字节,cnt是要读取的扇区数量(十六进制)。 450 | tftpput用法:tftpput Address Size [[hostIPaddr:]filename] 451 | Address是要读取内存中数据的内存地址,Size是数据字节(十六进制) 452 | mmcblk0p27第27分区是京东云的数据分区,太大了不能备份,只能放弃了 453 | 454 | GPT分区表和前面14个分区大小,亚瑟和雅典娜是一样的,都用下面命令备份,复制命令一行一行执行即可: 455 | ``` 456 | mmc read 0x50000000 0x00000000 0x00000022 && tftpput 0x50000000 0x00004400 mmcblk0p_GPT.bin 457 | mmc read 0x50000000 0x00000022 0x00000600 && tftpput 0x50000000 0x000c0000 mmcblk0p1_0SBL1.bin 458 | mmc read 0x50000000 0x00000622 0x00000200 && tftpput 0x50000000 0x00040000 mmcblk0p2_0BOOTCONFIG.bin 459 | mmc read 0x50000000 0x00000822 0x00000200 && tftpput 0x50000000 0x00040000 mmcblk0p3_0BOOTCONFIG1.bin 460 | mmc read 0x50000000 0x00000a22 0x00000e00 && tftpput 0x50000000 0x001c0000 mmcblk0p4_0QSEE.bin 461 | mmc read 0x50000000 0x00001822 0x00000e00 && tftpput 0x50000000 0x001c0000 mmcblk0p5_0QSEE_1.bin 462 | mmc read 0x50000000 0x00002622 0x00000200 && tftpput 0x50000000 0x00040000 mmcblk0p6_0DEVCFG.bin 463 | mmc read 0x50000000 0x00002822 0x00000200 && tftpput 0x50000000 0x00040000 mmcblk0p7_0DEVCFG_1.bin 464 | mmc read 0x50000000 0x00002a22 0x00000200 && tftpput 0x50000000 0x00040000 mmcblk0p8_0RPM.bin 465 | mmc read 0x50000000 0x00002c22 0x00000200 && tftpput 0x50000000 0x00040000 mmcblk0p9_0RPM_1.bin 466 | mmc read 0x50000000 0x00002e22 0x00000200 && tftpput 0x50000000 0x00040000 mmcblk0p10_0CDT.bin 467 | mmc read 0x50000000 0x00003022 0x00000200 && tftpput 0x50000000 0x00040000 mmcblk0p11_0CDT_1.bin 468 | mmc read 0x50000000 0x00003222 0x00000200 && tftpput 0x50000000 0x00040000 mmcblk0p12_0APPSBLENV.bin 469 | mmc read 0x50000000 0x00003422 0x00000500 && tftpput 0x50000000 0x000a0000 mmcblk0p13_0APPSBL.bin 470 | mmc read 0x50000000 0x00003922 0x00000500 && tftpput 0x50000000 0x000a0000 mmcblk0p14_0APPSBL_1.bin 471 | ``` 472 | 注意亚瑟和雅典娜GPT分区表是不一样的,因为有三个分区大小是不一样的: 473 | ART: 亚瑟256KiB 雅典娜512KiB 474 | plugin: 亚瑟87.5MiB 雅典娜87.25MiB 475 | log: 亚瑟300MiB 雅典娜1024 MiB 476 | 477 | 【亚瑟】后面的分区备份命令,耐心复制命令一行一行执行: 478 | ``` 479 | mmc read 0x50000000 0x00003e22 0x00000200 && tftpput 0x50000000 0x00040000 mmcblk0p15_0ART.bin 480 | mmc read 0x50000000 0x00004022 0x00003000 && tftpput 0x50000000 0x00600000 mmcblk0p16_0HLOS.bin 481 | mmc read 0x50000000 0x00007022 0x00003000 && tftpput 0x50000000 0x00600000 mmcblk0p17_0HLOS_1.bin 482 | mmc read 0x50000000 0x0000a022 0x0001e000 && tftpput 0x50000000 0x03c00000 mmcblk0p18_rootfs.bin 483 | mmc read 0x50000000 0x00028022 0x00002000 && tftpput 0x50000000 0x00400000 mmcblk0p19_0WIFIFW.bin 484 | mmc read 0x50000000 0x0002a022 0x0001e000 && tftpput 0x50000000 0x03c00000 mmcblk0p20_rootfs_1.bin 485 | mmc read 0x50000000 0x00048022 0x00002000 && tftpput 0x50000000 0x00400000 mmcblk0p21_0WIFIFW_1.bin 486 | mmc read 0x50000000 0x0004a022 0x0000a000 && tftpput 0x50000000 0x01400000 mmcblk0p22_rootfs_data.bin 487 | mmc read 0x50000000 0x00054022 0x00000400 && tftpput 0x50000000 0x00080000 mmcblk0p23_0ETHPHYFW.bin 488 | mmc read 0x50000000 0x00054422 0x0002bc00 && tftpput 0x50000000 0x05780000 mmcblk0p24_plugin.bin 489 | 490 | mmc read 0x50000000 0x00080022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log1.bin 491 | mmc read 0x50000000 0x000a0022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log2.bin 492 | mmc read 0x50000000 0x000c0022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log3.bin 493 | mmc read 0x50000000 0x000e0022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log4.bin 494 | mmc read 0x50000000 0x00100022 0x00016000 && tftpput 0x50000000 0x02c00000 mmcblk0p25_log5.bin 495 | 496 | mmc read 0x50000000 0x00116022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p26_swap1.bin 497 | mmc read 0x50000000 0x00136022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p26_swap2.bin 498 | mmc read 0x50000000 0x00156022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p26_swap3.bin 499 | mmc read 0x50000000 0x00176022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p26_swap4.bin 500 | mmc read 0x50000000 0x00196022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p26_swap5.bin 501 | mmc read 0x50000000 0x001b6022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p26_swap6.bin 502 | mmc read 0x50000000 0x001d6022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p26_swap7.bin 503 | mmc read 0x50000000 0x001f6022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p26_swap8.bin 504 | ``` 505 | 506 | 【雅典娜】后面的分区备份命令,耐心复制命令一行一行执行: 507 | ``` 508 | mmc read 0x50000000 0x00003e22 0x00000400 && tftpput 0x50000000 0x00080000 mmcblk0p15_0ART.bin 509 | mmc read 0x50000000 0x00004222 0x00003000 && tftpput 0x50000000 0x00600000 mmcblk0p16_0HLOS.bin 510 | mmc read 0x50000000 0x00007222 0x00003000 && tftpput 0x50000000 0x00600000 mmcblk0p17_0HLOS_1.bin 511 | mmc read 0x50000000 0x0000a222 0x0001e000 && tftpput 0x50000000 0x03c00000 mmcblk0p18_rootfs.bin 512 | mmc read 0x50000000 0x00028222 0x00002000 && tftpput 0x50000000 0x00400000 mmcblk0p19_0WIFIFW.bin 513 | mmc read 0x50000000 0x0002a222 0x0001e000 && tftpput 0x50000000 0x03c00000 mmcblk0p20_rootfs_1.bin 514 | mmc read 0x50000000 0x00048222 0x00002000 && tftpput 0x50000000 0x00400000 mmcblk0p21_0WIFIFW_1.bin 515 | mmc read 0x50000000 0x0004a222 0x0000a000 && tftpput 0x50000000 0x01400000 mmcblk0p22_rootfs_data.bin 516 | mmc read 0x50000000 0x00054222 0x00000400 && tftpput 0x50000000 0x00080000 mmcblk0p23_0ETHPHYFW.bin 517 | mmc read 0x50000000 0x00054622 0x0002ba00 && tftpput 0x50000000 0x05740000 mmcblk0p24_plugin.bin 518 | 519 | mmc read 0x50000000 0x00080022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log1.bin 520 | mmc read 0x50000000 0x000a0022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log2.bin 521 | mmc read 0x50000000 0x000c0022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log3.bin 522 | mmc read 0x50000000 0x000e0022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log4.bin 523 | mmc read 0x50000000 0x00100022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log5.bin 524 | mmc read 0x50000000 0x00120022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log6.bin 525 | mmc read 0x50000000 0x00140022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log7.bin 526 | mmc read 0x50000000 0x00160022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log8.bin 527 | mmc read 0x50000000 0x00180022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log9.bin 528 | mmc read 0x50000000 0x001a0022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log10.bin 529 | mmc read 0x50000000 0x001c0022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log11.bin 530 | mmc read 0x50000000 0x001e0022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log12.bin 531 | mmc read 0x50000000 0x00200022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log13.bin 532 | mmc read 0x50000000 0x00220022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log14.bin 533 | mmc read 0x50000000 0x00240022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log15.bin 534 | mmc read 0x50000000 0x00260022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p25_log16.bin 535 | 536 | mmc read 0x50000000 0x00280022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p26_swap1.bin 537 | mmc read 0x50000000 0x002a0022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p26_swap2.bin 538 | mmc read 0x50000000 0x002c0022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p26_swap3.bin 539 | mmc read 0x50000000 0x002e0022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p26_swap4.bin 540 | mmc read 0x50000000 0x00300022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p26_swap5.bin 541 | mmc read 0x50000000 0x00320022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p26_swap6.bin 542 | mmc read 0x50000000 0x00340022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p26_swap7.bin 543 | mmc read 0x50000000 0x00360022 0x00020000 && tftpput 0x50000000 0x04000000 mmcblk0p26_swap8.bin 544 | ``` 545 | 546 | # 4.刷uboot和双分区gpt分区表 547 | 注意:用谁的uboot看谁的教程,我的uboot是亚瑟雅典娜通刷,别人的我不知道,不要乱用!!! 548 | 我这个uboot是可以亚瑟、雅典娜通用的,不区分双分区、单分区,默认uboot刷固件都会刷到0:HLOS、rootfs。 549 | 如果擦除了0:BOOTCONFIG和0:BOOTCONFIG1分区,则启动只会用到第一个命名正常的分区(即不是尾部有“_1”的分区),uboot只会启动系统分区0:HLOS、rootfs。 550 | 如果保留0:BOOTCONFIG和0:BOOTCONFIG1分区,则按分区里面的设置启动对应的系统分区。 551 | 为了更好支持原厂系统,我是保留0:BOOTCONFIG和0:BOOTCONFIG1支持双分区的,gpt分区表也使用的是双分区扩容分区表。 552 | 553 | ## SSH刷写 554 | 已开SSH的可以SSH刷写,没有看下方的拆机TTL方法。 555 | WinScp上传uboot文件uboot-JDC_AX1800_Pro-AX6600_Athena-20240510.bin到tmp文件夹,然后SSH输入命令刷写uboot到0:APPSBL和0:APPSBL_1分区: 556 | ``` 557 | dd if=/tmp/uboot-JDC_AX1800_Pro-AX6600_Athena-20240510.bin of=$(blkid -t PARTLABEL=0:APPSBL -o device) conv=fsync 558 | dd if=/tmp/uboot-JDC_AX1800_Pro-AX6600_Athena-20240510.bin of=$(blkid -t PARTLABEL=0:APPSBL_1 -o device) conv=fsync 559 | ``` 560 | 输入命令检查分区md5 hash值,和我这版2024.05.10编译的md5一致即可: 561 | ``` 562 | md5sum $(blkid -t PARTLABEL=0:APPSBL -o device) && md5sum $(blkid -t PARTLABEL=0:APPSBL_1 -o device) 563 | ``` 564 | ``` 565 | root@JDBoxV2:~# md5sum $(blkid -t PARTLABEL=0:APPSBL -o device) && md5sum $(blkid -t PARTLABEL=0:APPSBL_1 -o device) 566 | 5e1817f795ada48335fda9f22545a43e /dev/mmcblk0p13 567 | 5e1817f795ada48335fda9f22545a43e /dev/mmcblk0p14 568 | ``` 569 | 分区表文件夹中的gpt文件,rootfs512M对应rootfs是512MB大小,依次类推。 570 | 这个rootfs就是固件+overlay的大小,overlay近似是刷固件后剩余软件包空间大小,选择自己需要的rootfs大小的分区表即可。 571 | 因为刷分区表是改变了后面的分区的偏移量,所以后面分区的数据就不能识别了。 572 | 后面会讲到,如果要回原厂跑分,需要先恢复log、plugin、swap,后面新建的最后一个storage分区也要格式化才能用。 573 | 574 | 注意亚瑟和雅典娜的gpt分区表不同,不要上传错了!!! 575 | 上传你需要的rootfs大小的gpt分区表文件到tmp文件夹,先验证md5: 576 | ``` 577 | md5sum /tmp/gpt-JDC_*_dual-boot_rootfs*M_no-last-partition.bin 578 | ``` 579 | ``` 580 | root@JDBoxV2:~# md5sum /tmp/gpt-JDC_*_dual-boot_rootfs*M_no-last-partition.bin 581 | ##亚瑟gpt md5 582 | 9d9e3803ba541ff38449acd181026b28 /tmp/gpt-JDC_AX1800_Pro_dual-boot_rootfs512M_no-last-partition.bin 583 | 5aaf1b606458fbffc72342540db9bc52 /tmp/gpt-JDC_AX1800_Pro_dual-boot_rootfs1024M_no-last-partition.bin 584 | b93b4823af2b4fc31d22c25468181e7a /tmp/gpt-JDC_AX1800_Pro_dual-boot_rootfs2048M_no-last-partition.bin 585 | ##雅典娜gpt md5 586 | 3447887a5f47893fa099c7c076eeeee3 /tmp/gpt-JDC_AX6600_Athena_dual-boot_rootfs512M_no-last-partition.bin 587 | 1f8217d1f0e0478d2e884278ea30ece5 /tmp/gpt-JDC_AX6600_Athena_dual-boot_rootfs1024M_no-last-partition.bin 588 | 9a921ca450e8a5aebd218b7fd1d1c5a8 /tmp/gpt-JDC_AX6600_Athena_dual-boot_rootfs2048M_no-last-partition.bin 589 | ``` 590 | 自己硬改eMMC并且使用我的分区表需要注意: 591 | 雅典娜rootfs 2048M分区表总扇区数已大于4G,建议使用8G及以上eMMC。其他亚瑟雅典娜的分区表总扇区数是小于4G的,理论可以使用4G及以上大小eMMC。 592 | 593 | 原厂eMMC的不需要关注上面这个注意信息。 594 | 你上传的文件的md5信息和上面对应文件的md5对比,没问题即可。 595 | 接着修改下面命令中的gpt文件名为你上传的文件名,然后复制命令粘贴一起执行: 596 | (只修改gpt文件名,其他不变,这里以rootfs512M的分区表为例) 597 | 第1条dd命令是写入gpt文件到/dev/mmcblk0的前34个扇区 598 | 第2条是dd读取分区表传递给md5sum校验数据的md5值 599 | ``` 600 | ## 亚瑟 rootfs size 512M GPT 601 | dd if=/tmp/gpt-JDC_AX1800_Pro_dual-boot_rootfs512M_no-last-partition.bin of=/dev/mmcblk0 bs=512 count=34 conv=fsync 602 | dd if=/dev/mmcblk0 bs=512 count=34 | md5sum 603 | ``` 604 | ``` 605 | ## 雅典娜 rootfs size 512M GPT 606 | dd if=/tmp/gpt-JDC_AX6600_Athena_dual-boot_rootfs512M_no-last-partition.bin of=/dev/mmcblk0 bs=512 count=34 conv=fsync 607 | dd if=/dev/mmcblk0 bs=512 count=34 | md5sum 608 | ``` 609 | 查看输出的md5,和上传文件的md5一样即可断电进uboot刷factory.bin固件了。 610 | 刷第三方OP固件后再进行新建分区、还原分区操作。 611 | ## TTL刷写 612 | 没有开SSH的,只能用TTL刷写uboot,然后uboot刷原厂1.5.40.r2181固件,不联网破解SSH后备份分区,再刷分区表。 613 | 电脑设置ip 192.168.10.1/24,关闭防火墙,把uboot文件放在tftp服务软件根目录,打开tftp服务软件。 614 | USB转TTL,亚瑟建议使用1.8V的TTL电平,雅典娜建议使用3.3V的,连接路由器串口,电脑使用串口软件打开串口。 615 | 串口TTL接线可以教程文件夹中的图片。 616 | 路由器上电后不停按回车,中断启动,然后输入命令刷写: 617 | ``` 618 | tftpboot uboot-JDC_AX1800_Pro-AX6600_Athena-20240510.bin && flash 0:APPSBL && flash 0:APPSBL_1 619 | ``` 620 | 可以输入命令检查分区crc32 hash值: 621 | ``` 622 | mmc read 0x50000000 0x00003422 0x500 && crc32 0x50000000 0xA0000 623 | mmc read 0x51000000 0x00003922 0x500 && crc32 0x51000000 0xA0000 624 | ``` 625 | 输出是这样的,最后得到我改的2024.05.10编译的uboot crc32值是3ab2f8a6: 626 | ``` 627 | IPQ6018# mmc read 0x50000000 0x00003422 0x500 && crc32 0x50000000 0xA0000 628 | 629 | MMC read: dev # 0, block # 13346, count 1280 ... 1280 blocks read: OK 630 | crc32 for 50000000 ... 5009ffff ==> 3ab2f8a6 631 | IPQ6018# mmc read 0x51000000 0x00003922 0x500 && crc32 0x51000000 0xA0000 632 | 633 | MMC read: dev # 0, block # 14626, count 1280 ... 1280 blocks read: OK 634 | crc32 for 51000000 ... 5109ffff ==> 3ab2f8a6 635 | ``` 636 | 637 | 如果你已经备份好分区了,也可以直接TTL刷分区表。 638 | 把你需要的rootfs大小的gpt分区表放在tftp的根目录下,然后用下面命令刷写。 639 | 这里以rootfs 512M为例,其他的自行修改命令中的文件名。 640 | ``` 641 | ## 亚瑟刷gpt 642 | tftpboot gpt-JDC_AX1800_Pro_dual-boot_rootfs512M_no-last-partition.bin && mmc write $fileaddr 0x0 0x22 643 | ``` 644 | ``` 645 | ## 雅典娜刷gpt 646 | tftpboot gpt-JDC_AX6600_Athena_dual-boot_rootfs512M_no-last-partition.bin && mmc write $fileaddr 0x0 0x22 647 | ``` 648 | 刷完之后可以验证crc32: 649 | ``` 650 | mmc read 0x50000000 0x0 0x22 && && crc32 0x50000000 0x4400 651 | ``` 652 | 对应crc32值如下: 653 | ``` 654 | ## 亚瑟gpt crc32值 655 | B1CC2783 gpt-JDC_AX1800_Pro_dual-boot_rootfs512M_no-last-partition.bin 656 | 1D500B9C gpt-JDC_AX1800_Pro_dual-boot_rootfs1024M_no-last-partition.bin 657 | BE66A69F gpt-JDC_AX1800_Pro_dual-boot_rootfs2048M_no-last-partition.bin 658 | ## 雅典娜gpt crc32值 659 | 98B76783 gpt-JDC_AX6600_Athena_dual-boot_rootfs512M_no-last-partition.bin 660 | 3A3064A4 gpt-JDC_AX6600_Athena_dual-boot_rootfs1024M_no-last-partition.bin 661 | 8D513E9D gpt-JDC_AX6600_Athena_dual-boot_rootfs2048M_no-last-partition.bin 662 | ``` 663 | 和文件的crc32一样即可断电进uboot刷factory.bin固件了。 664 | 刷第三方OP固件后再进行新建分区、还原分区操作。 665 | 666 | ## uboot支持固件说明 667 | uboot始终刷写固件到系统0并设置BOOTCONFIG后从系统0启动,即从0:HLOS、rootfs启动。 668 | 20240510版uboot开始,刷固件会清除固件的配置数据,不管刷OP还是原厂固件。 669 | 如果直接擦除0:BOOTCONFIG、0:BOOTCONFIG1分区,则始终从系统0启动。 670 | 注意,我的20240510版uboot开始在刷原厂固件的时候会擦除rootfs_data分区,即不保留原厂固件的设置信息。 671 | 672 | uboot支持原厂固件,需要分区表有0:HLOS、rootfs、0:WIFIFW和rootfs_data这几个分区。这个0:HLOS就是kernel。 673 | 原厂是双分区gpt分区表,包含0:HLOS、rootfs、0:WIFIFW和另一组0:HLOS_1、rootfs_1、0:WIFIFW_1,共享一个rootfs_data。 674 | 目前OP系统不使用0:WIFIFW、rootfs_data分区,而是将固件的kernel刷入0:HLOS,固件rootfs刷入rootfs分区,剩余rootfs分区的空间/dev/loop0挂载为overlay使用。 675 | 为了有更大空间刷OP,可以在原厂双分区gpt基础上修改出扩大rootfs大小(其他分区不变,storage大小需要根据调整改变)的双分区分区表使用, 676 | 也可以删除0:HLOS_1、rootfs_1分区,再扩大rootfs大小(其他分区不变,storage大小需要根据调整改变)变为单分区分区表使用。 677 | 单分区分区表则擦除0:BOOTCONFIG、0:BOOTCONFIG1分区,使系统始终从系统0启动。 678 | 无论是单还是双分区,原厂固件需要使用rootfs_data、0:WIFIFW分区,不然不能启动,所以要使用原厂固件需要有rootfs_data、0:WIFIFW分区。 679 | 单分区或者双分区分区表都可以在原厂系统中更新原厂固件。 680 | 如果需要跑分,刷了其他分区表,该分区表除了rootfs_data、0:WIFIFW分区还需要有0:ETHPHYFW、plugin、log、swap这些分区, 681 | 并将备份的分区数据恢复到这几个分区,同时OP下格式化最后一个storage分区,然后uboot刷回原厂固件。 682 | 系统启动后打开无线宝app,存储设置内置存储为本地网盘,然后直接恢复出厂,启动后再进入app设置内置存储为智能加速服务。 683 | 684 | uboot支持kernel固定6M大小的OP factory.bin固件,如大雕的QWRT factory.bin固件。 685 | OP仅需要分区表有0:HLOS、rootfs即可。 686 | 687 | ## uboot使用 688 | 电脑网线接路由器lan口,电脑ip设置192.168.1.2/24,然后路由器上电,按住reset按键不放,LED灯红色会闪烁5次,然后LED灯会变蓝色。 689 | LED变蓝色说明uboot failsafe webui已经开启,浏览器打开登录地址192.168.1.1。建议关闭所有网页,重新打开浏览器去打开192.168.1.1,避免出错。 690 | 上传文件点击更新后,LED灯蓝色闪烁,此时后台在上传文件并更新,更新完后出现UPDATE IN PROGRESS页面,同时LED灯会变绿3秒,没亮绿灯的是不成功,刷新浏览器192.168.1.1重新上传并更新。 691 | 【注意】个别机友反映刷uboot后设置固定ip进不来uboot的webui。这个可能是网卡和uboot的驱动不兼容,此时可尝试将网卡速率的自动协商手动修改为10M全双工,再尝试访问webui。刷好固件后再修改回自动协商。 692 | 693 | 694 | uboot页面下方version:2024.05.10_12:22:07是编译时间。 695 | uboot更新gpt后,建议进系统SSH登录再输入命令保存下分区表: 696 | ``` 697 | echo -e 'w' | fdisk /dev/mmcblk0 698 | ``` 699 | 其实保存分区表更建议用sgdisk或gdisk,不过一般固件没有集成需要自行安装: 700 | ``` 701 | sgdisk -e /dev/mmcblk0 702 | ``` 703 | 进入uboot webui更新固件:支持kernel为6MB大小的factory.bin和官方原厂固件JDCOS-JDC02。 704 | http://192.168.1.1 705 | 更新ART: 706 | http://192.168.1.1/art.html 707 | 更新CDT:上传CDT文件需要大于10KB 708 | http://192.168.1.1/cdt.html 709 | 更新IMG:可更新GPT分区表或者EMMC IMG镜像 710 | http://192.168.1.1/img.html 711 | 更新U-BOOT: 712 | http://192.168.1.1/uboot.html 713 | 注意:上传文件点击更新后,蓝灯会闪烁,然后更新成功后绿灯会亮3秒,没有亮绿灯的不成功,刷新浏览器192.168.1.1重新上传并更新。建议关闭所有网页,重新打开浏览器去打开192.168.1.1,避免出错。 714 | 715 | 716 | # 5.新建storage分区并还原跑分分区 717 | 我刷分区表和新建分区使用到sgdisk,但原厂系统安装插件报错。 718 | 所以刷好uboot后直接uboot刷第三方OP factory.bin固件,固件启动后,先手动安装sgdisk,当然在线安装也可。 719 | 720 | 上传sgdisk文件夹中的ipk到/tmp文件夹,然后用下面命令安装: 721 | ``` 722 | opkg install /tmp/sgdisk_1.0.6-1_aarch64_cortex-a53.ipk 723 | ``` 724 | 接着使用下面命令,新建storage分区(亚瑟、雅典娜使用同一个命令即可): 725 | ``` 726 | sgdisk -e -n 0:0:0 -c 0:storage -t 0:1B1720DA-A8BB-4B6F-92D2-0A93AB9609CA -p /dev/mmcblk0 727 | ``` 728 | 会输出如下信息,以亚瑟64G为例: 729 | ``` 730 | root@QWRT:~# sgdisk -e -n 0:0:0 -c 0:storage -t 0:1B1720DA-A8BB-4B6F-92D2-0A93AB9609CA -p /dev/mmcblk0 731 | Warning: Partition table header claims that the size of partition table 732 | entries is 0 bytes, but this program supports only 128-byte entries. 733 | Adjusting accordingly, but partition table may be garbage. 734 | Caution: invalid backup GPT header, but valid main header; regenerating 735 | backup header from main header. 736 | 737 | Warning! Main and backup partition tables differ! Use the 'c' and 'e' options 738 | on the recovery & transformation menu to examine the two tables. 739 | 740 | Warning! One or more CRCs don't match. You should repair the disk! 741 | Main header: OK 742 | Backup header: ERROR 743 | Main partition table: OK 744 | Backup partition table: ERROR 745 | 746 | **************************************************************************** 747 | Caution: Found protective or hybrid MBR and corrupt GPT. Using GPT, but disk 748 | verification and recovery are STRONGLY recommended. 749 | **************************************************************************** 750 | Setting name! 751 | partNum is 26 752 | Disk /dev/mmcblk0: 119783424 sectors, 57.1 GiB 753 | Sector size (logical/physical): 512/512 bytes 754 | Disk identifier (GUID): 98101B32-BBE2-4BF2-A06E-2BB33D000C20 755 | Partition table holds up to 28 entries 756 | Main partition table begins at sector 2 and ends at sector 8 757 | First usable sector is 34, last usable sector is 119783390 758 | Partitions will be aligned on 2-sector boundaries 759 | Total free space is 0 sectors (0 bytes) 760 | 761 | Number Start (sector) End (sector) Size Code Name 762 | 1 34 1569 768.0 KiB A012 0:SBL1 763 | 2 1570 2081 256.0 KiB FFFF 0:BOOTCONFIG 764 | 3 2082 2593 256.0 KiB FFFF 0:BOOTCONFIG1 765 | 4 2594 6177 1.8 MiB A016 0:QSEE 766 | 5 6178 9761 1.8 MiB FFFF 0:QSEE_1 767 | 6 9762 10273 256.0 KiB FFFF 0:DEVCFG 768 | 7 10274 10785 256.0 KiB FFFF 0:DEVCFG_1 769 | 8 10786 11297 256.0 KiB A018 0:RPM 770 | 9 11298 11809 256.0 KiB FFFF 0:RPM_1 771 | 10 11810 12321 256.0 KiB A01B 0:CDT 772 | 11 12322 12833 256.0 KiB FFFF 0:CDT_1 773 | 12 12834 13345 256.0 KiB FFFF 0:APPSBLENV 774 | 13 13346 14625 640.0 KiB A015 0:APPSBL 775 | 14 14626 15905 640.0 KiB FFFF 0:APPSBL_1 776 | 15 15906 16417 256.0 KiB FFFF 0:ART 777 | 16 16418 28705 6.0 MiB FFFF 0:HLOS 778 | 17 28706 40993 6.0 MiB FFFF 0:HLOS_1 779 | 18 40994 1089569 512.0 MiB FFFF rootfs 780 | 19 1089570 1097761 4.0 MiB FFFF 0:WIFIFW 781 | 20 1097762 1220641 60.0 MiB FFFF rootfs_1 782 | 21 1220642 1228833 4.0 MiB FFFF 0:WIFIFW_1 783 | 22 1228834 1269793 20.0 MiB FFFF rootfs_data 784 | 23 1269794 1270817 512.0 KiB FFFF 0:ETHPHYFW 785 | 24 1270818 1450017 87.5 MiB FFFF plugin 786 | 25 1450018 2064417 300.0 MiB FFFF log 787 | 26 2064418 3112993 512.0 MiB FFFF swap 788 | 27 3112994 119783390 55.6 GiB FFFF storage 789 | Warning: The kernel is still using the old partition table. 790 | The new table will be used at the next reboot or after you 791 | run partprobe(8) or kpartx(8) 792 | The operation has completed successfully. 793 | ``` 794 | 注意亚瑟和雅典娜GPT分区表是不一样的,因为有三个分区大小是不一样的: 795 | ART: 亚瑟256KiB 雅典娜512KiB 796 | plugin: 亚瑟87.5MiB 雅典娜87.25MiB 797 | log: 亚瑟300MiB 雅典娜1024 MiB 798 | 799 | 没有报错,sgdisk最后输出successfully即可,有错误则及时排错。新建错了重刷分区表,接着重新新建分区。 800 | 检查第18分区rootfs是分区表设置的大小,比如rootfs512M的分区表rootfs就是512MB。 801 | 检查第27分区storage大小接近整个EMMC大小,比如64G EMMC,storage分区有55GB左右。 802 | 803 | 建议此时备份下载修改后的分区表,以后有问题进不了系统,可以直接uboot刷这个分区表。 804 | 当然刷no-last-partition的分区表后再新建分区也行,一样的。 805 | ``` 806 | dd if=/dev/mmcblk0 bs=512 count=34 of=/tmp/mmcblk0_GPT_sgdisk.bin 807 | ``` 808 | 都没有问题可以SSH输入reboot重启了。 809 | 固件启动后再格式化最后一个分区并恢复京东云跑分的分区。 810 | 如果不需要跑分了,系统启动后格式化下最后一个分区,修复下swap分区,再重启下就行。 811 | ``` 812 | mkfs.ext4 $(blkid -t PARTLABEL=storage -o device) 813 | ``` 814 | ``` 815 | swapoff $(blkid -t PARTLABEL=swap -o device) 816 | mkswap $(blkid -t PARTLABEL=swap -o device) 817 | swapon $(blkid -t PARTLABEL=swap -o device) 818 | ``` 819 | swapoff命令如果swap分区已经卸载,会报错,这是正常的,不用管:failed to swapoff /dev/mmcblk0p26 (-1) 820 | 821 | 如果需要跑分,则不用在这里修复swap分区,可以直接往下看,恢复plugin、log、swap分区。 822 | 因为保留了双分区,所以刷uboot和gpt之后还是支持原厂系统的。 823 | 原厂系统升级会覆盖另外一个系统分区,如此反复。第三方OP一般是单分区固件,只在第一个系统分区升级,不会覆盖第二个系统分区。 824 | 825 | 回官方原厂直接uboot刷回即可,但是要跑分需要恢复跑分的分区。 826 | 刷回原厂后想要再刷第三方OP则直接uboot刷即可,不需要其他操作了,可以自由切换。 827 | 828 | 可以将要恢复的分区文件拷贝到USB设备然后刷回,我这里以上传到/mnt/mmcblk0p27挂载点为例。 829 | 前面已经格式化了storage分区,这里直接新建文件夹并挂载即可。 830 | ``` 831 | mkdir /mnt/mmcblk0p27 832 | mount -t ext4 /dev/mmcblk0p27 /mnt/mmcblk0p27 833 | ``` 834 | WinSCP之类软件上传下面3个备份文件到/mnt/mmcblk0p27 835 | mmcblk0p24_log.bin 836 | mmcblk0p25_plugin.bin 837 | mmcblk0p26_swap.bin 838 | 839 | 使用下面命令刷回: 840 | ``` 841 | dd if=/dev/zero of=$(blkid -t PARTLABEL=0:ETHPHYFW -o device) conv=fsync 842 | dd if=/mnt/mmcblk0p27/mmcblk0p24_plugin.bin of=$(blkid -t PARTLABEL=plugin -o device) conv=fsync 843 | dd if=/mnt/mmcblk0p27/mmcblk0p25_log.bin of=$(blkid -t PARTLABEL=log -o device) conv=fsync 844 | swapoff $(blkid -t PARTLABEL=swap -o device) 845 | dd if=/mnt/mmcblk0p27/mmcblk0p26_swap.bin of=$(blkid -t PARTLABEL=swap -o device) conv=fsync 846 | swapon $(blkid -t PARTLABEL=swap -o device) 847 | ``` 848 | 第1个命令如果swap分区已经卸载,会报错,这是正常的,不用管:failed to swapoff /dev/mmcblk0p26 (-1) 849 | 第2个命令dd像mmcblk0p23没有空间,这是正常的,不用管:error writing '/dev/mmcblk0p23': No space left on device 850 | 其他几个个命令没有报错即可。 851 | 852 | 恢复完分区后可以删除文件,重启下就行。 853 | 854 | 如果后面要回原厂跑分,进入uboot直接刷原厂固件。 855 | 系统启动后打开无线宝app,存储设置内置存储为本地网盘,然后直接恢复出厂,启动后再进入app设置内置存储为智能加速服务。 856 | 恢复智能跑分服务后可能无线宝app中的服务状态一直在自动修复,灯是蓝色的不能马上变绿灯,需要等待,我试的情况是有可能需要1-2个小时才恢复绿灯。 857 | 如果刷回原厂超过2小时跑分服务一直在修复,可以尝试重新刷log、plugin、swap分区。 858 | 再重试设置内置存储为本地网盘,然后直接恢复出厂,启动后再设置内置存储为智能加速服务。 859 | 如何恢复分区回原厂快速开始跑分,我没有摸索出规律,所以得大家自己多尝试。 860 | 861 | 862 | ##【刷分区表的一点小提示】## 863 | 建议用fdisk、gdisk之类的进行修改分区。 864 | 如果不慎修改后系统不能启动,可以进入uboot,浏览器输入 http://192.168.1.1/img.html 重新刷正常的gpt分区表即可。 865 | 866 | 如果uboot或系统中更换了其他分区表,但不需要使用前面的sgdisk命令新建分区并保存分区表。 867 | 这样则建议在系统中使用fdisk或者sgdisk(一般需要先安装)单独保存下分区表: 868 | 例如系统中单独写gpt分区表: 869 | ``` 870 | dd if=/tmp/gpt.bin of=/dev/mmcblk0 bs=512 count=34 conv=fsync 871 | ``` 872 | 则建议保存下分区表: 873 | ``` 874 | echo -e 'w' | fdisk /dev/mmcblk0 875 | ``` 876 | 或者 877 | ``` 878 | sgdisk -e /dev/mmcblk0 879 | ``` 880 | ##【关于分区表不包含最后那个大分区的原因】## 881 | gpt分区表的最大扇区数不能大于EMMC的物理最大扇区数,小于等于则没问题。比如128G的EMMC刷64G的分区表可以,刷256G的分区表会出错。 882 | MT798X EMMC机子的bl2在boot0硬件分区,不受userdata硬件分区的gpt分区表影响,即使gpt坏了也可以启动uboot,所以比较抗揍。 883 | 比如百里测试刷最大扇区数大于EMMC扇区数的分区表也能启动uboot,只是固件启动会报错,可以进uboot重新刷正常的分区表。 884 | 不过高通IPQ60XX EMMC机子SBL是在userdata硬件分区中由gpt分区表划分出来的第一个软件分区,会受到gpt分区表的影响。 885 | 比如京东云AX1800 Pro亚瑟测试直接刷最大扇区数大于EMMC扇区数的分区表会砖,需要USB救砖。 886 | 887 | 同时如果最后一个大的分区超过了EMMC的扇区数,fdisk、parted、gdisk这些工具并不能直接修复,仍然需要删除新建。 888 | 889 | 基于这两个原因,我改的分区表都采用天灵大佬的gpt分区表的做法,不保留最后一个最大的分区了,即no-last-partition。 890 | 这样的分区表只包含前面的小分区,扇区总数是小于4G,所以适用所有大于4G的EMMC。 891 | 注意:因为雅典娜rootfs 2048M已经超过4G,所以如果自行更换eMMC使用雅典娜rootfs 2048M分区表的,建议使用8G及以上的eMMC。 892 | 刷好no-last-partition分区表后,使用sgdisk用未分配空间新建一个分区,并还原分区的type code。 893 | 894 | 895 | # 6.USB 9008救砖 896 | USB救砖不是万能,只有特定情况可以不拆机。 897 | 可以不拆机的情况: 898 | 只要变砖后使用双公头USB-A线(有Tpye-C接口的也可以用一头Tpye-C一头USB-A数据线)接路由器和电脑,电脑设备管理器显示QUSB或Qualcomm HS-USB QDLoader 9008的,就可以直接救砖。会导致变砖路由器直接进入高通9008模式的情况: 899 | 1.刷坏gpt分区表,导致不能启动SBL1,只擦除gpt的话会使用EMMC最后33个扇区保存的备份gpt启动,不会砖; 900 | 2.擦除或者刷其他文件(非ipq60xx系列SBL1)到SBL1分区,QSEE、DEVCFG、RPM这个分区同理,不过这个几个没什么刷的; 901 | 3.擦除uboot分区(即0:APPSBL分区)或者刷了其他文件(非ipq60xx系列uboot)到该分区; 902 | 4.擦除cdt分区(即0:CDT分区)或者刷了非cdt文件到该分区。 903 | 需要拆机短接电阻进入高通9008模式的情况: 904 | 1.刷错了ipq60xx系列uboot(如ax5_jdc gl-ax1800 uboot)到uboot分区,这种情况会启动SBL1加载uboot,导致不能直接进9008,要拆机用镊子短接启动电阻焊盘,才可以进9008; 905 | 2.刷错了cdt(如ax5_jdc gl-ax1800 cdt)到cdt分区。 906 | 907 | 详见USB救砖教程压缩包。 908 | 909 | -------------------------------------------------------------------------------- /Tutorial/JDCloud-AX6000-Baili.md: -------------------------------------------------------------------------------- 1 | 最新教程和原厂固件下载链接: 2 | https://github.com/lgs2007m/Actions-OpenWrt/releases/tag/Router-Flashing-Files 3 | 4 | 目录 5 | 0.开SSH 6 | 1.备份原厂分区 7 | 2.刷bl2和uboot 8 | 3.刷gpt分区表 9 | 4.uboot刷固件、格式化storage分区和切换固件 10 | 5.刷回原厂 11 | 6.串口TTL救砖 12 | 13 | mt798x的fip分区实际上包含bl31+uboot,为了方便理解,这里的教程将fip直接称为uboot。 14 | 15 | 本教程使用基于hanwckf大佬bl-mt798x仓库uboot-202206源码修改编译的bl2、uboot和gpt,不支持DHCP。 16 | 目前已同时支持21.02闭源固件(.bin格式Legacy image)和openwrt、immortalwrt主线master/23.05分支固件(.itb格式FIT image)直接刷入启动,可在SSH修改环境变量,直接切换启动两种固件,无需重刷,配置保留。 17 | 18 | uboot及gpt源码请查看 https://github.com/lgs2007m/bl-mt798x/tree/emmc 19 | 感谢天灵等一众大佬提供的FIT image支持,感谢hanwckf大佬的bl-mt798x项目。 20 | 21 | - ### 准备刷机文件和工具软件 22 | 最新刷机文件下载:https://github.com/lgs2007m/Actions-OpenWrt/releases/tag/Router-Flashing-Files 23 | SSH工具软件:Xshell https://pan.lanzoui.com/b0f19ry9g 或者putty https://www.423down.com/11333.html 24 | 文件传输工具软件:WinSCP https://www.ghxi.com/winscp.html 25 | 26 | 关于mt798x改内存:目前开源ATF 7981 DDR3最高512M,DDR4最高1G;7986 DDR3最高512M,DDR4 2G。 27 | 28 | - ### 0.开SSH 29 | 京东云AX6000百里没有软破解SSH,通过原厂系统升级官方放出的原生OP可获取SSH权限。 30 | 原厂系统中升级官方原生OP: 31 | openwrt-re-cp-03-4.1.0.r4005-1287bf0122329d5c3acbb7198e04b1e4.bin 32 | 注意:官方宣传升级原生OP会失去保修,请自行斟酌。 33 | 34 | 升级系统重启完成后,使用SSH软件登录192.168.68.1,端口22,用户名root,没有密码。 35 | 输入命令删除这两个环境变量: 36 | ``` 37 | fw_setenv jdc_crc_version && fw_setenv jdc_opp_version 38 | ``` 39 | 下面简单看下原厂分区的信息,不想了解的可以略过,直接跳到备份原厂分区部分。 40 | blkid命令可以直接使用,sgdisk和lsblk命令需要安装后才能使用。 41 | 可以看到原厂有两个系统分区kernel、rootfs和kernel2、rootfs2,即双分区,共用一个50MB的rootfs_data。 42 | kernel和rootfs分区用于.bin格式Legacy image,kernel、kernel2都是16MB,rootfs、rootfs2都是50MB。 43 | 固件中kernel一般占3MB左右,分区表kernel分区16MB完全够用,但是rootfs大小限制了原厂双分区分区表刷固件的大小。 44 | 因此原厂双分区分区表下刷固件不能大于kernel+rootfs大小即53MB。 45 | 因为原厂使用旧的mt7986-emmc.json来制作gpt分区表,所以gpt分区会在blkid第一个分区显示出来,即PMBR分区。 46 | 同时下面的分区对应分区设备号,相比RAX3000M eMMC、GL-MT6000的分区设备号会加1。 47 | 比如RAX3000M eMMC的fip分区的设备号是mmcblk0p3,百里的fip分区设备号则是mmcblk0p4。 48 | 新的gpt分区表和RAX3000M eMMC、GL-MT6000都是使用新版json来制作,gpt分区不会显示出来。 49 | blkid是否显示gpt分区和设备号加1,不影响使用,系统是读取PARTLABEL来读写的。 50 | 51 | ``` 52 | root@OpenWrt:~# blkid 53 | /dev/mmcblk0p1: PTTYPE="PMBR" 54 | /dev/mmcblk0p2: PARTLABEL="u-boot-env" PARTUUID="19a4763a-6b19-4a4b-a0c4-8cc34f4c2ab9" 55 | /dev/mmcblk0p3: PARTLABEL="factory" PARTUUID="8142c1b2-1697-41d9-b1bf-a88d76c7213f" 56 | /dev/mmcblk0p4: PARTLABEL="fip" PARTUUID="18de6587-4f17-4e08-a6c9-d9d3d424f4c5" 57 | /dev/mmcblk0p5: PARTLABEL="kernel" PARTUUID="971f7556-ef1a-44cd-8b28-0cf8100b9c7e" 58 | /dev/mmcblk0p6: TYPE="squashfs" PARTLABEL="rootfs" PARTUUID="309a3e76-270b-41b2-b5d5-ed8154e7542b" 59 | /dev/mmcblk0p7: PARTLABEL="kernel2" PARTUUID="9c8e460f-7160-4c25-a420-e7deeb10d5d3" 60 | /dev/mmcblk0p8: TYPE="squashfs" PARTLABEL="rootfs2" PARTUUID="508b8f82-164c-4898-8edc-adaa59438cd4" 61 | /dev/mmcblk0p9: LABEL="rootfs_data" UUID="ea5ae1d2-cdc2-40c9-bada-0a9c0d8f63a6" BLOCK_SIZE="1024" TYPE="ext4" PARTLABEL="rootfs_data" PARTUUID="dd18c072-adb3-412b-bf97-37617b01adf3" 62 | /dev/mmcblk0p10: UUID="4f3e32d7-cf18-40a9-a42d-0afa648c1513" BLOCK_SIZE="1024" TYPE="ext4" PARTLABEL="log" PARTUUID="2d18c070-adb6-412b-bf90-37617b01adf5" 63 | /dev/mmcblk0p11: UUID="fac0a627-0346-4883-bea5-f0aefccb31aa" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="plugin" PARTUUID="3d18c075-adb0-412b-bf92-37617b01adf6" 64 | /dev/mmcblk0p12: TYPE="swap" PARTLABEL="swap" PARTUUID="4d18c079-adb2-412b-bf93-37617b01adf7" 65 | /dev/mmcblk0p13: UUID="a10bd4dd-7f44-4760-a1e9-51a71442922a" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="storage" PARTUUID="5d18c072-adb3-412b-bf95-37617b01adf8" 66 | root@OpenWrt:~# sgdisk -p /dev/mmcblk0 67 | Warning! Main partition table overlaps the first partition by 34 blocks! 68 | You will need to delete this partition or resize it in another utility. 69 | Disk /dev/mmcblk0: 241664000 sectors, 115.2 GiB 70 | Sector size (logical/physical): 512/512 bytes 71 | Disk identifier (GUID): 2BD17853-102B-4500-AA1A-8A21D4D7984D 72 | Partition table holds up to 128 entries 73 | Main partition table begins at sector 2 and ends at sector 33 74 | First usable sector is 34, last usable sector is 240615424 75 | Partitions will be aligned on 1024-sector boundaries 76 | Total free space is 8158 sectors (4.0 MiB) 77 | 78 | Number Start (sector) End (sector) Size Code Name 79 | 2 8192 9215 512.0 KiB 8300 u-boot-env 80 | 3 9216 13311 2.0 MiB 8300 factory 81 | 4 13312 17407 2.0 MiB 8300 fip 82 | 5 17408 50175 16.0 MiB 8300 kernel 83 | 6 50176 152575 50.0 MiB 8300 rootfs 84 | 7 152576 185343 16.0 MiB 8300 kernel2 85 | 8 185344 287743 50.0 MiB 8300 rootfs2 86 | 9 287744 390143 50.0 MiB 8300 rootfs_data 87 | 10 390144 524287 65.5 MiB 8300 log 88 | 11 524288 2621439 1024.0 MiB 8300 plugin 89 | 12 2621440 4718591 1024.0 MiB 8300 swap 90 | 13 4718592 240615424 112.5 GiB 8300 storage 91 | root@OpenWrt:~# lsblk 92 | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT 93 | mmcblk0 179:0 0 115.2G 0 disk 94 | ├─mmcblk0p1 179:1 0 17K 0 part 95 | ├─mmcblk0p2 179:2 0 512K 0 part 96 | ├─mmcblk0p3 179:3 0 2M 0 part 97 | ├─mmcblk0p4 179:4 0 2M 0 part 98 | ├─mmcblk0p5 179:5 0 16M 0 part 99 | ├─mmcblk0p6 179:6 0 50M 0 part 100 | ├─mmcblk0p7 179:7 0 16M 0 part 101 | ├─mmcblk0p8 259:0 0 50M 0 part /rom 102 | ├─mmcblk0p9 259:1 0 50M 0 part /overlay 103 | ├─mmcblk0p10 259:2 0 65.5M 0 part /log 104 | ├─mmcblk0p11 259:3 0 1G 0 part /opt 105 | ├─mmcblk0p12 259:4 0 1G 0 part [SWAP] 106 | └─mmcblk0p13 259:5 0 112.5G 0 part /mnt/mmcblk0p13 107 | mmcblk0boot0 179:8 0 4M 1 disk 108 | mmcblk0boot1 179:16 0 4M 1 disk 109 | ``` 110 | 111 | - ### 1.备份原厂分区 112 | 只需要备份gpt到mmcblk0p12 swap分区即可,最后一个mmcblk0p13 storage分区太大不备份了。 113 | 因为plugin、swap分区都有1G,比较大,所以先备份到挂载点/mnt/mmcblk0p13中,然后使用WinScp之类的软件登录下载下来。 114 | 115 | 提示:bl2在/dev/mmcblk0boot0,uboot在fip分区。 116 | unpartitioned.bin是全0的空白文件,是为了后面可以使用备份的分区按顺序直接合并得到一个eMMC img镜像。 117 | 除更换eMMC,这个img基本用不到,不过还是全部分区备份为好。 118 | **注意:放在一起的命令全部复制粘贴执行,sync也一起复制,最后的时候回车执行sync即可,下同,不再赘述。** 119 | **这行sync命令主要是为了方便多行命令一起复制粘贴执行,不会遗漏上面的命令。** 120 | 121 | 直接复制下面全部命令,粘贴执行即可: 122 | ``` 123 | dd if=/dev/mmcblk0boot0 bs=512 count=2048 of=/mnt/mmcblk0p13/mmcblk0boot0_bl2.bin conv=fsync 124 | dd if=/dev/mmcblk0p1 of=/mnt/mmcblk0p13/mmcblk0p1_PMBR.bin conv=fsync 125 | dd if=/dev/mmcblk0 bs=512 skip=34 count=8158 of=/mnt/mmcblk0p13/mmcblk0p1_unpartitioned.bin conv=fsync 126 | dd if=/dev/mmcblk0p2 of=/mnt/mmcblk0p13/mmcblk0p2_u-boot-env.bin conv=fsync 127 | dd if=/dev/mmcblk0p3 of=/mnt/mmcblk0p13/mmcblk0p3_factory.bin conv=fsync 128 | dd if=/dev/mmcblk0p4 of=/mnt/mmcblk0p13/mmcblk0p4_fip.bin conv=fsync 129 | dd if=/dev/mmcblk0p5 of=/mnt/mmcblk0p13/mmcblk0p5_kernel.bin conv=fsync 130 | dd if=/dev/mmcblk0p6 of=/mnt/mmcblk0p13/mmcblk0p6_rootfs.bin conv=fsync 131 | dd if=/dev/mmcblk0p7 of=/mnt/mmcblk0p13/mmcblk0p7_kernel2.bin conv=fsync 132 | dd if=/dev/mmcblk0p8 of=/mnt/mmcblk0p13/mmcblk0p8_rootfs2.bin conv=fsync 133 | dd if=/dev/mmcblk0p9 of=/mnt/mmcblk0p13/mmcblk0p9_rootfs_data.bin conv=fsync 134 | dd if=/dev/mmcblk0p10 of=/mnt/mmcblk0p13/mmcblk0p10_log.bin conv=fsync 135 | dd if=/dev/mmcblk0p11 of=/mnt/mmcblk0p13/mmcblk0p11_plugin.bin conv=fsync 136 | dd if=/dev/mmcblk0p12 of=/mnt/mmcblk0p13/mmcblk0p12_swap.bin conv=fsync 137 | sync 138 | ``` 139 | 耐心等待执行完成,最后一行sync回车执行即可,注意看最后一个swap分区是否备份完成。 140 | 然后使用WinSCP之类的软件登录路由器,到/mnt/mmcblk0p13目录下载下来保存到电脑。 141 | WinScp软件登录路由器,协议SCP,IP 192.168.68.1,端口22,点击高级,高级站点设置-连接 去掉勾选“优化连接缓冲大小”,再点击登录。 142 | 143 | 注:/mnt/mmcblk0p13里的aiecpluginD、jdc_docker文件夹里面是跑分的缓存数据。 144 | 如果不大,也可自行压缩后备份,刷机后直接恢复到storage分区,这样回原厂跑分直接用这些数据,可以更快恢复跑分。 145 | 太大就不建议备份,回原厂后重新缓存即可。 146 | 147 | - ### 2.刷bl2和uboot 148 | 百里的bl2和uboot是开启了Secure Boot验证的,需要把bl2和uboot所在fip分区一起替换掉,不能只替换uboot!!! 149 | 因为有些数据洁癖,我直接将编译得到的bl2二进制文件尾部填充0扩大至256KB,fip尾部填充0至2048KB。 150 | 这样刷文件就可直接覆盖有数据部分,相当于清空分区再刷写,所以文件看着有点大。 151 | 当然直接使用编译得到的原始文件也没问题刷写也可以。 152 | 153 | 将bl2和uboot上传到路由器/tmp目录,SSH输入命令验证md5: 154 | ``` 155 | md5sum /tmp/mt7986_jdcloud_re-cp-03*.bin 156 | ``` 157 | 2024.10.10版bl2、uboot的md5值是: 158 | ``` 159 | root@OpenWrt:~# md5sum /tmp/mt7986_jdcloud_re-cp-03*.bin 160 | 6c0d654a9dc261b769b472f1e3bb4df9 /tmp/mt7986_jdcloud_re-cp-03-bl2_20241010.bin 161 | 053cb614b1309f5d04544fb3380548ed /tmp/mt7986_jdcloud_re-cp-03-fip_legacy-and-fit_20241010.bin 162 | ``` 163 | 核对md5正常后,先输入下面命令切换到shell (ash): 164 | ``` 165 | ash 166 | ``` 167 | 然后一起复制下面命令粘贴执行,刷写bl2和uboot: 168 | ``` 169 | echo 0 > /sys/block/mmcblk0boot0/force_ro 170 | dd if=/tmp/mt7986_jdcloud_re-cp-03-bl2_20241010.bin of=/dev/mmcblk0boot0 conv=fsync 171 | echo 1 > /sys/block/mmcblk0boot0/force_ro 172 | dd if=/tmp/mt7986_jdcloud_re-cp-03-fip_legacy-and-fit_20241010.bin of=$(blkid -t PARTLABEL=fip -o device) conv=fsync 173 | sync 174 | ``` 175 | 最后一行sync回车执行,刷写完没有报错,则检查下分区的md5值,和我一样即可,不一样就重新刷,不能重启!! 176 | ``` 177 | md5sum /dev/mmcblk0boot0 && md5sum $(blkid -t PARTLABEL=fip -o device) 178 | ``` 179 | 输出结果和我一样即可: 180 | ``` 181 | root@OpenWrt:~# md5sum /dev/mmcblk0boot0 && md5sum $(blkid -t PARTLABEL=fip -o device) 182 | 7dfc7a41871f6dcfd8fbcdc23706ee5c /dev/mmcblk0boot0 183 | 053cb614b1309f5d04544fb3380548ed /dev/mmcblk0p4 184 | ``` 185 | 到这里bl2和uboot已经刷好了,不要重启,接着刷gpt分区表。 186 | 187 | 注:如果是从ImmortalWrt天灵单分区分区表或OpenWrt、ImmortalWrt主线分区表刷uboot,这里验证fip分区的md5是不一样的。 188 | 因为他们的分区表把原厂2M的fip分区扩大到了4M,我这个分区表还是保持fip为2M。 189 | 可以临时用下面命令验证fip分区数据的md5,和上面一样即可: 190 | ``` 191 | dd if=$(blkid -t PARTLABEL=fip -o device) bs=512 count=4096 | md5sum 192 | ``` 193 | 后面再刷我的gpt分区表,fip分区会变为2M,重启新的分区表生效后,再验证分区的md5就会和我的一样了。 194 | 195 | 天灵和大雕的刷机命令是直接使用偏移量,因为fip分区偏移量不变,所以不用管设备号。 196 | 我上面刷uboot的命令自动找fip分区所在设备号,也不用你管设备号,可以直接用。 197 | 更新uboot建议使用我教程的命令,或者直接进Uboot Web failsafe UI(简称uboot webui)里面更新即可。bl2一般不需要再更新了。 198 | 199 | - ### 3.刷gpt分区表 200 | 原生OP没有sgdisk,刷gpt分区表前,先安装sgdisk以便后面编辑分区表。 201 | 将sgdisk文件夹里面的sgdisk_1.0.6-1_aarch64_cortex-a53.ipk上传/tmp目录,然后SSH运行下面命令安装: 202 | ``` 203 | opkg install -d root /tmp/sgdisk_1.0.6-1_aarch64_cortex-a53.ipk 204 | ``` 205 | 我的百里gpt分区表保留了原厂跑分的分区log、plugin、swap,没有最后一个storage大分区,需要在刷完分区表后使用sgdisk命令新建storage分区。 206 | gpt分区表文件名中rootfs512M_production512M代表rootfs和production分区分别都是512M,依次类推。 207 | kernel+rootfs分区用于21.02闭源固件(.bin格式Legacy image),production分区用于openwrt、immortalwrt主线master/23.05分支固件(.itb格式FIT image)。 208 | 这个rootfs/production大小就是固件+overlay的大小,overlay近似是刷固件后剩余空间(软件包空间)大小,建议使用rootfs512M/production512M的分区表,当然也可选择自己需要大小的分区表。 209 | 因为刷分区表改变了后面的分区的偏移量,所以后面分区的数据就不能识别了。 210 | 如果不需要回原厂跑分,直接使用RAX3000M-eMMC/XR30-eMMC的分区表也可以,新建和格式化最后一个storage分区的命令建议还是用百里的。 211 | 如果要回原厂跑分,后面会讲到需要先恢复log、plugin、swap,新建并格式化最后一个storage分区。 212 | 213 | 上传你需要rootfs/production大小的gpt分区表文件到路由器/tmp目录,先验证md5: 214 | ``` 215 | md5sum /tmp/jdcloud_re-cp-03_*gpt.bin 216 | ``` 217 | ``` 218 | root@OpenWrt:~# md5sum /tmp/jdcloud_re-cp-03_*gpt.bin 219 | 823e50e29dd27b55ce11a3757e676da7 /tmp/jdcloud_re-cp-03_rootfs1024M_production1024M-gpt.bin 220 | 2d57350e2f5da3a7c7fbc2b6a196a82f /tmp/jdcloud_re-cp-03_rootfs256M_production256M-gpt.bin 221 | 3abe28bfa7b6072b05059c6cdf292a6f /tmp/jdcloud_re-cp-03_rootfs512M_production512M-gpt.bin 222 | ``` 223 | 你上传的文件的md5信息和上面对应文件的md5对比,没问题即可。 224 | 下面的命令以rootfs/production512M的分区表为例,如果换其他的分区表,只修改if参数中的gpt分区表文件名即可,其他不要改。 225 | 第1条dd命令是写入gpt分区表文件到/dev/mmcblk0的前34个扇区 226 | 第2条sgdisk命令是用未分配空间新建storage分区,-1G代表末尾的1G空间留白,可自行调整 227 | 第3条sync命令主要是为了方便多行命令一起复制粘贴执行,不会遗漏上面的命令 228 | 接着一起复制下面3条命令,一起粘贴执行: 229 | ``` 230 | dd if=/tmp/jdcloud_re-cp-03_rootfs512M_production512M-gpt.bin of=/dev/mmcblk0 bs=512 count=34 conv=fsync 231 | sgdisk -e -n 0:0:-1G -c 0:storage -t 0:0FC63DAF-8483-4772-8E79-3D69D8477DE4 -u 0:5D18C072-ADB3-412B-BF95-37617B01ADF8 -p /dev/mmcblk0 232 | sync 233 | ``` 234 | 最后一行sync回车执行,你会看到如下输出: 235 | ``` 236 | root@OpenWrt:~# dd if=/tmp/jdcloud_re-cp-03_rootfs512M_production512M-gpt.bin of=/dev/mmcblk0 bs=512 count=34 conv=fsync 237 | 34+0 records in 238 | 34+0 records out 239 | root@OpenWrt:~# sgdisk -e -n 0:0:-1G -c 0:storage -t 0:0FC63DAF-8483-4772-8E79-3D69D8477DE4 -u 0:5D18C072-ADB3-412B-BF95-37617B01ADF8 -p /dev/mmcblk0 240 | Setting name! 241 | partNum is 9 242 | Disk /dev/mmcblk0: 241664000 sectors, 115.2 GiB 243 | Sector size (logical/physical): 512/512 bytes 244 | Disk identifier (GUID): 2BD17853-102B-4500-AA1A-8A21D4D7984D 245 | Partition table holds up to 128 entries 246 | Main partition table begins at sector 2 and ends at sector 33 247 | First usable sector is 34, last usable sector is 241663966 248 | Partitions will be aligned on 1024-sector boundaries 249 | Total free space is 2105310 sectors (1.0 GiB) 250 | 251 | Number Start (sector) End (sector) Size Code Name 252 | 1 8192 9215 512.0 KiB 8300 u-boot-env 253 | 2 9216 13311 2.0 MiB 8300 factory 254 | 3 13312 17407 2.0 MiB 8300 fip 255 | 4 17408 50175 16.0 MiB 8300 kernel 256 | 5 50176 1098751 512.0 MiB 8300 rootfs 257 | 6 1098752 2147327 512.0 MiB FFFF production 258 | 7 2147328 2281471 65.5 MiB 8300 log 259 | 8 2281472 4378623 1024.0 MiB 8300 plugin 260 | 9 4378624 6475775 1024.0 MiB 8300 swap 261 | 10 6475776 239566814 111.1 GiB 8300 storage 262 | Warning: The kernel is still using the old partition table. 263 | The new table will be used at the next reboot or after you 264 | run partprobe(8) or kpartx(8) 265 | The operation has completed successfully. 266 | root@OpenWrt:~# sync 267 | root@OpenWrt:~# 268 | ``` 269 | dd写入没有报错,sgdisk最后输出successfully即可。如果分区表明显不一样或有错误则及时排错,重新刷。 270 | 检查第5、6分区rootfs、production是分区表设置的大小,比如rootfs/production512M的分区表rootfs/production就是512MB。 271 | 检查第9分区storage大小接近整个eMMC大小,比如128G eMMC,storage分区有110GB左右。 272 | 273 | 建议此时备份下载修改后的分区表,以后有问题进不了系统,可以直接uboot刷这个分区表。 274 | 当然重刷分区表后再新建分区也行,一样的。 275 | ``` 276 | dd if=/dev/mmcblk0 bs=512 count=34 of=/tmp/mmcblk0_GPT_sgdisk.bin 277 | ``` 278 | 都没有问题可以断电,按reset上电进uboot刷固件了。 279 | 280 | ##【刷分区表的一点小提示】## 281 | 不建议用diskman磁盘管理修改分区,可能会导致系统不能启动。建议用fdisk、gdisk之类的工具修改分区。 282 | 如果不慎修改后系统不能启动,可以进入uboot,浏览器输入 http://192.168.1.1/gpt.html 重新刷正常的gpt分区表即可。 283 | 284 | 如果在uboot或系统中更换了其他分区表,但又不需要新建分区,这种情况建议在系统中使用fdisk或者sgdisk(一般需要先安装)单独保存下分区表,这样在diskman那里显示才正确: 285 | 例如系统中更换gpt分区表: 286 | ``` 287 | dd if=/tmp/gpt.bin of=/dev/mmcblk0 bs=512 count=34 conv=fsync 288 | ``` 289 | 则建议保存下分区表: 290 | ``` 291 | echo -e 'w' | fdisk /dev/mmcblk0 292 | ``` 293 | 或者 294 | ``` 295 | sgdisk -e /dev/mmcblk0 296 | ``` 297 | ##【关于分区表不包含最后那个大分区的原因】## 298 | gpt分区表的最大扇区数不能大于eMMC的物理最大扇区数,小于等于则没问题。比如128G的eMMC刷64G的分区表可以,刷256G的分区表会出错。 299 | mt798x eMMC机子的bl2在boot0硬件分区,不受userdata硬件分区的gpt分区表影响,即使gpt坏了也可以启动uboot,所以比较抗揍。 300 | 比如百里测试刷最大扇区数大于eMMC扇区数的分区表也能启动uboot,只是固件启动会报错,可以进uboot重新刷正常的分区表。 301 | 不过高通ipq60xx eMMC机子SBL是在userdata硬件分区中由gpt分区表划分出来的第一个软件分区,会受到gpt分区表的影响。 302 | 比如京东云AX1800 Pro亚瑟测试直接刷最大扇区数大于eMMC扇区数的分区表会砖,需要USB救砖。 303 | 304 | 同时如果最后一个大的分区超过了eMMC的扇区数,fdisk、parted、gdisk这些工具并不能直接修复,仍然需要删除新建。 305 | 306 | 基于这两个原因,我改的分区表都采用天灵大佬的gpt分区表的做法,不保留最后一个最大的分区。 307 | 这样的分区表只包含前面的小分区,扇区总数也不会超过4G,所以适用所有大于4G的eMMC。 308 | 刷好我改分区表后,使用sgdisk用未分配空间新建一个分区,并还原分区的type code和UUID,这样分区和原厂分区是完全一样的。 309 | 310 | - ### 4.uboot刷固件、格式化storage分区和切换固件 311 | 我改的这个uboot不支持DHCP,电脑需要设置ip 192.168.1.2/24,连接网线到路由器lan口,路由上电按reset,等待灯变为蓝色,说明uboot webui已启动,可以松开按钮,浏览器打开192.168.1.1,上传固件刷写成功后绿灯会亮3秒,然后重启。注意:其他大佬的uboot可能指示灯不一样。 312 | 我改的这个uboot是2024.10.10编译的 U-Boot 2022.07-rc3 (Oct 10 2024 - 14:23:13 +0800) 313 | 进入uboot webui页面后,最下方会显示这个编译日期,可以作为判断是否刷的是我改的uboot的标识。 314 | uboot不仅可以刷固件,还可以更新bl2、uboot和gpt,打开相应网页即可,非必要不需要更新: 315 | http://192.168.1.1 刷写固件 316 | http://192.168.1.1/uboot.html 刷写uboot 317 | http://192.168.1.1/bl2.html 刷写bl2,注意刷写eMMC的bl2文件不大于1MB 318 | http://192.168.1.1/gpt.html 刷写eMMC机型的gpt分区表 319 | http://192.168.1.1/simg.html 刷写single image镜像(新增功能) 320 | http://192.168.1.1/initramfs.html 刷写内存启动固件initramfs 321 | 注意:刷写bl2、gpt、simg不会验证文件,请一定做好原机备份并确认上传文件的有效性,特别是simg!!! 322 | 关于single image: 323 | eMMC的是从gpt到最后一个分区的合并镜像,只合并到fip分区也可,不包含bl2,bl2需要单独刷写 324 | 注意:eMMC从gpt到第一个分区间有段空白也要合并在内,请用我教程备份的分区bin文件进行合并 325 | 326 | uboot刷好第三方OP系统后,SSH登录用命令格式化下最后一个storage分区。 327 | ``` 328 | mkfs.ext4 $(blkid -t PARTLABEL=storage -o device) 329 | ``` 330 | 如果要把storage分区挂载给docker,则在系统->挂载点菜单,添加挂载点,UUID选择最大那个分区,我的分区表最大分区对应的是mmcblk0p10,输入自定义挂载位置/opt,回车,然后保存,再在外层菜单点保存并应用,最后重启系统即可。 331 | 打开系统->挂载点,查看交换分区,如果是自动挂载的固件,可以看到/dev/mmcblk0p9挂载为swap的分区,可以取消勾选,然后保存并应用,因为固件一般已经使用zram了。 332 | 如果sawp和zram都用,首页概览交换分区那里显示的是1.5G,取消swap的挂载则显示0.5G。 333 | 最后检查系统->挂载点菜单,已挂载的文件系统中,挂载点/overlay对应的文件系统: 334 | 刷写master开源固件后,/overlay对应的文件系统为/dev/fitrw 335 | 刷写23.05开源固件后,/overlay对应的文件系统为/dev/mmcblk0p66 336 | 刷写闭源固件后,/overlay对应的文件系统为/dev/loop0 337 | 如果没有重新在备份与升级菜单升级下固件,直至有。 338 | 339 | 直接uboot刷闭源固件(.bin格式Legacy image)或者openwrt、immortalwrt主线master/23.05分支固件(.itb格式FIT image),可以直接启动。 340 | 【注意】openwrt、immortalwrt主线master/23.05分支固件(.itb格式FIT image)固件第一次启动有点慢,特别是集成docker的固件,第一次启动可能需要5分钟,耐心等待,后面再启动就快了。 341 | 342 | uboot刷机是不保留配置的,如果已经刷好两种固件不想重刷,可以在系统里修改环境变量,重启即可切换启动的固件,配置保留。 343 | 当前在openwrt、immortalwrt主线master/23.05分支固件(.itb格式FIT image),要切换到闭源固件(.bin格式Legacy image) 344 | 运行下面命令修改环境变量,没有报错即可,然后reboot重启 345 | ``` 346 | cp /etc/fw_env.config /etc/fw_env.config.bak 347 | echo -e "/dev/mmcblk0p1 0 0x80000" > /etc/fw_env.config 348 | fw_setenv dual_boot.current_slot 0 349 | cp /etc/fw_env.config.bak /etc/fw_env.config 350 | ``` 351 | 352 | 当前在闭源固件(.bin格式Legacy image),要切换到openwrt、immortalwrt主线master/23.05分支固件(.itb格式FIT image) 353 | 运行下面命令修改环境变量,没有报错即可,然后reboot重启 354 | ``` 355 | fw_setenv dual_boot.current_slot 1 356 | ``` 357 | 358 | - ### 5.刷回原厂 359 | 因为官方原厂固件是双分区固件(.bin格式Legacy image),兼容单分区,所以直接uboot刷原厂固件即可,什么都不用换,但是要跑分需要恢复跑分的分区。 360 | 刷回原厂后想要再刷第三方OP则直接uboot刷即可,什么都不用换,自由切换固件。 361 | 362 | 教程压缩包中有京东云AX6000百里官方固件JDC04-4.3.0.r4204。 363 | 下面开始恢复log、plugin、swap分区。 364 | 注意:log分区变为了mmcblk0p7,plugin变为mmcblk0p8,swap变为了mmcblk0p9,storage分区变为了mmcblk0p10。 365 | 去系统->挂载点菜单,拉到下方的挂载点,挂载/dev/mmcblk0p10到/mnt/mmcblk0p10,记得勾选启用并保存应用。 366 | 367 | WinSCP之类软件上传备份好的mmcblk0p10_log.bin、mmcblk0p11_plugin.bin和mmcblk0p12_swap.bin到/mnt/mmcblk0p10,使用下面命令刷回: 368 | ``` 369 | dd if=/mnt/mmcblk0p10/mmcblk0p10_log.bin of=$(blkid -t PARTLABEL=log -o device) conv=fsync 370 | dd if=/mnt/mmcblk0p10/mmcblk0p11_plugin.bin of=$(blkid -t PARTLABEL=plugin -o device) conv=fsync 371 | dd if=/mnt/mmcblk0p10/mmcblk0p12_swap.bin of=$(blkid -t PARTLABEL=swap -o device) conv=fsync 372 | ``` 373 | 刷好后可以删除上传的文件,当然swap分区按理说可以运行命令新建,不过我还是用备份直接恢复分区: 374 | ``` 375 | mkswap $(blkid -t PARTLABEL=swap -o device) 376 | swapon $(blkid -t PARTLABEL=swap -o device) 377 | ``` 378 | 379 | 恢复完分区后,web不保留配置升级或直接uboot刷回官方固件,系统启动后打开无线宝app,存储设置内置存储为本地网盘,然后直接恢复出厂,启动后再进入app设置内置存储为智能加速服务。 380 | 恢复智能跑分服务后,可能无线宝app中的服务状态一直在自动修复,灯是蓝色的不能马上变绿灯,需要等待,我试的情况是有可能需要1-2个小时才恢复绿灯。 381 | 如果刷回原厂超过2小时跑分服务一直在修复,可以尝试重新刷log、plugin、swap分区。 382 | 再重试设置内置存储为本地网盘,然后直接恢复出厂,系统启动后再设置内置存储为智能加速服务。 383 | 如何恢复分区回原厂快速开始跑分,我没有摸索出规律,所以得大家自己多尝试。 384 | 385 | - ### 6.串口TTL救砖 386 | 注意:mtk_uartboot文件夹下的bl2、fip只用于救砖,不要刷入正常机子。 387 | 路由器断电,使用USB转TTL(建议使用3.3V电平的,推荐使用FT232RL)连接路由器串口TTL接口。 388 | 运行串口TTL救砖文件夹下的“打开设备管理器命令.bat”,在打开的设备管理器中查看USB转TTL设备对应的COM口号。 389 | 关闭可能占用该COM口的程序,运行“MT798X串口TTL救砖命令.bat”,输入该COM口号,选择正常波特率,然后选择对应机型的fip序号。 390 | 脚本会调用mtk_uartboot加载fip-debrick-only的uboot到内存,该uboot是修改过mtkboardboot的专用uboot,会自动进入uboot webui,无需操作。 391 | 不支持DHCP,请设置固定IP后访问相应的Web failsafe UI地址,Web failsafe UI启动后可以通过按Ctrl+C回到Uboot控制台。 392 | 因为mtk_uartboot加载uboot是临时uboot,需要进入uboot webui对应页面重新刷写变砖的分区。 393 | 针对eMMC机型有以下几个页面: 394 | http://192.168.1.1 刷写固件,救砖一般不用 395 | http://192.168.1.1/uboot.html 刷写uboot 396 | http://192.168.1.1/bl2.html 刷写bl2,注意刷写eMMC的bl2文件不大于1MB 397 | http://192.168.1.1/gpt.html 刷写eMMC机型的gpt分区表 398 | http://192.168.1.1/simg.html 刷写single image镜像(新增功能) 399 | http://192.168.1.1/initramfs.html 刷写内存启动固件initramfs 400 | 注意:刷写bl2、gpt、simg不会验证文件,请一定做好原机备份并确认上传文件的有效性,特别是simg!!! 401 | 关于single image: 402 | eMMC的是从gpt到最后一个分区的合并镜像,只合并到fip分区也可,不包含bl2,bl2需要单独刷写 403 | 注意:eMMC从gpt到第一个分区间有段空白也要合并在内,请用我教程备份的分区bin文件进行合并 404 | 405 | 如果存储无线校准数据eeprom的factory分区刷没了,救砖刷固件后无线可能起不来,需要有线进系统恢复该分区。 406 | ``` 407 | dd if=/tmp/mmcblk0p3_factory.bin of=$(blkid -t PARTLABEL=factory -o device) conv=fsync 408 | ``` 409 | -------------------------------------------------------------------------------- /Tutorial/MT798X_eMMC_Replacement.md: -------------------------------------------------------------------------------- 1 | 目前遇到的MT798X的eMMC的路由器京东云百里AX6000、GL.iNet MT6000、CMCC RAX3000M eMMC算力版、CMCC RAX3000Z增强版、储留箱S20P、BT-R320等,都是闪存只有eMMC的。 2 | 3 | 目前已经有大佬的mtk_uartboot串口TTL救砖,可以说MT798X天下无砖了。MT798X更换闪存只需要直接焊接上去,然后uartboot从内存启动hanwckf大佬仓库的uboot,打开uboot的webui刷gpt,重启再uartboot启动刷bl2,再uartboot启动刷fip,最后直接进uboot刷固件即可,不需要编程器了,系统启动后有线连接路由器再恢复factory其他分区。当然命令熟悉的可以直接uboot控制台用命令刷。一般全新eMMC没有问题,如果使用拆机的eMMC,建议先查看ext_csd信息是否和下面编程器方法中的ext_csd信息是否相同。因为H/W reset只能设置一次,拆机eMMC可能已设置过了,未测试这个H/W reset和原厂不同是否影响启动。 4 | [MediaTek Filogic 系列路由器串口救砖教程](https://www.cnblogs.com/p123/p/18046679) 5 | 6 | 下面是编程器写入eMMC的方法,以CMCC RAX3000M eMMC算力版更换eMMC为例(其他路由器方法相同): 7 | bl2默认在mmcblk0boot0这个硬件分区,uboot在mmcblk0的软件分区中的fip分区。 8 | 当我们想要换eMMC的时候,需要有ext_csd信息、mmcblk0boot0分区、mmcblk0_GPT到mmcblk0p11_fwk2分区备份。 9 | 这个是完全恢复原厂系统,如果恢复op系统更简单,直接用刷机的gpt分区表和fip替换原厂的gpt分区表和fip分区文件,后面部分只需要合并mmcblk0_GPT到mmcblk0p3_fip即可。 10 | 更换好eMMC直接进uboot webui刷op固件即可。 11 | 如果你有eMMC编程器,直接用编程器把mmcblk0boot0、ext_csd、mmcblk0_GPT到mmcblk0p11_fwk2还原回去即可。 12 | 13 | 我只有RTS5170芯片的读卡器,支持boot0、1和ext_csd读写,所以我单独还原这些文件。 14 | 15 | 更换相同大小64G eMMC。如果更换不同大小eMMC需要DG修复下分区表或者使用atf源码中的gpt_editor自己修改相应大小的分区表,替换原厂的。 16 | 17 | 下面这个备份文件就是bl2,RAX3000M的BL2没有锁,所以直接用原厂的即可: 18 | 注:百里的bl2和fip都是有secure boot锁的,要配套使用,或者直接全部替换no secure boot的。 19 | ``` 20 | boot0_bl2.bin 21 | ``` 22 | 将下面已备份的分区按顺序合并为一个bin文件,就是一个eMMC的镜像(当然没有最大的分区data分区)以便写入。 23 | 注:unpartitioned.bin是4079KB大小的全0文件,和17KB的GPT组成的偏移量4096KB,正好是u-boot-env分区的偏移量。 24 | ``` 25 | mmcblk0_GPT.bin 26 | mmcblk0_unpartitioned.bin 27 | mmcblk0p1_u-boot-env.bin 28 | mmcblk0p2_factory.bin 29 | mmcblk0p3_fip.bin 30 | mmcblk0p4_kernel.bin 31 | mmcblk0p5_rootfs.bin 32 | mmcblk0p6_kernel2.bin 33 | mmcblk0p7_rootfs2.bin 34 | mmcblk0p8_rootfs_data.bin 35 | mmcblk0p9_plugins.bin 36 | mmcblk0p10_fwk.bin 37 | mmcblk0p11_fwk2.bin 38 | ``` 39 | 40 | 将新的eMMC通过转接板接入RTS5170读卡器,插上Ubuntu中,运行命令首先查看eMMC是否识别到了: 41 | ``` 42 | fdisk -x /dev/mmcblk0 43 | ``` 44 | 识别到后开启超级用户执行权限并安装mmc-utils: 45 | ``` 46 | sudo -i 47 | apt install mmc-utils 48 | ``` 49 | 输入命令写入bl2和并设置ext_csd信息从boot0启动: 50 | 注:boot0_bl2.bin文件路径修改为文件所在路径。 51 | ``` 52 | echo 0 > /sys/block/mmcblk0boot0/force_ro 53 | dd if=boot0_bl2.bin of=/dev/mmcblk0boot0 54 | echo 1 > /sys/block/mmcblk0boot0/force_ro 55 | mmc bootbus set single_backward x1 x1 /dev/mmcblk0 56 | mmc bootpart enable 1 1 /dev/mmcblk0 57 | mmc hwreset enable /dev/mmcblk0 58 | ``` 59 | 注:上面写入boot0和mmc设置命令也可以用于op系统中。 60 | 61 | 写完之后用命令查看设置的ext_csd是否和原厂相同: 62 | ``` 63 | mmc extcsd read /dev/mmcblk0 | grep -e BOOT_BUS_CONDITIONS -e PARTITION_CONFIG -e RST_N_FUNCTION 64 | ``` 65 | 66 | RAX3000M原厂信息如下(京东云百里相同): 67 | ``` 68 | Boot configuration bytes [PARTITION_CONFIG: 0x48] 69 | Boot bus Conditions [BOOT_BUS_CONDITIONS: 0x00] 70 | H/W reset function [RST_N_FUNCTION]: 0x01 71 | ``` 72 | 接着合并的eMMC镜像mmcblk0p0-11.bin写入/dev/mmcblk0: 73 | 注:mmcblk0p0-11.bin文件路径修改为文件所在路径。 74 | ``` 75 | dd if=mmcblk0p0-11.bin of=/dev/mmcblk0 bs=1M status=progress oflag=direct 76 | ``` 77 | 最后查看分区表是否正确,是否显示12个分区,正确即可焊接回PCB板: 78 | 注:如果是恢复op注意分区表是单分区的,会不同,检查无误就行。 79 | ``` 80 | fdisk -x /dev/mmcblk0 81 | ``` 82 | 查看大致的eMMC寿命情况,寿命定义自行搜索: 83 | ``` 84 | mmc extcsd read /dev/mmcblk0 | grep -e "Life Time" -e "EOL" 85 | ``` 86 | -------------------------------------------------------------------------------- /Tutorial/RAX3000M-eMMC_XR30-eMMC.md: -------------------------------------------------------------------------------- 1 | 最新教程下载链接: 2 | https://github.com/lgs2007m/Actions-OpenWrt/releases/tag/Router-Flashing-Files 3 | 4 | 目录 5 | 0.开SSH 6 | 1.备份原厂分区 7 | 2.刷uboot 8 | 3.刷gpt分区表 9 | 4.uboot刷固件、格式化data分区和切换固件 10 | 5.刷回原厂 11 | 6.串口TTL救砖 12 | 13 | mt798x的fip分区实际上包含bl31+uboot,为了方便理解,这里的教程将fip直接称为uboot。 14 | 15 | 本教程使用基于hanwckf大佬bl-mt798x仓库uboot-202206源码修改编译的bl2、uboot和gpt,不支持DHCP。 16 | 目前已同时支持21.02闭源固件(.bin格式Legacy image)和openwrt、immortalwrt主线master/23.05分支固件(.itb格式FIT image)直接刷入启动,可在SSH修改环境变量,直接切换启动两种固件,无需重刷,配置保留。 17 | 18 | uboot及gpt源码请查看 https://github.com/lgs2007m/bl-mt798x/tree/emmc 19 | 感谢天灵等一众大佬提供的FIT image支持,感谢hanwckf大佬的bl-mt798x项目。 20 | 21 | - ### 版本识别 22 | CMCC RAX3000M配置是MT7981B+DDR4 512M+MT7976CN+MT7531,有两个版本,区别只在闪存,普通版:128M SPI-NAND闪存,算力版:64G eMMC闪存。 23 | NAND普通版:盒子背部和机子背部标签是“CH”字样,生产日期20230515、20230606、20231027、20231124基本就是,或者透过散热孔看PCB右上角印丝结尾是P3。 24 | eMMC算力版:盒子背部和机子背部标签是“CH EC”字样,生产日期20230626、20230703、20231226基本都是,或者透过散热孔看PCB右上角印丝结尾是P1。 25 | 26 | 新出的CMCC XR30和RAX3000M配置相同,也分区两个版本,eMMC版包装盒正面印的信息是RAX3000Z增强版,机子正面有全屋组网的标志,背面和顶上有贴纸,底部标签有算力版标识。NAND普通版盒子正面印的是CMCC XR30,机子正面没有全屋组网的标志,背面,顶上都没有贴纸,底部的标签也大一圈,标签上没有算力版的标识。虽然它俩具体型号相同,但是增强版才是eMMC的,CMCC XR30目前看是NAND的。 27 | RAX3000M算力版有三个LED灯,RAX3000Z增强版只有两个。它们的刷机文件互刷也没有问题,只不过LED可能不对。 28 | 29 | 如果不确定NAND还是eMMC版本,建议解锁SSH后用命令查看分区,看哪个命令输出分区就是哪个版本: 30 | ``` 31 | # NAND 32 | cat /proc/mtd 33 | ``` 34 | ``` 35 | # EMMC 36 | fdisk -l /dev/mmcblk0 37 | ``` 38 | 39 | - ### 准备刷机文件和工具软件 40 | 最新刷机文件下载:https://github.com/lgs2007m/Actions-OpenWrt/releases/tag/Router-Flashing-Files 41 | SSH工具软件:Xshell https://pan.lanzoui.com/b0f19ry9g 或者putty https://www.423down.com/11333.html 42 | 文件传输工具软件:WinSCP https://www.ghxi.com/winscp.html 43 | 44 | 关于mt798x改内存:目前开源ATF 7981 DDR3最高512M,DDR4最高1G;7986 DDR3最高512M,DDR4 2G。 45 | 46 | - ### 0.开SSH 47 | 导出配置文件,因为文件没有加密,所以直接修改里面的dropbear和rc.local增加打开SSH的命令,修改shadow文件清除root密码即可。 48 | RAX3000M和XR30的配置文件通用,可以直接用刷机文件压缩包里面的配置文件,导入恢复配置,等待机子重启应用,即可开启SSH。 49 | Xshell或者putty之类的软件登录SSH,地址192.168.10.1,端口22,用户名root,密码无。 50 | 51 | 解锁SSH的配置文件有两个,其中RAX3000M_XR30_cfg-ssh.conf是不加密的,RAX3000M_XR30_cfg-ssh-salted-20231027.conf是加密的,主要用于生产日期20231027及之后的RAX3000M NAND普通版。 52 | RAX3000M算力版旧版使用的是不加密的配置文件RAX3000M_XR30_cfg-ssh.conf,不过新版20231124开始的算力版也加密了,如果不行就使用加密的配置文件RAX3000M_XR30_cfg-ssh-salted-20231027.conf。 53 | 目前XR30使用不加密的配置文件RAX3000M_XR30_cfg-ssh.conf。 54 | 55 | 查看配置文件是否加密,使用[WinHex](https://www.ghxi.com/winhex.html)之类的二进制软件,查看文件开头有Salted__字符串,就是openssl的加盐加密。 56 | 或者直接当压缩文件用7z打开,能打开的是不加密的,打不开的一般是加密的,需要到固件代码中找加密命令和密码。 57 | 58 | 【原厂新版固件配置文件加解密】 59 | 20240115/20240117等批次、最新批次的部分机子是新固件,已经更换了配置文件加密密码,经过[lyq1996](https://github.com/lyq1996)大佬逆向,发现新密码是根据SN生成的,所以每台机子不一样。感谢 @lyq1996 大佬! 60 | 61 | 新版原厂固件已经删除了dropbear,所以我做了一个开启telnet的配置备份文件RAX3000M_XR30_cfg-telnet-20240117.conf,这个配置文件是没有加密的,需要使用命令根据机子的SN加密得到最终的配置文件,再上传导入配置,等待重启后即可解锁telnet。 62 | 63 | 使用openwrt、ubuntu、WSL等linux系统,对我做的配置文件RAX3000M_XR30_cfg-telnet-20240117.conf进行加密,得到解锁telnet的配置文件cfg_import_config_file_new.conf。Windows系统也可以安装Cygwin来运行。 64 | 将我做的配置文件放到linux系统中,在文件所在目录打开终端(或者打开终端,使用cd命令打开文件所在路径),然后修改SN为你机子的,再运行命令: 65 | ``` 66 | SN=081116000043333 67 | mypassword=$(openssl passwd -1 -salt aV6dW8bD "$SN") 68 | mypassword=$(eval "echo $mypassword") 69 | echo $mypassword 70 | openssl aes-256-cbc -pbkdf2 -k "$mypassword" -in RAX3000M_XR30_cfg-telnet-20240117.conf -out cfg_import_config_file_new.conf 71 | ``` 72 | 命令没有报错即可,就得到新版加密配置文件了。 73 | 74 | 如果想自己修改配置文件,可以用下面命令解密配置文件(需先生成密码): 75 | ``` 76 | openssl aes-256-cbc -d -pbkdf2 -k "$mypassword" -in cfg_export_config_file.conf -out cfg_import_config_file_decrypt.conf 77 | ``` 78 | 79 | Windows系统也可以安装Cygwin来运行上面的命令: 80 | 64位在线安装程序:https://www.cygwin.com/setup-x86_64.exe 81 | 32位在线安装程序:https://www.cygwin.com/setup-x86.exe 82 | 直接运行一路下一步,安装好之后运行Cygwin,输入df命令查看挂载路径。比如E盘对应的是/cygdrive/e,输入命令`cd /cygdrive/e`打开E盘路径。 83 | 将我做的配置文件放到E盘根目录,然后修改SN再用上面的命令加密配置文件。 84 | 85 | 如果所有方法都不行,那终极大招是通过TTL使用mtk_uartboot直接加载uboot到内存,直接刷uboot。 86 | 87 | RAX3000M eMMC算力版和RAX3000Z增强版的分区是一样的,所以gpt分区表和备份分区通用。 88 | 下面简单看下原厂分区的信息,不想了解的可以略过。 89 | 可以看到原厂有两个系统分区kernel、rootfs和kernel2、rootfs2,即双分区,共用一个256MB的rootfs_data。kernel、kernel2都是32MB,rootfs、rootfs2都只有64MB。 90 | 固件中kernel一般占3MB左右,分区表kernel分区32MB完全够用,但是rootfs大小限制了原厂双分区分区表刷固件的大小。 91 | 因此原厂双分区分区表下刷固件不能大于kernel+rootfs大小即67MB。 92 | 输入df -h可以看到overlay直接挂载到了/dev/mmcblk0p8即rootfs_data分区,而不是挂载overlay到/dev/loop0。 93 | df -h可以看到/dev/mmcblk0p10、11都挂载到了/mnt/mmcblk0p11,原厂就是这样,不影响所以不用管。 94 | ``` 95 | root@RAX3000M:~# fdisk -l /dev/mmcblk0 96 | Found valid GPT with protective MBR; using GPT 97 | 98 | Disk /dev/mmcblk0: 120832000 sectors, 1656M 99 | Logical sector size: 512 100 | Disk identifier (GUID): 2bd17853-102b-4500-aa1a-8a21d4d7984d 101 | Partition table holds up to 128 entries 102 | First usable sector is 34, last usable sector is 120800000 103 | 104 | Number Start (sector) End (sector) Size Name 105 | 1 8192 9215 512K u-boot-env 106 | 2 9216 13311 2048K factory 107 | 3 13312 17407 2048K fip 108 | 4 17408 82943 32.0M kernel 109 | 5 82944 214015 64.0M rootfs 110 | 6 214016 279551 32.0M kernel2 111 | 7 279552 410623 64.0M rootfs2 112 | 8 410624 934911 256M rootfs_data 113 | 9 934912 1065983 64.0M plugins 114 | 10 1065984 1098751 16.0M fwk 115 | 11 1098752 1131519 16.0M fwk2 116 | 12 1131520 120800000 57.0G data 117 | root@RAX3000M:~# df -h 118 | Filesystem Size Used Available Use% Mounted on 119 | /dev/root 14.0M 14.0M 0 100% /rom 120 | tmpfs 240.6M 17.5M 223.2M 7% /tmp 121 | /dev/mmcblk0p8 254.0M 85.5M 168.5M 34% /overlay 122 | overlayfs:/overlay 254.0M 85.5M 168.5M 34% / 123 | tmpfs 512.0K 0 512.0K 0% /dev 124 | /dev/mmcblk0p10 7.6M 7.6M 0 100% /mnt/mmcblk0p11 125 | /dev/mmcblk0p11 7.6M 7.6M 0 100% /mnt/mmcblk0p11 126 | /dev/mmcblk0p12 55.9G 52.0M 53.0G 0% /mnt/mmcblk0p12 127 | /dev/mmcblk0p9 58.0M 1.3M 52.2M 2% /mnt/mmcblk0p9 128 | /dev/mmcblk0p12 55.9G 52.0M 53.0G 0% /extend 129 | /dev/mmcblk0p9 58.0M 1.3M 52.2M 2% /plugin 130 | /dev/loop0 7.6M 7.6M 0 100% /plugin/cmcc/framework 131 | root@RAX3000M:~# blkid 132 | /dev/loop0: TYPE="squashfs" 133 | /dev/mmcblk0p1: PARTLABEL="u-boot-env" PARTUUID="19a4763a-6b19-4a4b-a0c4-8cc34f4c2ab9" 134 | /dev/mmcblk0p2: PARTLABEL="factory" PARTUUID="8142c1b2-1697-41d9-b1bf-a88d76c7213f" 135 | /dev/mmcblk0p3: PARTLABEL="fip" PARTUUID="18de6587-4f17-4e08-a6c9-d9d3d424f4c5" 136 | /dev/mmcblk0p4: PARTLABEL="kernel" PARTUUID="971f7556-ef1a-44cd-8b28-0cf8100b9c7e" 137 | /dev/mmcblk0p5: TYPE="squashfs" PARTLABEL="rootfs" PARTUUID="309a3e76-270b-41b2-b5d5-ed8154e7542b" 138 | /dev/mmcblk0p6: PARTLABEL="kernel2" PARTUUID="9c17fbc2-79aa-4600-80ce-989ef9c95909" 139 | /dev/mmcblk0p7: TYPE="squashfs" PARTLABEL="rootfs2" PARTUUID="f19609c8-f7d3-4ac6-b93e-7fd9fad4b4af" 140 | /dev/mmcblk0p8: LABEL="rootfs_data" UUID="4959b647-3da7-464b-9b69-6c46b2e762dc" BLOCK_SIZE="4096" TYPE="f2fs" PARTLABEL="rootfs_data" PARTUUID="a4a43b93-f17d-43e2-b7a7-df0bdf610c77" 141 | /dev/mmcblk0p9: LABEL="plugins" UUID="7ae9801f-4dcf-4c79-9c7f-eaefc65f767a" BLOCK_SIZE="1024" TYPE="ext4" PARTLABEL="plugins" PARTUUID="518c1031-c234-4d49-8301-02e7ebe31231" 142 | /dev/mmcblk0p10: TYPE="squashfs" PARTLABEL="fwk" PARTUUID="6e2bd585-7b0b-45b5-a8a1-4cf5436b1f73" 143 | /dev/mmcblk0p11: TYPE="squashfs" PARTLABEL="fwk2" PARTUUID="fd8708ae-59c7-4ed5-a467-54bfe357cb48" 144 | /dev/mmcblk0p12: LABEL="extend" UUID="a2b01ad1-8504-4c5f-a93a-58a6046e46bc" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="data" PARTUUID="3c058515-54c3-452f-9b87-7a4f957b5cd1" 145 | ``` 146 | 147 | - ### 1.备份原厂分区 148 | 只需要备份gpt到mmcblk0p11 fwk2分区即可,最后一个mmcblk0p12 data分区太大不备份了。 149 | 因为rootfs_data分区比较大,所以先备份到/mnt/mmcblk0p12目录,再用WinSCP下载下来。 150 | 当然也可以压缩这个分区备份到tmp文件夹下,再用WinSCP下载下来。 151 | 152 | 如果原厂是新版固件,无法解锁SSH,使用解锁telnet的配置文件解锁telnet后,也可以使用下面命令备份分区,但是先不下载下来,后面刷闭源固件不要刷gpt分区表,先挂载最后那个分区下载下来。 153 | telnet登录路由器,协议选telnet,地址192.168.10.1,端口23,直接点连接,账号密码都是没有的。 154 | 155 | 提示:bl2在/dev/mmcblk0boot0,uboot在fip分区。 156 | unpartitioned.bin是全0的空白文件,是为了后面可以使用备份的分区按顺序直接合并得到一个eMMC img镜像。 157 | 除更换eMMC,这个img基本用不到,不过还是全部分区备份为好。 158 | **注意:放在一起的命令全部复制粘贴执行,sync也一起复制,最后的时候回车执行sync即可,下同,不再赘述。** 159 | **这行sync命令主要是为了方便多行命令一起复制粘贴执行,不会遗漏上面的命令。** 160 | 161 | 直接复制下面全部命令,粘贴执行即可: 162 | ``` 163 | dd if=/dev/mmcblk0boot0 bs=512 count=2048 of=/mnt/mmcblk0p12/boot0_bl2.bin conv=fsync 164 | dd if=/dev/mmcblk0 bs=512 count=34 of=/mnt/mmcblk0p12/mmcblk0_GPT.bin conv=fsync 165 | dd if=/dev/mmcblk0 bs=512 skip=34 count=8158 of=/mnt/mmcblk0p12/mmcblk0_unpartitioned.bin conv=fsync 166 | dd if=/dev/mmcblk0p1 of=/mnt/mmcblk0p12/mmcblk0p1_u-boot-env.bin conv=fsync 167 | dd if=/dev/mmcblk0p2 of=/mnt/mmcblk0p12/mmcblk0p2_factory.bin conv=fsync 168 | dd if=/dev/mmcblk0p3 of=/mnt/mmcblk0p12/mmcblk0p3_fip.bin conv=fsync 169 | dd if=/dev/mmcblk0p4 of=/mnt/mmcblk0p12/mmcblk0p4_kernel.bin conv=fsync 170 | dd if=/dev/mmcblk0p5 of=/mnt/mmcblk0p12/mmcblk0p5_rootfs.bin conv=fsync 171 | dd if=/dev/mmcblk0p6 of=/mnt/mmcblk0p12/mmcblk0p6_kernel2.bin conv=fsync 172 | dd if=/dev/mmcblk0p7 of=/mnt/mmcblk0p12/mmcblk0p7_rootfs2.bin conv=fsync 173 | dd if=/dev/mmcblk0p8 of=/mnt/mmcblk0p12/mmcblk0p8_rootfs_data.bin conv=fsync 174 | dd if=/dev/mmcblk0p9 of=/mnt/mmcblk0p12/mmcblk0p9_plugins.bin conv=fsync 175 | dd if=/dev/mmcblk0p10 of=/mnt/mmcblk0p12/mmcblk0p10_fwk.bin conv=fsync 176 | dd if=/dev/mmcblk0p11 of=/mnt/mmcblk0p12/mmcblk0p11_fwk2.bin conv=fsync 177 | sync 178 | ``` 179 | 耐心等待执行完成,最后一行sync回车执行即可,注意看最后一个fwk2分区是否备份完成。 180 | 然后使用WinSCP之类的软件登录路由器,到/mnt/mmcblk0p12下载下来保存到电脑。 181 | WinScp软件登录路由器,协议SCP,IP 192.168.10.1,端口22,点击高级,高级站点设置-连接 去掉勾选“优化连接缓冲大小”,再点击登录。 182 | 183 | - ### 2.刷uboot: 184 | 因为没有像京东云百里那样锁bl2,所以这里只刷uboot就行了。 185 | RAX3000M算力版的uboot是mt7981_cmcc_rax3000m-emmc-fip_legacy-and-fit_20241007.bin 186 | RAX3000Z增强版的uboot是mt7981_cmcc_xr30-emmc-fip_legacy-and-fit_20241007.bin 187 | 188 | 如果原厂是新版固件,无法解锁SSH,使用解锁telnet的配置文件解锁telnet后,设置电脑网卡为固定IP 192.168.10.2/24(注意只使用一个网卡,无线也不要连接),然后打开hfs(HTTP File Server)软件,将对应uboot文件拖拽到软件,然后使用下面对应的命令下载到/tmp目录: 189 | ``` 190 | wget -P /tmp http://192.168.10.2/mt7981_cmcc_rax3000m-emmc-fip_legacy-and-fit_20241026.bin 191 | wget -P /tmp http://192.168.10.2/mt7981_cmcc_xr30-emmc-fip_legacy-and-fit_20241026.bin 192 | ``` 193 | 如果是解锁了SSH则直接WinSCp之类的软件上传对应机型的单分区uboot文件到tmp文件夹。 194 | SSH输入命令验证md5: 195 | ``` 196 | md5sum /tmp/mt7981_cmcc_*fip*.bin 197 | ``` 198 | 2024.10.26版的uboot,是编译输出的fip文件刷入fip分区后的分区备份,所以有2MB大小,md5sum是: 199 | ``` 200 | root@RAX3000M:~# md5sum /tmp/mt7981_cmcc_*fip*.bin 201 | 26ab5703bc760e5ec1e15815bc583dfd /tmp/mt7981_cmcc_rax3000m-emmc-fip_legacy-and-fit_20241026.bin 202 | 2946aae3df18ee8b3f207ce1aee4fbef /tmp/mt7981_cmcc_xr30-emmc-fip_legacy-and-fit_20241026.bin 203 | ``` 204 | 核对上传uboot的md5正常后,输入命令刷写uboot所在的fip分区。 205 | RAX3000M eMMC算力版用这个命令: 206 | ``` 207 | dd if=/tmp/mt7981_cmcc_rax3000m-emmc-fip_legacy-and-fit_20241026.bin of=$(blkid -t PARTLABEL=fip -o device) conv=fsync 208 | ``` 209 | RAX3000Z增强版用这个命令: 210 | ``` 211 | dd if=/tmp/mt7981_cmcc_xr30-emmc-fip_legacy-and-fit_20241026.bin of=$(blkid -t PARTLABEL=fip -o device) conv=fsync 212 | ``` 213 | 验证fip分区的md5和刷入文件一样即可,输入命令: 214 | ``` 215 | md5sum $(blkid -t PARTLABEL=fip -o device) 216 | ``` 217 | RAX3000M eMMC算力版: 218 | ``` 219 | root@RAX3000M:~# md5sum $(blkid -t PARTLABEL=fip -o device) 220 | 26ab5703bc760e5ec1e15815bc583dfd /dev/mmcblk0p3 221 | ``` 222 | RAX3000Z增强版: 223 | ``` 224 | root@XR30:~# md5sum $(blkid -t PARTLABEL=fip -o device) 225 | 2946aae3df18ee8b3f207ce1aee4fbef /dev/mmcblk0p3 226 | ``` 227 | 到这里uboot已经刷好了,可以断电重启,进uboot刷我提供的ImmortalWrt固件,然后接着刷gpt分区表。 228 | 229 | 注:如果是从ImmortalWrt天灵单分区分区表或OpenWrt、ImmortalWrt主线分区表刷uboot,这里验证fip分区的md5是不一样的。 230 | 因为他们的分区表把原厂2M的fip分区扩大到了4M,我这个分区表还是保持fip为2M。 231 | 可以临时用下面命令验证fip分区数据的md5,和上面一样即可: 232 | ``` 233 | dd if=$(blkid -t PARTLABEL=fip -o device) bs=512 count=4096 | md5sum 234 | ``` 235 | 后面再刷我的gpt分区表,fip分区会变为2M,重启新的分区表生效后,再验证分区的md5就会和我的一样了。 236 | 237 | 天灵和大雕的刷机命令是直接使用偏移量,因为fip分区偏移量不变,所以不用管设备号。 238 | 我上面刷uboot的命令自动找fip分区所在设备号,也不用你管设备号,可以直接用。 239 | 更新uboot建议使用我教程的命令,或者直接进Uboot Web failsafe UI(简称uboot webui)里面更新即可。bl2一般不需要再更新了。 240 | 241 | - ### 3.刷gpt分区表 242 | 原厂系统中fdisk写入修复分区表会报错,我建议在刷好uboot后直接断电按reset进uboot,刷一个小于60MB的op后再刷分区表。 243 | 建议用刷机教程中我提供的ImmortalWrt闭源固件,地址192.168.1.1,已集成sgdisk,后面新建分区需要用到。如果用其他固件请自行安装sgdisk。 244 | 电脑网卡设置固定IP 192.168.1.2/24,连接网线到路由器lan口,路由上电按reset按键,等待灯变为蓝色,说明uboot webui已启动,可以松开按钮。 245 | 浏览器打开192.168.1.1,上传固件刷写成功后绿灯会亮3秒,然后重启。注意:其他大佬的uboot可能指示灯不一样。 246 | 此时电脑ip和dns可以设置回自动获取,然后等待系统启动后再操作刷gpt分区表。 247 | 248 | 如果原厂是新版固件,无法解锁SSH,使用解锁telnet的配置文件解锁telnet,这里先不要刷gpt分区表,查看挂载点,挂载最后那个大分区,然后使用WinSCP之类的软件,将备份的分区下载下来,再进行刷gpt分区表。 249 | 250 | RAX3000M eMMC算力版和RAX3000Z增强版的gpt分区表通用。 251 | 我的gpt分区表没有最后一个data大分区,需要在刷完分区表后使用sgdisk命令新建data分区。 252 | gpt分区表文件名中rootfs512M_production512M代表rootfs和production分区分别都是512M,依次类推。 253 | kernel+rootfs分区用于21.02闭源固件(.bin格式Legacy image),production分区用于openwrt、immortalwrt主线master/23.05分支固件(.itb格式FIT image)。 254 | 这个rootfs/production大小就是固件+overlay的大小,overlay近似是刷固件后剩余空间(软件包空间)大小,建议使用rootfs512M/production512M的分区表,当然也可选择自己需要大小的分区表。 255 | 因为刷分区表改变了后面的分区的偏移量,所以后面分区的数据就不能识别了。 256 | 257 | 上传你需要rootfs/production大小的gpt分区表文件到路由器/tmp目录,先验证md5: 258 | ``` 259 | md5sum /tmp/rax3000m-emmc_xr30-emmc_*gpt.bin 260 | ``` 261 | ``` 262 | root@ImmortalWrt:~# md5sum /tmp/rax3000m-emmc_xr30-emmc_*gpt.bin 263 | e447f6f88bb8262055a9bd6547ce54df /tmp/rax3000m-emmc_xr30-emmc_rootfs1024M_production1024M-gpt.bin 264 | fa05fab1fe5fdd08324a9552fd68f312 /tmp/rax3000m-emmc_xr30-emmc_rootfs256M_production256M-gpt.bin 265 | ccfd75bea7d8d2f4d5d75fc2d139cd8a /tmp/rax3000m-emmc_xr30-emmc_rootfs512M_production512M-gpt.bin 266 | ``` 267 | 你上传的文件的md5信息和上面对应文件的md5对比,没问题即可。 268 | 下面的命令以rootfs/production512M的分区表为例,如果换其他的分区表,只修改if参数中的gpt分区表文件名即可,其他不要改。 269 | 第1条dd命令是写入gpt分区表文件到/dev/mmcblk0的前34个扇区 270 | 第2条sgdisk命令是用未分配空间新建data分区,-1G代表末尾的1G空间留白,可自行调整 271 | 第3条sync命令主要是为了方便多行命令一起复制粘贴执行,不会遗漏上面的命令 272 | 接着一起复制下面3条命令,一起粘贴执行: 273 | ``` 274 | dd if=/tmp/rax3000m-emmc_xr30-emmc_rootfs512M_production512M-gpt.bin of=/dev/mmcblk0 bs=512 count=34 conv=fsync 275 | sgdisk -e -n 0:0:-1G -c 0:data -t 0:0FC63DAF-8483-4772-8E79-3D69D8477DE4 -u 0:3C058515-54C3-452F-9B87-7A4F957B5CD1 -p /dev/mmcblk0 276 | sync 277 | ``` 278 | 你会看到如下输出: 279 | ``` 280 | root@ImmortalWrt:~# dd if=/tmp/rax3000m-emmc_xr30-emmc_rootfs512M_production512M-gpt.bin of=/dev/mmcblk0 bs=512 count=34 conv=fsync 281 | 34+0 records in 282 | 34+0 records out 283 | root@ImmortalWrt:~# sgdisk -e -n 0:0:-1G -c 0:data -t 0:0FC63DAF-8483-4772-8E79-3D69D8477DE4 -u 0:3C058515-54C3-452F-9B87-7A4F957B5CD1 -p /dev/mmcblk0 284 | Setting name! 285 | partNum is 6 286 | Disk /dev/mmcblk0: 120832000 sectors, 57.6 GiB 287 | Sector size (logical/physical): 512/512 bytes 288 | Disk identifier (GUID): 2BD17853-102B-4500-AA1A-8A21D4D7984D 289 | Partition table holds up to 128 entries 290 | Main partition table begins at sector 2 and ends at sector 33 291 | First usable sector is 34, last usable sector is 120831966 292 | Partitions will be aligned on 1024-sector boundaries 293 | Total free space is 2105310 sectors (1.0 GiB) 294 | 295 | Number Start (sector) End (sector) Size Code Name 296 | 1 8192 9215 512.0 KiB 8300 u-boot-env 297 | 2 9216 13311 2.0 MiB 8300 factory 298 | 3 13312 17407 2.0 MiB 8300 fip 299 | 4 17408 82943 32.0 MiB 8300 kernel 300 | 5 82944 1131519 512.0 MiB 8300 rootfs 301 | 6 1131520 2180095 512.0 MiB FFFF production 302 | 7 2180096 120831966 56.6 GiB 8300 data 303 | Warning: The kernel is still using the old partition table. 304 | The new table will be used at the next reboot or after you 305 | run partprobe(8) or kpartx(8) 306 | The operation has completed successfully. 307 | root@ImmortalWrt:~# sync 308 | root@ImmortalWrt:~# 309 | ``` 310 | dd写入没有报错,sgdisk最后输出successfully即可。如果分区表明显不一样或有错误则及时排错,重新刷。 311 | 检查第5、6分区rootfs、production是分区表设置的大小,比如rootfs/production512M的分区表rootfs/production就是512MB。 312 | 检查第7分区data大小接近整个eMMC大小,比如64G eMMC,data分区有56GB左右。 313 | 314 | 建议此时备份下载修改后的分区表,以后有问题进不了系统,可以直接uboot刷这个分区表。 315 | 当然重刷分区表后再新建分区也行,一样的。 316 | ``` 317 | dd if=/dev/mmcblk0 bs=512 count=34 of=/tmp/mmcblk0_GPT_sgdisk.bin 318 | ``` 319 | 都没有问题可以断电,按reset上电进uboot刷固件了。 320 | 321 | ##【刷分区表的一点小提示】## 322 | 不建议用diskman磁盘管理修改分区,可能会导致系统不能启动。建议用fdisk、gdisk之类的工具修改分区。 323 | 如果不慎修改后系统不能启动,可以进入uboot,浏览器输入 http://192.168.1.1/gpt.html 重新刷正常的gpt分区表即可。 324 | 325 | 如果在uboot或系统中更换了其他分区表,但又不需要新建分区,这种情况建议在系统中使用fdisk或者sgdisk(一般需要先安装)单独保存下分区表,这样在diskman那里显示才正确: 326 | 例如系统中更换gpt分区表: 327 | ``` 328 | dd if=/tmp/gpt.bin of=/dev/mmcblk0 bs=512 count=34 conv=fsync 329 | ``` 330 | 则建议保存下分区表: 331 | ``` 332 | echo -e 'w' | fdisk /dev/mmcblk0 333 | ``` 334 | 或者 335 | ``` 336 | sgdisk -e /dev/mmcblk0 337 | ``` 338 | ##【关于分区表不包含最后那个大分区的原因】## 339 | gpt分区表的最大扇区数不能大于eMMC的物理最大扇区数,小于等于则没问题。比如128G的eMMC刷64G的分区表可以,刷256G的分区表会出错。 340 | mt798x eMMC机子的bl2在boot0硬件分区,不受userdata硬件分区的gpt分区表影响,即使gpt坏了也可以启动uboot,所以比较抗揍。 341 | 比如百里测试刷最大扇区数大于eMMC扇区数的分区表也能启动uboot,只是固件启动会报错,可以进uboot重新刷正常的分区表。 342 | 不过高通ipq60xx eMMC机子SBL是在userdata硬件分区中由gpt分区表划分出来的第一个软件分区,会受到gpt分区表的影响。 343 | 比如京东云AX1800 Pro亚瑟测试直接刷最大扇区数大于eMMC扇区数的分区表会砖,需要USB救砖。 344 | 345 | 同时如果最后一个大的分区超过了eMMC的扇区数,fdisk、parted、gdisk这些工具并不能直接修复,仍然需要删除新建。 346 | 347 | 基于这两个原因,我改的分区表都采用天灵大佬的gpt分区表的做法,不保留最后一个最大的分区。 348 | 这样的分区表只包含前面的小分区,扇区总数也不会超过4G,所以适用所有大于4G的eMMC。 349 | 刷好我改分区表后,使用sgdisk用未分配空间新建一个分区,并还原分区的type code和UUID,这样分区和原厂分区是完全一样的。 350 | 351 | - ### 4.uboot刷固件、格式化data分区和切换固件 352 | 我改的这个uboot不支持DHCP,电脑需要设置ip 192.168.1.2/24,连接网线到路由器lan口,路由上电按reset,等待灯变为蓝色,说明uboot webui已启动,可以松开按钮,浏览器打开192.168.1.1,上传固件刷写成功后绿灯会亮3秒,然后重启。注意:其他大佬的uboot可能指示灯不一样。 353 | 我改的这个uboot是2024.10.26编译的: 354 | RAX3000M算力版:U-Boot 2022.07-rc3 (Oct 26 2024 - 22:24:03 +0800) 355 | RAX3000Z增强版:U-Boot 2022.07-rc3 (Oct 26 2024 - 22:24:13 +0800) 356 | 357 | 进入uboot webui页面后,最下方会显示这个编译日期,可以作为判断是否刷的是我改的uboot的标识。 358 | uboot不仅可以刷固件,还可以更新bl2、uboot和gpt,打开相应网页即可,非必要不需要更新: 359 | http://192.168.1.1 刷写固件 360 | http://192.168.1.1/uboot.html 刷写uboot 361 | http://192.168.1.1/bl2.html 刷写bl2,注意刷写eMMC的bl2文件不大于1MB 362 | http://192.168.1.1/gpt.html 刷写eMMC机型的gpt分区表 363 | http://192.168.1.1/simg.html 刷写single image镜像(新增功能) 364 | http://192.168.1.1/initramfs.html 刷写内存启动固件initramfs 365 | 注意:刷写bl2、gpt、simg不会验证文件,请一定做好原机备份并确认上传文件的有效性,特别是simg!!! 366 | 关于single image: 367 | eMMC的是从gpt到最后一个分区的合并镜像,只合并到fip分区也可,不包含bl2,bl2需要单独刷写 368 | 注意:eMMC从gpt到第一个分区间有段空白也要合并在内,请用我教程备份的分区bin文件进行合并 369 | 370 | uboot刷好第三方OP系统后,SSH登录用命令格式化下最后一个data分区。 371 | ``` 372 | mkfs.ext4 $(blkid -t PARTLABEL=data -o device) 373 | ``` 374 | 需要把data分区挂载给docker,则在系统->挂载点菜单,添加挂载点,UUID选择最大那个分区,我的分区表最大分区对应的是mmcblk0p7,输入自定义挂载位置/opt,回车,然后保存,再在外层点保存并应用,最后重启系统即可。 375 | 最后检查系统->挂载点菜单,已挂载的文件系统中,挂载点/overlay对应的文件系统: 376 | 刷写master开源固件后,/overlay对应的文件系统为/dev/fitrw 377 | 刷写23.05开源固件后,/overlay对应的文件系统为/dev/mmcblk0p66 378 | 刷写闭源固件后,/overlay对应的文件系统为/dev/loop0 379 | 如果没有重新在备份与升级菜单升级下固件,直至有。 380 | 381 | 直接uboot刷闭源固件(.bin格式Legacy image)或者openwrt、immortalwrt主线master/23.05分支固件(.itb格式FIT image),可以直接启动。 382 | 【注意】openwrt、immortalwrt主线master/23.05分支固件(.itb格式FIT image)固件第一次启动有点慢,特别是集成docker的固件,第一次启动可能需要5分钟,耐心等待,后面再启动就快了。 383 | 【注意】由于主线RAX3000M-NAND和RAX3000M-eMMC使用all in fit,一个固件集合了NAND和eMMC固件,启动时需要选择对应的fdt才可正常启动eMMC的固件。我已通过uboot自动判断,如果从kernel分区启动闭源固件(.bin格式Legacy image)则删除这个环境变量,如果从production分区启动主线master/23.05分支固件(.itb格式FIT image),则设置bootconf config-1#mt7981b-cmcc-rax3000m-emmc,这个是自动的。 384 | 【注意】主线目前还没有XR30和RAX3000Z增强版(XR30-eMMC)支持,所以我设置bootconf直接使用config-1#mt7981b-cmcc-rax3000m-emmc,能支持主线RAX3000M-eMMC固件启动,但主线支持XR30-eMMC后是不能启动的,得修改uboot源码,改这个bootconf设置。XR30-eMMC比RAX3000M-eMMC少一个LED,XR30-eMMC的eMMC可以跑52MHz,RAX3000M-eMMC的eMMC跑26MHz。 385 | 386 | uboot刷机是不保留配置的,如果已经刷好两种固件不想重刷,可以在系统里修改环境变量,重启即可切换启动的固件,配置保留。 387 | 当前在openwrt、immortalwrt主线master/23.05分支固件(.itb格式FIT image),要切换到闭源固件(.bin格式Legacy image) 388 | 运行下面命令修改环境变量,没有报错即可,然后reboot重启 389 | ``` 390 | cp /etc/fw_env.config /etc/fw_env.config.bak 391 | echo -e "/dev/mmcblk0p1 0 0x80000" > /etc/fw_env.config 392 | fw_setenv dual_boot.current_slot 0 393 | cp /etc/fw_env.config.bak /etc/fw_env.config 394 | ``` 395 | 396 | 当前在闭源固件(.bin格式Legacy image),要切换到openwrt、immortalwrt主线master/23.05分支固件(.itb格式FIT image) 397 | 运行下面命令修改环境变量,没有报错即可,然后reboot重启 398 | ``` 399 | fw_setenv dual_boot.current_slot 1 400 | ``` 401 | 402 | - ### 5.刷回原厂 403 | 输入下面命令不报错即可: 404 | ``` 405 | fw_setenv dual_boot.current_slot 0 406 | ``` 407 | 回原厂需要先刷回备份分区表,恢复原厂的mmcblk0p9-11这三个分区,mmcblk0p12如果没有格式化需要格式化下。 408 | 刷回原厂备份的gpt分区表: 409 | ``` 410 | dd if=/tmp/mmcblk0_GPT.bin of=/dev/mmcblk0 bs=512 count=34 conv=fsync && echo -e 'w' | fdisk /dev/mmcblk0 411 | ``` 412 | 刷好原厂分区表后,断电进uboot刷下OP固件。 413 | 414 | OP系统起来后还原plugins、fwk和fwk2分区: 415 | 上传mmcblk0p9_plugins.bin、mmcblk0p10_fwk.bin和mmcblk0p11_fwk2.bin到/tmp目录,然后刷回去: 416 | ``` 417 | dd if=/tmp/mmcblk0p9_plugins.bin of=$(blkid -t PARTLABEL=plugins -o device) conv=fsync 418 | dd if=/tmp/mmcblk0p10_fwk.bin of=$(blkid -t PARTLABEL=fwk -o device) conv=fsync 419 | dd if=/tmp/mmcblk0p11_fwk2.bin of=$(blkid -t PARTLABEL=fwk2 -o device) conv=fsync 420 | ``` 421 | 接着格式化下data分区: 422 | ``` 423 | umount $(blkid -t PARTLABEL=data -o device) 424 | mkfs.ext4 -L extend $(blkid -t PARTLABEL=data -o device) 425 | ``` 426 | 格式化后web页面挂载点那里,手动挂载/dev/mmcblk0p12到/mnt/mmcblk0p12,记住勾选启用,保存并应用。 427 | 然后SSH输入命令在这个路径下新建一个ecmanager文件夹,这样就还原了所有分区了,SSH输入命令: 428 | ``` 429 | mkdir /mnt/mmcblk0p12/ecmanager 430 | ``` 431 | 432 | 刷回原厂uboot和固件: 433 | 接着上传原厂mmcblk0p3_fip.bin、mmcblk0p4_kernel.bin、mmcblk0p5_rootfs.bin到tmp,刷写uboot设置从系统0启动,刷写kernel、rootfs并清空rootfs_data,为了保险kernel2、rootfs2也一并写入原厂固件: 434 | ``` 435 | dd if=/tmp/mmcblk0p3_fip.bin of=$(blkid -t PARTLABEL=fip -o device) conv=fsync 436 | fw_setenv dual_boot.current_slot 0 437 | dd if=/tmp/mmcblk0p4_kernel.bin of=$(blkid -t PARTLABEL=kernel -o device) conv=fsync 438 | dd if=/tmp/mmcblk0p5_rootfs.bin of=$(blkid -t PARTLABEL=rootfs -o device) conv=fsync 439 | dd if=/tmp/mmcblk0p4_kernel.bin of=$(blkid -t PARTLABEL=kernel2 -o device) conv=fsync 440 | dd if=/tmp/mmcblk0p5_rootfs.bin of=$(blkid -t PARTLABEL=rootfs2 -o device) conv=fsync 441 | dd if=/dev/zero of=$(blkid -t PARTLABEL=rootfs_data -o device) conv=fsync 442 | ``` 443 | 注意:dd: error writing '/dev/mmcblk0p8': No space left on device 444 | 这个报错是正常的,不用管!! 445 | 446 | 等待mmcblk0p8 rootfs_data分区刷完,刷完断电重启即可。 447 | 448 | - ### 6.串口TTL救砖 449 | 注意:mtk_uartboot文件夹下的bl2、fip只用于救砖,不要刷入正常机子。 450 | 路由器断电,使用USB转TTL(建议使用3.3V电平的,推荐使用FT232RL)连接路由器串口TTL接口。 451 | 运行串口TTL救砖文件夹下的“打开设备管理器命令.bat”,在打开的设备管理器中查看USB转TTL设备对应的COM口号。 452 | 关闭可能占用该COM口的程序,运行“MT798X串口TTL救砖命令.bat”,输入该COM口号,选择正常波特率,然后选择对应机型的fip序号。 453 | 脚本会调用mtk_uartboot加载fip-debrick-only的uboot到内存,该uboot是修改过mtkboardboot的专用uboot,会自动进入uboot webui,无需操作。 454 | 不支持DHCP,请设置固定IP后访问相应的Web failsafe UI地址,Web failsafe UI启动后可以通过按Ctrl+C回到Uboot控制台。 455 | 因为mtk_uartboot加载uboot是临时uboot,需要进入uboot webui对应页面重新刷写变砖的分区。 456 | 针对eMMC机型有以下几个页面: 457 | http://192.168.1.1 刷写固件,救砖一般不用 458 | http://192.168.1.1/uboot.html 刷写uboot 459 | http://192.168.1.1/bl2.html 刷写bl2,注意刷写eMMC的bl2文件不大于1MB 460 | http://192.168.1.1/gpt.html 刷写eMMC机型的gpt分区表 461 | http://192.168.1.1/simg.html 刷写single image镜像(新增功能) 462 | http://192.168.1.1/initramfs.html 刷写内存启动固件initramfs 463 | 注意:刷写bl2、gpt、simg不会验证文件,请一定做好原机备份并确认上传文件的有效性,特别是simg!!! 464 | 关于single image: 465 | eMMC的是从gpt到最后一个分区的合并镜像,只合并到fip分区也可,不包含bl2,bl2需要单独刷写 466 | 注意:eMMC从gpt到第一个分区间有段空白也要合并在内,请用我教程备份的分区bin文件进行合并 467 | 468 | 如果存储无线校准数据eeprom的factory分区刷没了,救砖刷固件后无线可能起不来,需要有线进系统恢复该分区。 469 | ``` 470 | dd if=/tmp/mmcblk0p2_factory.bin of=$(blkid -t PARTLABEL=factory -o device) conv=fsync 471 | ``` 472 | 473 | - ### 关于52MHz频率固件 474 | mt7981的eMMC接口最高可以跑52MHz,因为RAX3000M算力版的eMMC体质比较菜,跑52MHz固件会爆I/O error导致系统崩溃,所以原厂固件设置eMMC频率是26MHz,大佬们的固件默认也是26MHz,比较稳定。RAX3000Z增强版原厂系统给的是52MHz,使用52MHz固件没有问题。 475 | 如果RAX3000M算力版想尝试eMMC 52MHz固件,大概率会I/O error,无解只能换eMMC,但是费用高不值得,还是建议26MHz固件即可。 476 | 52MHz eMMC读写速度约45MB/s,26MHz约为20MB/s,使用上是感觉不出差别的。 477 | 478 | SSH输入命令查看是否有I/O error报错: 479 | ``` 480 | dmesg | grep 'I/O error' 481 | ``` 482 | 查看固件eMMC频率用命令: 483 | ``` 484 | cat /sys/kernel/debug/mmc0/ios 485 | ``` 486 | --------------------------------------------------------------------------------