由於筆者比較社交恐懼且不習慣直接大聲講話,因此在考取 B 證之前並沒有進行太多通訊。考取 B 證後,筆者成為了「社畜」,加上住宿地點的電磁環境複雜,導致購買設備後幾乎沒有使用過,直到前幾天在學弟的鼓勵下才開始嘗試 FT8 通訊,並遇到以下情況:

作者因為「XieGu」X6100 原廠韌體的不足,又沒有足夠的資金和空間購買新的設備,因此希望能找到改善「XieGu」X6100 韌的方法。經過一番搜尋後,作者找到了「XieGu」X6100 的替代韌,並對其功能感到興奮。作者希望趁著這股熱情,學習一些業餘無線電的基本知識和設備使用方法。本文將簡單介紹該替代韌以及它的使用方法。
[!注意] 在閱讀前請留意
- 由於筆者並未充分掌握 X6100 的原始韌體的各種功能,因此在介紹替代韌體時,可能會重複介紹與原始韌體相同的功能。
- 這是一篇介紹使用方法並包含一些抱怨的文章,若您感到不適,請關閉此頁面。
介紹
XieGu X6100 的替代韌體最初由… R1CBU 開發,根據介紹,「此韌體旨在為XieGu X6100 建立 Linux 內核和作業系統,無需從供應商的內核複製檔案」。在更新… V0.20.0 版本在更新韌體後,作者厭倦了繼續開發:
我對這款無線電的品質已經不滿意。我不喜歡基於封閉程式碼的設備開發。我不想再浪費時間了。我決定暫停「XieGu X6100」的韌體開發,自行開發無線電,以消除這些問題。如果「XieGu」突然有興趣繼續我的工作,我很樂意與他們溝通。
從那之後,R2RFE 已進行後續的開發工作,並持續發布 最新版本。
使用
使用方法非常簡單,請下載作者提供的。 sdcard.img,使用 rufus 將程式燒錄到 MicroSD 卡中,然後將卡插入機器後重新啟動,即可進入替代固件。
功能
除了實體按鍵之外,對於使用者來說,最常使用的兩個功能分別是:替換 X6100 的韌體。圖形介面以及網頁伺服器接下來將分別介紹各項功能。
如果您想觀看功能示範的影片教學,我會計畫製作一個示範影片。
實體按鍵

