斐訊 K3 上車,開啓 Telnet、刷已 Root 版官方固件和 Merlin

  1. 入手 Linksys WRT1900AC 作爲 AP,刷 DD-WRT 固件
  2. 闖入聯通定製烽火 HG220G-U(WO-36)
  3. 也許是最折騰的(隨身)迷你伺服器:計劃
  4. 也許是最折騰的(隨身)迷你伺服器:軟體
  5. 也許是最折騰的(隨身)迷你伺服器:裝機
  6. 在國科大(UCAS)宿舍配置 IPv6 穿透
  7. 斐訊 K3 上車,開啓 Telnet、刷已 Root 版官方固件和 Merlin
  8. 使用 bind9 建置混合 DNS(Response Policy Zone)
  9. 斐訊 K2T 開箱與動手艹(動手玩)
  10. Huawei B315s-936 4G LTE CPE 開箱與動手玩
  11. 透過 VLAN 從不同出口獲得 IPv4/IPv6 地址構建雙棧網路
  12. 關於半夜艹貓的這檔事:中興 ZTE ZXHN F677V2 ONT 設定橋接
  13. 修復 OpenWRT 上 Clash(OpenClash)影響 Port Forwarding 的問題
  14. 在 OpenWRT 上正確開啓網易 UU 加速器
  15. 在 Proxmox VE 上使用 LXC 建置 UU 加速器

斐訊的車越開越猛,而且「新」品 K3 的 AC3167 能力,起碼聽起來是很誘惑的,並且硬體規格也不錯,沒有明顯短板。但是因爲不想投太大的本金,所以京東上車,白條 12 期。事前專門資訊了客服京東是否可以參加 K 碼反現,客服非常果斷地表示沒問題。這樣膽子就大了。

上車

等了兩天降價一點點,果斷下單了。雖然事前就知道這孩子特別大隻,但是到手之後還是覺得包裹有些過於龐大了…

盒子被 JD 弄彎了一個角…總的來說,外觀設計上很大氣,並且也努力想要做出質感來了,但是最後還是敗在了卡紙的成本上。由於包裝設計的原因,拿出路由器非常好拿。

配件給得很小氣,全部的配件只有一個電源適配器,壓在路由器的包裝下,還有一本小小的快速安裝指南和一張下車指南小卡片。

K3 整體的設計來說,雖然不是淺羽的風格,但是還是好看的。弧線的曲率很舒服,設計感滿滿,更給人一種摩天大廈的感覺。頂部有一塊 3.5 吋熒幕,是老喬說的「最合適的熒幕尺寸」,並且配有三個觸摸鍵。背面有一個 USB 3.0(儘管是黑色的),一個 WAN 口和 3 個 LAN 口,均爲千兆網口,另外還有一個電源鍵。底部是裝置訊息,還有返現的重點 K 碼。另外電源適配器是一個 38W 的適配器,插頭不可摺疊,就沒有拍照了。

以上開箱完成,簡單測過硬體沒有大問題之後,兌換了 K 碼,開始折騰。

打開 Telnet 並備份韌體

到手韌體版本已經是 V21.5.39.260 了,屬於一個比較新的版本,不能直接刷所謂的「過渡固件」了。CFE 版本也已經更新,不能透過訪問 HTTP 執行指令。於是通過 phitools 大的工具打開 Telent。順便吐槽,現在的百度網盤幾乎都下不動了,所以淺羽也上載到了櫻川存儲,可以快速下載。使用工具打開 Telnet 之後就可以直接連上了,不需要任何認證。插上一個 U 盤,接着可以備份固件了:

# cd /tmp/share/sda1
# cat /dev/mtd0 > boot.bin
# cat /dev/mtd1 > nvram.bin
# cat /dev/mtd2 > nvram_back.bin
# cat /dev/mtd3 > res_info.bin
# cat /dev/mtd4 > pro_info.bin
# cat /dev/mtd5 > dev_info.bin
# cat /dev/mtd6 > linux.bin
# cat /dev/mtd7 > rootfs.bin
# cat /dev/mtd8 > brcmnand.bin

