OpenWrt WXR-5950AX12 WXR-6000AX12

:warning:Japanese notation
![OpenWrt_icon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/00cb7976-bf5f-1c85-4544-6cbbc043b497.png)

# はじめに
::: note
### 初心者対応構成
- Windowsからの導入手順
- スクリプトでの自動設定
- [UCI (ttyd)](https://openwrt.org/docs/guide-user/base-system/uci)、[Webコンソール (LuCi)](https://openwrt.org/docs/guide-user/luci/start)、[ファイラー (SFTP)](https://openwrt.org/docs/guide-user/services/nas/sftp.server)にて比較作業がおススメ:exclamation:
:::

::: note
### デバイスアクセス
#### [PowerShell](https://learn.microsoft.com/ja-jp/powershell/scripting/what-is-windows-powershell?view=powershell-7.4)の開始
- キー入力：**`Win`+`x` > `a` > `はい`**

#### [UCI（SSH）アクセス](https://openwrt.org/docs/guide-quick-start/sshadministration)
```powershell:powershell:初期設定用
ssh -o StrictHostKeyChecking=no root@192.168.1.1
```
- root@192.168.1.1's password:`初期値：パスワード無し`

<details><summary>OpenSSHのインストールが無い場合:exclamation:</summary>

- 機能の確認
※Windows 10 Fall Creators Update(1709)以降標準搭載
```powershell:powershell
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
```
- 機能のインストール
```powershell:powershell
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
```
---

:::

::: note
### 掲示板
バージョン23.05.3対応済み
※未検証（保守のみ）

:::

::: note warn
### 既知の問題
[**要注意：各パーティションは基本的にread-onlyフラグが立っておらずデフォルトで書き換え可能の状態**](https://taiha.hatenablog.jp/entry/2023/02/25/buffalo-wxr-5950ax12/)
:::

# ファームウェアについて
:::note
### [OpenWrt Project へようこそ](https://openwrt.org/start)
![320.logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/b680feca-c6f1-4b68-4516-7001887217f7.png)

- [The UCI system](https://openwrt.org/docs/guide-user/base-system/uci)
![cui.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/9a680490-194e-1996-4e55-efec83b740c9.png)
- [LuCI web interface](https://openwrt.org/docs/guide-user/luci/start)
![luci.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/efc8d061-9d26-7b29-48f3-8d5d044a45bd.png)

- [技術データ](https://openwrt.org/toh/hwdata/buffalo/buffalo_wxr-5950ax12_1)
- [projects / openwrt / openwrt.git / commit](https://git.openwrt.org/?p=openwrt/openwrt.git;a=commit;h=f490295bf213c5e181d16cbe53c163c1c9983e45)
- [デバイス用のOpenWrtファームウェアをダウンロード](https://firmware-selector.openwrt.org)
:::

# デバイスについて
:::note
### [BUFFALO WXR-5950AX12](https://www.buffalo.jp/product/detail/wxr-5950ax12.html)
![wxr-5950ax12_320.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/954886b0-7b2f-5931-ad2e-7cca528778e6.png)
- ハードウェア仕様
ARMv8 Cortex-A53 (Quad Core)
  - CPU         : 2.2 GHz x4 + NPU@ 1.7 GHz
  - RAM         : 1024 MB
  - Flash Memory: 256 MB   # 2Gb SLC
  - WiFi        : 6 (ax)
  - Ethernet    : 10 Gbps x2 / 1 Gbps x3
  - USB         : USB 3.1 x1
  - Power       : DC 12 V / 4 A
- [Qualcomm IPQ8074A](https://www.qualcomm.com/products/internet-of-things/networking/wi-fi-networks/ipq8074)
- [Nanya NT5CC256M16ER-EK](https://www.nanya.com/en/Product/4248/NT5CC256M16ER-EK)
- [Winbond W29N02GZBIBA](https://www.winbond.com/hq/product/code-storage-flash-memory/slc-nand-flash/?__locale=ja&partNo=W29N02GZ)
- [Marvell AQR113C](https://www.marvell.com/content/dam/marvell/en/public-collateral/transceivers/marvell-phys-transceivers-aqrate-gen4-product-brief.pdf)
:::

# OpenWrt化手順：Flash instruction using initramfs image: 

::: note
### WXR-6000AX12x: 未検証

[Table of HardwareBuffaloBuffalo WXR-5950AX12 / WXR-6000AX12x](https://openwrt.org/toh/buffalo/wxr-5950ax12)
[WXR-6000AX12へOpenWrt(WXR-5950AX12版)をインストールしてみたお話し](https://wifi-manual.net/install-openwrt-on-wxr-6000ax12s/)

:::

::: note
### 事前準備
- スクリプト: [buffalo](https://github.com/site-u2023/buffalo/tree/main)
- ディレクトリ: `C:\openwrt`

`警告` > `強制的に貼り付け`
```powershell:powershell
Set-ExecutionPolicy Unrestricted
New-Item C:\openwrt -ItemType Directory -Force 
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/site-u2023/buffalo/main/wxr5950ax12.ps1" -OutFile "C:\openwrt\wxr5950ax12.ps1"
C:\openwrt\wxr5950ax12.ps1

```
:::
::: note alert
デバイスをインターネット回線から物理的切断（ONU・HGWからLAN線を外す）
:::

:::note
### 1. Prepare TFTP server with IP address 192.168.11.10

```powershell:powershell: 192.168.11.10
C:\openwrt\ip\192-168-11-10.ps1

```
:::

:::note
### 2. Rename OpenWrt initramfs image to "WXR-5950AX12-initramfs.uImage and place it to 

```powershell:powershell
& "C:\openwrt\Serva\Serva64.exe"

```
Servaが起動
- `I'm a "Community" user`を選択
  - 7 Secs待つ
    - `許可`

※IPアドレス拾わない場合、ストックファームウェアのデバイスを起動し安定させてから、Servaを起動させる
:::

:::note
### 3. Hold AOSS (WPS) button and power on WXR-5950AX12
- デバイスの電源を切断
- デバイス(WXR-5950AX12)のAOSSボタンを押しながら電源に接続
- 5秒後LEDが赤から白に変わったらAOSSボタンを放す
:::

:::note
### 4. WXR-5950AX12 downloads initramfs image from TFTP server and boots with it automatically
- 以下2行のログを確認
  - `TFTP Inf: Read file <WXR-5950AX12-initramfs.uImage>. Mode octet`
  - `TFTP Inf: <WXR-5950AX12-initramfs.uImage>: sent blks=8440 blkSz=1468, Total 12388600 bytes in 3s, err recovery=0 
`
- Servaを閉じる
- ルーターが自動で再起動
:::
::: note warn
<details><summary>※うまくいかない場合、以下からServaを起動させ再度実行</summary>

```powershell:powershell
& "C:\openwrt\Serva\Serva64.exe"

```

- `I am"Community" user`を選択
- `左上アイコン`をダブルクリック
- `TFTP`タブを選択
  - Service Up/Down
     - `TFTP Server`にチェック
  - THTP Server IP address 
    - `192.168.11.10`になっている事を確認
  - THTP Server root directory
    - `Browse`をクリック
      `C:\openwrt\buffalo\WXR-5950AX12-initramfs.uImage`を指定
      - `Select`をクリック
  - `OK`をクリック

</details>
:::

:::note
### 5. Upload sysupgrade image to WXR-5950AX12 and perform sysupgrade

```powershell:powershell: 192.168.1.2
C:\openwrt\ip\192-168-1-2.ps1

```

```powershell:powershell
scp -r C:\openwrt\buffalo\openwrt-ipq807x-generic-buffalo_wxr-5950ax12-squashfs-sysupgrade.bin root@192.168.1.1:/tmp/openwrt-ipq807x-generic-buffalo_wxr-5950ax12-squashfs-sysupgrade.bin

```

```powershell:powershell
ssh -o StrictHostKeyChecking=no root@192.168.1.1

```

```powershell:SSH
sysupgrade /tmp/openwrt-ipq807x-generic-buffalo_wxr-5950ax12-squashfs-sysupgrade.bin

```
- SSHが自動終了
- LEDが消灯し、ルーターが再起動

:::

:::note alert
 **絶対に電源は抜かない事**
:::
:::note
### 6. Wait ~120 seconds to complete flashing
- 120秒ほど待つ
- LEDは以下に動作
1. `全消灯`
2. `全点灯`
3. `全点滅`
4. `全点灯`
5. `中央白点滅`
6. `中央白点灯`：**OK**

- **OpenWrt化完了**
:::

::: note alert
デバイスをインターネット回線に物理的接続（ONU・HGWからLAN線に繋ぐ）
:::

::: note
### クライアントPCをDHCPにする
`警告` > `強制的に貼り付け`
```powershell:powershell: DHCP
C:\openwrt\ip\dhcp.ps1
Set-ExecutionPolicy Restricted

```
:::

:::note warn
<details><summary>MAC addresses:</summary>

LAN    : 50:C4:DD:xx:xx:28 (0:APPSBLENV, ethaddr (text))
WAN    : 50:C4:DD:xx:xx:28 (0:APPSBLENV, ethaddr (text))
2.4 GHz: 50:C4:DD:xx:xx:30 (0:APPSBLENV, wlan0addr (text))
5 GHz  : 50:C4:DD:xx:xx:38 (0:APPSBLENV, wlan1addr (text))

</details>

:::

# [新規設定用 オールインワンスクリプト 初心者対応](https://qiita.com/site_u/items/c6a50aa6dea965b5a774)
::: note
### [スクリプトセレクター](https://qiita.com/site_u/items/c6a50aa6dea965b5a774#%E6%96%B0%E8%A6%8F%E8%A8%AD%E5%AE%9A%E7%94%A8-%E3%82%AA%E3%83%BC%E3%83%AB%E3%82%A4%E3%83%B3%E3%83%AF%E3%83%B3%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88-%E5%88%9D%E5%BF%83%E8%80%85%E5%AF%BE%E5%BF%9C)

![config.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/ebcf1227-8809-3fad-ba47-5e44a04ccac6.png)

:::

## デバイス更新
:::note alert
### [アップグレード](https://openwrt.org/docs/guide-user/installation/generic.sysupgrade#package_upgrade_warning)
[ダウンロードサイト](https://firmware-selector.openwrt.org/?version=23.05.2&target=ipq807x%2Fgeneric&id=buffalo_wxr-5950ax12)

※ダウンロードしたファイル名に合わせリネーム
```sh
wget /tmp/openwrt-ipq807x-generic-buffalo_wxr-5950ax12-squashfs-sysupgrade.bin https://downloads.openwrt.org/releases/23.05.3/targets/ipq807x/generic/openwrt-23.05.3-ipq807x-generic-buffalo_wxr-5950ax12-squashfs-sysupgrade.bin
sysupgrade -v /tmp/openwrt-ipq807x-generic-buffalo_wxr-5950ax12-squashfs-sysupgrade.bin

```
### [Attended Sysupgrade](https://openwrt.org/docs/guide-user/installation/attended.sysupgrade)
```sh
opkg update
luci-app-attendedsysupgrade
opkg install auc

```
※SYSUPGRADEに失敗の場合LEDが点滅点灯のループ(いわゆる文鎮)
　手順を最初からやり直すと復旧出来る(ハードウェア障害は別)
:::

# 純正ファームウェアリカバリ：Reverting to stock firmware:

::: note warn
### 事前準備
以下をダウンロード
- [WXR-5950AX12シリーズファームウェア (Windows) Ver.3.05](https://www.buffalo.jp/support/download/detail/?dl_contents_id=62133&version=3.05)
※所定のダウンロードフォルダ（.\Downloads\wxr5950ax12-305.exe）に保存必須

`警告` > `強制的に貼り付け`
```powershell:powershell
Set-ExecutionPolicy Unrestricted
New-Item C:\openwrt -ItemType Directory -Force 
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/site-u2023/buffalo/main/wxr5950ax12-recovery.ps1" -OutFile "C:\openwrt\wxr5950ax12-recovery.ps1"
C:\openwrt\wxr5950ax12-recovery.ps1

```

:::
::: note alert
デバイスをインターネット回線から物理的切断（ONU・HGWからLAN線を外す）
:::
::: note warn

### 1. Decrypt official image by buffalo-enc and remove header

公式イメージをbuffalo-encで復号しヘッダーを削除します
（ヘッダー削除はデバイスで作業）

複合
```powershell:powershell
C:\openwrt\firmware-wintools\firmware-wintools.exe buffalo-enc -i C:\BUFFALO\wxr5950ax12-305\wxr_5950ax12_jp_305 -o C:\BUFFALO\wxr5950ax12-305\wxr_5950ax12_jp_305.dec \ -d -k olaffuB -O 0xc8

```
![複合.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/c3384252-97d3-5ffc-87d3-eeec27e8a073.png)
:::

::: note warn
### 2. Boot WXR-5950AX12 with OpenWrt initramfs image

OpenWrt initramfs イメージで WXR-5950AX12 を起動します

- OpenWrt化手順：Flash instruction using initramfs image: 
の`1`から`4`迄実行
  - [Prepare TFTP server with IP address 192.168.11.10](https://qiita.com/site_u/items/1197d2b7888dc4cf322c#1-prepare-tftp-server-with-ip-address-1921681110)

```powershell:powershell: 192.168.1.2
C:\openwrt\ip\192-168-1-2.ps1

```
:::

::: note warn
### 3. Upload modified stock image to WXR-5950AX12
複合したストックイメージを WXR-5950AX12 にアップロードします

```powershell:powershell
scp -r C:\BUFFALO\wxr5950ax12-305\wxr_5950ax12_jp_305.dec root@192.168.1.1:/tmp/wxr_5950ax12_jp_305.dec

```
:::

::: note warn

### 4.Find partitions "rootfs" and "rootfs_recover"

```powershell:powershell
ssh -o StrictHostKeyChecking=no root@192.168.1.1

```

ヘッダー削除

<details><summary>example of decryption:</summary>

   $ buffalo-enc -i wxr_5950ax12_jp_305 -o wxr_5950ax12_jp_305.dec \
                 -d -k olaffuB -O 0xc8

   example of removing header (v3.05):

   - before

   $ hexdump -n 64 -v -C wxr_5950ax12_jp_305.dec
   00000000  57 58 52 2d 35 39 35 30  41 58 31 32 5f 33 2e 30  |WXR-5950AX12_3.0|
   00000010  35 5f 31 2e 30 31 5f 4a  50 5f 6a 70 5f 71 63 61  |5_1.01_JP_jp_qca|
   00000020  0a 66 69 6c 65 6c 65 6e  3d 34 35 33 35 30 39 31  |.filelen=4535091|
   00000030  32 0a 55 42 49 23 01 00  00 00 00 00 00 00 00 00  |2.UBI#..........|
   00000040

   - after

   $ hexdump -n 64 -v -C wxr_5950ax12_jp_305.ubi
   00000000  55 42 49 23 01 00 00 00  00 00 00 00 00 00 00 00  |UBI#............|
   00000010  00 00 08 00 00 00 10 00  78 cf c4 91 00 00 00 00  |........x.......|
   00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
   00000030  00 00 00 00 00 00 00 00  00 00 00 00 3d 2a 64 fd  |............=*d.|
   00000040

</details>

```sh:SSH
dd if=/tmp/wxr_5950ax12_jp_305.dec bs=1 skip=50 of=/tmp/wxr_5950ax12_jp_305.ubi
hexdump -n 64 -v -C /tmp/wxr_5950ax12_jp_305.ubi

```
2分弱待つ

![wxr_5950ax12_jp_305.ubi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/25a02c94-fd6d-bb16-1f8e-396cce4baadc.png)

   <details><summary>example:</summary>

   root@OpenWrt:/# cat /proc/mtd
   dev:    size   erasesize  name
   mtd22: 04000000 00020000 "rootfs"
   mtd23: 04000000 00020000 "rootfs_recover"
   in this case, "rootfs" is mtd22 and "rootfs_recover" is mtd23

</details>

パーティション「rootfs」と「rootfs_recover」を見つけます

```powershell:SSH
cat /proc/mtd

```
- 以下、23.05.0
`mtd22: 04000000 00020000 "rootfs"`
`mtd23: 04000000 00020000 "rootfs_recover"`
:::

:::note warn
### 5. Format "rootfs"/"rootfs_recover" partition with the uploaded image

<details><summary>example:</summary>

   ubiformat /dev/mtd22 -f /tmp/wxr_5950ax12_jp_305.ubi
   ubiformat /dev/mtd23 -f /tmp/wxr_5950ax12_jp_305.ubi

</details>

アップロードしたイメージで「rootfs」/「rootfs_recover」パーティションをフォーマットします

```powershell:SSH
ubiformat /dev/mtd22 -f /tmp/wxr_5950ax12_jp_305.ubi
ubiformat /dev/mtd23 -f /tmp/wxr_5950ax12_jp_305.ubi

```
:::

:::note warn
### 6. Remove "rootfs"/"rootfs_data" volume from user_property partition

<details><summary>example:</summary>

   . /lib/upgrade/nand.sh
   UBI=$(nand_attach_ubi user_property)
   ubirmvol /dev/$UBI -N rootfs
   ubirmvol /dev/$UBI -N rootfs_data

</details>

user_property パーティションから「rootfs」/「rootfs_data」ボリュームを削除します

```powershell:SSH
. /lib/upgrade/nand.sh
UBI=$(nand_attach_ubi user_property)
ubirmvol /dev/$UBI -N rootfs
ubirmvol /dev/$UBI -N rootfs_data

```
:::

:::note warn
### 7. Reboot
再起動

```powershell:SSH
reboot

```
:::

:::note alert
 **絶対に電源は抜かない事**
:::

:::  note
### 数分待つ
- [`192.168.11.1`](http://192.168.11.1/)でログイン
:::
::: note alert
デバイスをインターネット回線に物理的接続（ONU・HGWからLAN線に繋ぐ）
:::
::: note
### クライアントPCをDHCPにする
※ストックファームウェア管理画面を確認してから実行
`警告` > `強制的に貼り付け`
```powershell:powershell: DHCP
C:\openwrt\ip\dhcp.ps1
Set-ExecutionPolicy Restricted

```
:::

# あとがき
- 現状OpenWrt出来る**一般市販**デバイスでこれより性能が良いものは無い

- kmod-qca-nss-dp / Qualcom NSS dataplane ethernet driver
こんなものが入っている

- 23.05.0-rc3 AdGuard入れて安定稼働中

- ストックファームへの復元
その手順にせよ、Windows用buffalo-encにせよ
あまりにあっけなく作業出来ました
感謝です

TFTPがパワーシェルでうまくいかない・・・

IPアドレスは名前が変わると動かないから要検討中 > まあまあか・・・

加工は文字通りバイナリで詠み込むから遅いのなんの、オプションでなんとかなるのか、スキル足らず・・・

ストックファームが自動で取れない、誰か教えて下さい！

ストックファームウェア復旧作業は実時間5、6分程度
よく手順を確認してから作業がおすすめ

# 参考資料（感謝:relaxed:）

[ハードウェア表：ファームウェアのダウンロード](https://openwrt.org/toh/views/toh_fwdownload?dataflt%5BModel*%7E%5D=WXR-5950AX12)

[Table of Hardware: Ideal for OpenWrt + 802.11ax supported](https://openwrt.org/toh/views/toh_available_16128_ax-wifi)

[大破ログ](https://taiha.hatenablog.jp/entry/2023/02/25/buffalo-wxr-5950ax12/)