X6100 的替代韌體,對正面左側的按鈕進行了客製化設定。儘管… R1CBU 的說明書目前已有部分描述,但已較為過時。以下將根據其手冊進行修改和補充說明:
VOL-SQL-RFG 旋鈕
- 按下按鈕即可鎖定或解鎖當前功能。
- 當旋轉以鎖定目前的功能時,即可變更目前功能的狀態。
- 在解鎖當前功能時旋轉,即可切換到不同的功能:
- 音量:
- 射頻增益:RF Gain(0-100)
- 濾波器(低頻):控制解調數位濾波器的低頻
- 濾波器高頻:設定解調數位濾波器的最高頻率
- 功率:發射功率
- H-MIC 增益:手持麥克風的增益
- 返回音量;
- 旋轉按鈕可以用來調整上述說明的功能。
MFK 旋鈕
- 按下按鈕即可鎖定或解鎖當前功能。
- 當旋轉以鎖定目前的功能時,可以切換目前功能的狀態。
- 在解鎖當前功能時旋轉,可以切換到不同的功能:
- 頻譜縮放:可控制頻譜的寬度和瀑布顯示。
- Spectrum Beta 版本:我不明白。
- 峰值保持:設定顯示頻譜峰值的時間
- 最高速度:峰值速度
「GEN」按鈕
- 包含多個菜單
- 長按按鈕會截取螢幕並儲存至 SD 卡。
- 點擊按鈕會切換到以下選單:
- VOL 菜單:使用「VOL-SQL-RFG」旋鈕來修改選取的選項。
- 第一期/第四期
- 音量:
- 靜音:靜噪等級
- 射頻增益:RF Gain(0-100)
- TX Power:發射功率
- 第 2 卷 / 第 4 卷
- 濾波低頻:控制解調數位濾波器的較低頻率
- 過濾高頻:控制解調數位濾波器的低頻
- 過濾藍白 (BW)
- SP 模式:喇叭模式,我不明白是什麼。
- 第 3/4 卷
- MIC Sel:麥克風選擇功能,可選取手持麥克風或使用內建麥克風。
- H-麥克風的增益
- I-MIC 增益:內建麥克風的增益
- Moni label:我不明白是什麼。
- 第 4 卷 / 第 4 期:這個等級的菜單似乎是透過廣播語音合成產出,與… RHVoice 相關,但我還不了解它的使用方法。
- 語音:選擇音色
- 語速:
- 語音音調:我不明白。
- 語音音量:
- MFK 菜單:使用 MFK 旋鈕來調整選取的選項。
- MFK 1/4
- 最低等級:顯示頻譜圖和瀑布圖的最低等級
- 最大等級:顯示的頻譜和瀑布圖的最大等級
- 頻譜縮放:可控制頻譜的寬度和瀑布顯示。
- Spectrum Beta:我不明白
- MFK 2/4
- 頻寬填充:頻寬填充顏色
- 頻譜峰值:設定頻譜峰值
- 峰值保持:設定顯示頻譜峰值的時間
- 最高速度:峰值速度
- MFK 3/4
- 充電器:控制電池充電器的狀態。如果我的理解正確的話,其值分別對應於:
- 開啟:為電池充電
- 關閉:直接使用充電器,不為電池充電。
- 影:我不明白,但根據這篇文章,推測可能是只有在電池沒電時才會充電。
- 天線:我不明白它是用來控制什麼,調整範圍為 1 到 5。
- RIT:接收機漸進調諧
- XIT:發射機的增量調諧
- MFK 4/4
- AGC 延遲:在變更發生前等待的時間。
- AGC 膝關節:AGC 增益斜率變化的值
- AGC 傾角:AGC 的傾角值
- MEM 菜單
- 總共有兩頁,包含 8 個儲存位置,可供儲存頻率和模式。
- 按下按鍵可以快速載入已儲存的頻率,長按按鍵則會儲存當前的頻率設定。
應用程式按鈕
- 包含三級選單
- 應用程式 1/3
- RTTY:啟動 RTTY 模式
- FT8:啟動 FT8 模式
- SWR 掃描:對頻段進行 VSWR 掃描
- GPS:透過外部 GPS 設備更新時間和地區等資訊。
- 應用程式 2/3
- 錄音機:錄音機
- QTH:設定 FT8 模式時所使用的地理位置資訊
- 頻道名稱:設定用於 FT8 模式的呼號
- 設定:機器設定介面
- 應用程式 3/3
鍵 (按鈕)
看起來似乎只適用於 CW 模式,筆者短期內沒有使用 CW 的計畫,因此此按鈕的說明已省略。
味精按鈕
可以將錄製的報文發送於當前頻率,無需過多的說明。
DFN 按鈕
- DFN,數位雜訊過濾
- 包含三級選單
- DFN 1/3
- DNF:是否啟用 DNF
- DNF 的頻率:DNF 控制中心的頻率
- DNF 寬度:DNF 控制濾波器的寬度
- DFN 2/3
- 注意:請確認「降噪濾波器」是否已開啟。
- NB 級別:雜訊抑制器等級
- NB 寬度:雜訊抑制器的寬度
- DFN 3/3
- NR:降噪功能,是否開啟
- NR 水平:設定降噪等級
圖形介面
這裡會簡單介紹筆者常用的圖形介面的大致功能。由於筆者目前只使用了其中的 FT8 功能,因此接下來會主要介紹 FT8 功能的圖形介面。
在啟動廣播後,預設介面(0.28.0 版本)如下所示:

上方狀態欄分為三個部分:
- 從左至右、從上至下的狀態欄分別如下:
- 頻率掃描記憶
- 通訊模式
- AGC 模式
- 電源放大器的狀態
- 自動天線調諧器的狀態
- 無線網路狀態
- 中間的狀態欄顯示訊號強度,在發射時會顯示發射功率和天線駐波比。
- 在螢幕右側的狀態欄會顯示時間和電池電量/電池電壓。
螢幕上最重要的兩個圖表是頻率圖和瀑布圖,你可以透過右側最大的旋鈕來控制頻率。
下方的功能設定,就像前面所描述的 [[#物理按鍵]] 所控制,非常簡單易懂。
若我們需要使用 FT8 功能,首先請將時間調整為與實際時間誤差小於 1 秒的狀態,然後點擊 APP 按鈕兩次,分別設定 QTH(廣播站位置)和 Callsign(通訊識別碼),再次點擊 APP 按鈕即可進入 FT8 追台模式。
以下以與 BD4JN 濟南黃河業餘無線電集體台通聯為例,展示使用 X6100 替代固件進行 FT8 的流程。如圖所示,左側資訊為固件解析出的 FT8 資訊,中間資訊為設定 QTH 後兩方的距離,右側資訊為訊號強度,發起 CQ 的呼叫被標記成綠色。
我們在螢幕上看到 BD4JN 發送了 CQ,當時我們將MFK按鈕旋轉至顯示「CQ BD4JN OM86」的狀態,按下MFK按鈕後,韌體會在下一個週期發起呼叫:

在螢幕上,我們可以看到當時發射的天線和駐波比。在結束通話後,我們的通話資訊會被標示為藍色,韌體會等待下一輪周期的對應方回覆。如果存在對應方的通話資訊,則會將該通話資訊標示為紅色:

之後就可以繼續通訊,直到對方發送 RR73:

在此時,韌體會儲存這次的連線,並發送「73 結束」訊息。

完成聯絡後,該呼號會被記錄在已聯絡電台的資料庫中。當下次再次與該電台聯絡時,會在該電台處標記一條橫線,以避免重複聯絡:

網頁伺服器
連接到 Wi-Fi 後,可以在同一網段的其他機器上輸入 X6100 的 IP 位址,即可進入網站伺服器。目前網站伺服器的主要功能如下:

接下來將逐一介紹。
Bands
此功能為非數位模式下的頻寬編輯器,內建了一些預設值:

在使用替代韌體時,如果是在預設的頻段模式下,透過機器的上下按鍵來切換頻段,則機器會自動在該頻段中切換。作者在不同模式下也仔細設定了對應的頻寬,更方便使用。
如果需要的話,可以新增相應的頻段,儲存後就可以如同前一段所述,自動切換。
數位通訊模式
此功能為數位模式下的頻率編輯器,主要包含 FT8 和 FT4 兩種模式,同樣支援新增頻率。

在更換韌體時,如果以數位模式下使用機器的上下按鍵來切換頻率,則機器會自動在該頻率中切換。
如果需要,也可以新增相應的頻率和模式,儲存後就能如同前一段所述,自動切換。
檔案瀏覽器
檔案管理工具,用於下載和儲存通聯日誌、通聯數據、截圖等檔案。

ft_log.adi:FT8/FT4 的通訊記錄,可上傳至 LoTW 或 qrz.com。
params.db:某些參數資訊,在跨版本更新 x6100\_gui 時,不建議覆蓋,可能會出現異常問題。
qso_log.db:已儲存過所有已使用的呼號,下次進行 FT8/FT4 時,就不需要再次呼叫。
時間編輯
有時可能會遇到廣播節目時間與實際時間不符的情況,這種情況很容易發生:
- 可能只是在 FT8 的菜單中調整了時間同步。
- 可能是在沒有網路的情況下啟動機器並開始使用 FT8。
- 可能無法連接到 NTP 伺服器。
在這種情況下,系統中的 ntpd 無法為我們及時同步時間,而且進入設定來調整時間也不利於視力保護。我曾在 issue 區看到有人也有同樣的希望。在網伺服器上進行時間同步,因此我成功地實現了這個功能。
目前支援多種時間同步方式:
將當地的時間同步
在載入該頁面時,系統會自動取得當前電台的時間/時區以及訪問電台設備的時間。我們可以將本地時間同步至伺服器,這種同步方式會比正常時間慢幾十到上百毫秒。

手動更新時間
這種方法與在廣播電臺設定中更新時間的方式相近,因為我比較懶,所以只提供直接輸入字串來更新的時間功能。當時間比正常時間快 1 秒時,點擊「更新時間」按鈕,就能更準確地與正常時間對齊。

透過 NTP 伺服器更新時間
儘管連接 Wi-Fi 後,設備會自動透過 NTP 同步時間,但 NTP 伺服器可能無法連線,我們也可以選擇手動設定 NTP 伺服器。這裡提供了一些常見的 NTP 伺服器,並支援我們手動輸入 NTP 伺服器的地址。

更新時區
預設系統時間為 UTC,可更改為符合需求的時間區。

其他功能
連接 Wi-Fi 後,就可以透過 SSH 連接到目標機器,預設的使用者名稱和密碼為 root/123。 (X6100 的原生系統也可以這樣進入,但如果沒有 DHCP,透過按鈕設定 IP 地址實在非常麻煩)
編譯與自定義
[!注意] 這並非完整的使用說明。
筆者沒有使用 `buildroot` 的經驗,因此這篇文章可能不適合熟悉或精通 `buildroot` 的資深使用者。本文旨在盡快掌握 `XieGu` X6100 替代固件的所有功能,並編譯目標模組。
[!警告] 請謹慎進行刷機操作。
刷機可能會導致資料遺失,或對機器造成無法恢復的損害。本文中的程式碼範例僅供參考,若執行後造成機器損壞,筆者概不負責。
編譯整個韌體
若需要編譯整個韌體,請在 AetherX6100Buildroot 接下來執行:
./br\_config.sh
進入 build 目錄
make
編譯成功後,會在 build/images 在該目錄中產生 sdcard.img。
自訂應用程式
在編譯後,X6100替換固件的目錄結構中,我們關心的是以下項目:
$ tree -L 2 ./
./
├── ...
├── br2_external
│ ├── ...
│ ├── board # 板子資訊
│ ├── ...
│ └── package # 應用程式
├── br_config.sh
├── build
│ ├── ...
│ ├── images # 包含映像檔
│ ├── ...
│ └── target # 目標
└── ...
如果我們希望自定義現有功能,可以先將目標功能複製到本地,然後修改。 br2\_external/package/<套件名稱>/ 以下相應的 .mk 檔案中的內容:
# <套件名稱>\_VERSION = v0.0.2 # 將這行註解
<套件名稱>\_SITE = <套件路徑> # 設定指向本地路徑
<套件名稱>_SITE_METHOD = local # 請修改為 local
在修改程式碼後,只需在… build 在該目錄中執行:
make <套件名稱>-重新配置
其中 <套件名稱> 用於目標應用程式的名稱。 建立/目標/ 我找到了新的程式碼。
例如,x6100\_gui 位於 ./target/usr/sbin/x6100\_gui,x6100\_webserver 位於 ./target/usr/lib/python3.11/site-packages/x6100\_webserver/。
理論上不需要重新啟動,只需透過 SSH 連接到機器,完成後續操作後再重新啟動服務或機器即可。
為韌體新增功能
在開發一些小型功能時,我逐漸了解了 `buildroot` 的原理。雖然我有許多功能想要實現,但由於各種原因,最終未能成功(有些只是寫了部分,後來就不再繼續)。因此,我將這些過程記錄下來。
瀏覽我簡單地製作了一個基於「losehu」韌體的 UV-K5/K6 遠程控制器。這篇文章之後,我嘗試為網頁伺服器也新增一個基於 WebSocket 的圖形介面,用於檢視與管理,並嘗試使用 Pillow 和 WebSocket 進行圖形圖像處理以及前後端通訊。為了安裝這兩個套件,需要在… AetherX6100Buildroot/br2_external/configs/X6100_defconfig 在中間加入參數:
BR2\_PACKAGE\_PYTHON3\_SSL=是
BR2\_PACKAGE\_PYTHON3\_ZLIB=是
BR2\_PACKAGE\_PYTHON\_WEBSOCKETS=是
BR2\_PACKAGE\_PYTHON3\_PYEXPAT=是
BR2\_PACKAGE\_PYTHON\_PILLOW=是
之後才能在韌體中使用。
為了實現遠端介面檢視和功能控制,需要每隔一段時間截圖並發送至前端。X6100 的螢幕解析度為 800x480,如果直接傳輸 png 檔案,一個圖形檔案大概有 500KB,感覺會比較龐大,因此筆者考慮將截圖壓縮成 jpg 或 webp 進行傳輸,但在此過程中遇到了兩個問題:
如果將其壓縮為 JPG 格式,可能會出現 Pillow 版本需求與機器上的 libjpeg 版本不符的問題,因為 Pillow 需要 libjpeg9+,但韌體所使用的 libjpeg-turbo 則生成的是 libjpeg8。
如果壓縮為 WebP 格式,則需要在韌體編譯時新增 WebP 函式庫:
BR2_PACKAGE_WEBP=是
即便如此,在實際運作中,仍然無法讓 `pillow` 找到已經安裝好的 `webp` 庫,原因不明。
如果說前兩個問題都比較容易解決,實在不行我們可以降低幀率來傳輸圖像的話,最後一個問題,筆者確實有些束手無策。如同大家所知,在 Linux 上,我們可以透過讀取 framebuffer 來取得當前的螢幕資訊,因此筆者只是簡單地實現了一個讀取 buffer 的邏輯:
使用 `open()` 函數以二進位模式開啟 `FRAMEBUFFER_DEVICE`:
```python
with open(FRAMEBUFFER_DEVICE, "rb") as fb:
raw_data = fb.read(SCREEN_WIDTH * SCREEN_HEIGHT * BPP)
```
而這樣讀到的截圖長這個樣子:

換句話說,這裡看到的截圖並未包含瀑布圖。這確實讓筆者感到困惑,因此筆者首先查閱了內建在韌體中的截圖功能,該功能位於: x6100_gui/src/screenshot.c:
void screenshot_take() {
uint32_t 緩衝區大小 = lv_snapshot_buf_size_needed(lv_scr_act(), LV_IMG_CF_TRUE_COLOR_ALPHA);
buf = (uint8_t *) malloc(buf_size);
lv_snapshot_take_to_buf(lv_scr_act(), LV_IMG_CF_TRUE_COLOR_ALPHA, &快照、緩衝區、緩衝區大小);
pthread_t thread;
pthread_create(&執行緒、NULL、截圖執行緒、NULL);
pthread_detach(thread);
}
簡單來說,LVGL 本身就實現了一個截圖的 API,在開發基於 LVGL 的韌體時,只需要呼叫該 API 即可。雖然知道了韌體的解決方案,但這並不能解決筆者遇到的問題。筆者並沒有太多時間仔細閱讀其中的 API 實作原理,因此只能將實作該功能的想法暫時擱置了,如果哪位 HAM 感興趣的話可以提示一下我接下來該怎麼做。
簡單總結
對於原始韌體,在使用 FT8 時可能會遇到各種問題,包括但不限於:
- 與 JTDX 和 WSJT-X 連線的問題
- 也有人提出了其他系統使用的問題。
- 由於沒有 DHCP,因此必須手動設定靜態 IP 地址。
對於替代韌體,可以使用內建的 FT8 進行通訊,但也會有一些額外的問題:
- 與 WSJT-X 相比,內建的 FT8 解析報文數量較少,且解碼結果可能不一致。
- 不過,理論上也可以透過替代韌體連接 WSJT-X。
- 內建的 FT8 功能邏輯實現存在一些問題。
- 在某些情況下,無法記錄對方的位置資訊,目前尚無法確定具體原因。
對於這款機器來說,它是一款價格相對親民,適合新手入門的無線電。一個包就能容納無線電、NanoVNA、充電寶和 12V 的連接線,幾乎可以做到想架台就架台。作為 SDR 無線電,它具有相當豐富的接口,但韌體仍有許多不成熟的地方,只能說勉強可以使用吧。
關於 X6100,以下: HamCQ 與海外論壇上面有很多討論,對此感興趣的讀者可以參考論壇上的文章。
[成功] 更換韌體的體驗
在更換韌體之前,我使用 FT8CN 控制 X6100,遇到了許多令人沮喪的問題,最終只成功與 3 個電台連線,而且只有 2 次連線是有效的(雙方在 LoTW/QRZ 上確認);而在更換韌體並使用內建的 FT8 功能後,在一小時內就成功完成了約 20 次的連線,大大減少了挫敗感。
未來展望
目前 X6100 的替代韌體還不夠完善,還有許多功能可以新增:
- WfView 的功能可能尚未完全完善:
- 有了 Web 伺服器之後,實際上可以新增許多功能,但目前缺乏 x6100\_gui 以及與 Web 伺服器的通訊介面和協定,因此無法在 Web 伺服器上即時取得 GUI 的狀態。
- 最好能像 NanoVNA 或者 UV-K5 就像網頁一樣,能夠在線控制廣播電台。
- 自動上傳至 LoTW
- 困難點可能在於如何在網頁上使用金鑰對「adi」檔案進行簽名,可能需要重新移植。 tqsllib
其他資料
參考資料
P.S. 因為家中電磁環境過於惡劣,加上筆者最近的週末已經超過活動量,因此寫完這篇文章後進入了無線電愛好者的倦怠期,該嘗試尋找新的玩法囉 XD