或者簡單地寫個迴圈就好了。這些備份可以再用 Telnet 或者 SSH 寫回去,也可以在舊版的 CFE 下直接刷回去。

刷官改固件(Root 版官方韌體)

直接在 Telnet 下,cat/dev/mtdblock6 就可以:

# cat 21.6.8.46_tb.bin > /dev/mtdblock6 && reboot

刷完之後,螢幕會提示「固件升級中」,耐心等待它更新完成自動重啓即可。

降級 CFE

新版(據說就是 V21.5.39.260 之後)的 CFE 更新了,不能再通過訪問 HTTP 執行寫入指令,因此需要先降級 CFE。CFE 其實就在 /dev/mtdblock0 中,有一個 Windows Only 的工具可以幫忙從備份的 CFE 裏生成降級的 CFE 並且保留 MAC 地址等資料。生成之後,拷貝回 U 盤裏,寫回 /dev/mtdblock0 重啓就可以了。這個工具同樣可以從櫻川存儲下載

尝试 Merlin

Merlin 是高貴的阿蘇斯華碩路由器官方固件的改版,之前在 R6300V2 和 R7000 上用過,還是比較喜歡的。雖然功能不如 OpenWRT 那麼強大,但是穩定性也是不錯的,並且設定上更簡單。考慮到淺羽主要把 K3 用作 AP,於是就刷個 Merlin 吧。

從 CFE 刷 Merlin(及其他韌體)

首先給 PC 設定好 IP 位置爲 192.168.2.2/24,然後開始 ping 192.168.2.1。

保持電源關閉。找一根細小的物體(比如淺羽用的杜邦線),按下 Reset 並保持,同時打開電源。大約 3~5 秒後,可以看到 ping 的返回資料中,TTL=100,這時候訪問 http://192.168.2.1,應該就可以看到 CFE 的介面了。這時候上載資料多半是過不了校驗的,需要本地開好個 TFTP 伺服器,然後訪問 HTTP 執行指令:

http://${Router IP Addr}/do.htm?cmd=flash+-noheader+${PC IP Addr}:/${Firmware Filename}+nflash0.trx

雖然訪問之後是無法打開,但是可以看到 TFTP 伺服器在往路由器發送資料了。發送完成之後,在 CFE 的 Web UI 下選擇 Restore defualt NVRAM vaules. ,然後關閉電源重啓即可進入 Merlin。此方法原則上可以刷大部分韌體,包括但不限於官改、Merlin、OpenWRT。

另外刷了 Merlin 之後可以順帶看一眼自己的的閃存,在 ssh 下看 dmesg

# dmesg | grep -A6 NAND

發現自己還真是三星閃存的…據說會有壞塊,而且在 Merlin 下會不停地擴大,可以說是很頹唐了…不過也有 Workaround,就是用一個隨身碟替代 jffs。某個版本的 Merlin 提供了一個 usbjffs 指令可以簡單完成這件事。只作爲 AP 的話,也可以學習淺羽不使用 jffs。不過想了想,如果涼了,大概還可以找 JD?不過設定好 usbjffs 後,即使是 Samsung 閃存的 K3 也是一樣可以使用熒幕的部分功能的,實測第一屏(版本信息)、第三屏(無線接入信息)、第四屏(天氣)、第五屏(SSID 與密碼)與第六屏(接入裝置詳細資料)的部分功能是可用的,最少也可以超時候關閉熒幕了。

Merlin 的小坑

有的時候 Web UI 會莫名爆炸。重啓 httpd 就可以了:

# serivce restart_httpd

另外,在刷 Merlin 之後要進入 CFE,操作也是相同的,但是路由器的地址在 Merlin 爲預設參數的情況下變爲了 192.168.50.1。如果此地址不能工作,那麼可以嘗試 Merlin 中設定的路由器地址,或者恢復 Merlin 的出廠設定。

最後,千萬不要嘗試在 Merlin 中直接更新韌體,哪怕是更新新版 Merlin 都不可以。必須使用 CFE + TFTP 方式。

據說原廠分區是這樣的:

0x000000000000-0x000000080000 : "boot" 512K
0x000000080000-0x000000180000 : "nvram" 1024
0x000000180000-0x000000280000 : "nvram_back" 1024
0x000000280000-0x0000002c0000 : "res_info" 256
0x0000002c0000-0x000000300000 : "1" 256
0x000000300000-0x000000320000 : "pro_info" 128
0x000000320000-0x000000380000 : "2" 384
0x000000380000-0x0000003a0000 : "dev_info" 128
0x0000003a0000-0x000000400000 : "3" 384
0x000000400000-0x000003000000 : "linux" 2C00000 44M
0x00000061e258-0x000003000000 : "rootfs"
0x000003000000-0x000008000000 : "brcmnand" 5000000 80M

而刷完 Merlin 之後,分區變成了 4 個,mtdblock3、4、5、7、8 都被「破壞」了:

dev:    size   erasesize  name
mtd0: 00080000 00020000 "boot"
mtd1: 00100000 00020000 "nvram"
mtd2: 00100000 00020000 "nvram_back" # 全空
mtd3: 00040000 00020000 "res_info"
mtd4: 00020000 00020000 "pro_info"
mtd5: 00020000 00020000 "dev_info"
mtd6: 02c00000 00020000 "linux"
mtd7: 029e1f7c 00020000 "rootfs"
mtd8: 05000000 00020000 "brcmnand" # 全空

具體的待考證…

關於使用感想

這孩子的信號還是不錯的。只是刷完 Merlin 之後,還沒有仔細設定,導致原本配合 Linksys WRT1900AC v1 能夠工作在 1167Mbps 的某水果,現在回到了 867Mbps。另外,自身體積在那,發熱也不算嚴重。耗電量沒有測試,據說正常在 5W~15W 之間波動,我只想說之前裝的迷你伺服器在跑 3 個 VM 的情況下大約 17W…

最後,這孩子真的太大了…幸好設計的造型是直立放置的,否則這個櫃子其實本身都沒辦法讓 WRT1900AC 正面朝外橫向擺放,K3 更是放不下了。

同場加映:關於螢幕

目前的情況看,螢幕並不是由 BCM 的 SoC 直接控制的,而是通過 SPI 連接,由單獨的一片 PIC32MZ1024ECG100 去控制。官方韌體中,有 uhmiuhmiMsg 兩個可執行檔去管理螢幕,其中前者用於對螢幕的韌體進行操作或者 Debug,後者用於與螢幕通訊,傳送需要顯示的資料。比如可以查看通訊資料以調試:

# uhmi -d 0xffffffff -D both

也可以手工地設定成某一個熒幕狀態,比如設定成重啓中:

# uhmiMsg reboot

猜測邏輯是,上電之後 PIC32 開始顯示開機動畫,同時監聽 SPI;一旦系統初始化完成並初始化 SPI 發送數據後(uhmiMsg runapp),PIC32 停止顯示開機動畫,並且開始顯示 SPI 數據指定的介面。另外根據 @updateing,

0. MCU 和路由器通过串口和 GPIO 连接。MCU 的 ROM 中应该有一个写死的 bootloader,每次更新只更新 app 部分,这样就不需要用 PIC 的 SPI 去更新了,直接用自己的协议通过串口更新就好。MCU 也不会重启掉固件。
1. 不改 MCU 程序的情况下屏幕内容的大体框架不能修改,只能填字。
2. SoC 有三个串口,ChipCommon A 有两个,ChipCommon B 有一个,其中 ChipCommon A 的第一个串口是控制台 / TTL,第二个接了屏幕。ChipCommon B 上好像没接东西。
3. 据我所知,现在除 K3 官方内核以外没有哪个内核正确初始化了所需要的串口,所以直接写数据十有八九是没反应的。并且就类似机型开源的代码来看,通常是在内核里在做这方面的初始化,从 userspace 并不容易做。

所以暫時來看,還是直接透過 uhmiMsg 提供資料給 PIC32 顯示比較現實。

Comments

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

To respond on your own website, enter the URL of your response which should contain a link to this post’s permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post’s URL again. (Find out more about Webmentions.)