從零購置一台 Voron 打印機 (二) Klipper 主機調試
還記得上次説到 Voron 采購單中的樹莓派嗎, 現在樹莓派這麽貴
而且個人感覺用它性能浪費, 還不如找點其他的方案
所以我的目光來到了上次被我拆掉的那個 先機隨身4G上網卡
因爲我給它刷了 Debian, 所以可以做大部分普通派能做的事情, 乃至我現在腦洞大開想把它搞成 Voron 的控制端主機
第一個坑 - Type C 不輸出 5V
不得不説, 這個地方的問題我排查一個多小時
Monster 8 控制主機板的 Type-C 後邊有一個 USB-PWR 的跳綫
一開始以爲它是會輸出 5V 電的, 因爲我把跳綫撥到 ON 之後確實會輸出 5V 電壓,
但是隨便插了一個設備上去之後, 設備完全沒有反應, 像是完全沒上電的樣子
然後用萬用表一量, 好家夥插上設備之後只有 1V 了
遂開始找原理圖, 發現這個跳綫前端連著 VBUS, 但是貌似僅用作輸入
但是正好旁邊有一個 USB-A 母口, 它也有一個跳綫, 那我就不客氣地把電借過來用了, 一根飛綫!
因爲 USB-PWR 跳綫的左邊空接, 所以正好借過來的電也不會倒灌,
而是直接流向 Type-C 輸出 這簡直太合適了 (不
第二個坑 - USB 工作模式
這個問題處理起來比較簡單, 因爲直接就有現成的答案
因爲 OpenStick 的 Debian 固件默認啓動時會將 USB 配置爲從模式, 所以無法直接和 Monster 8 通訊
所以在參考 切換 USB 工作模式 之後,
使用以下指令就可以達到想要的效果了.
1 | $ echo host > /sys/kernel/debug/usb/ci_hdrc.0/role |
可以看到, 出現了一個 STMicroelectronics Virtual COM Port
的設備, 它就是 Voron 控制板啦 φ(゜▽゜*)♪
因爲 OpenStick 沒有 USB-ID 脚, 只能這樣手動切換 USB 模式來插入外部設備,
或者以後可以把這句指令寫入到啓動脚本或者 SystemCtl 服務來實現開機自動切換, 執行完指令之後所有從設備功能將失效
第三個坑 - 安裝 Klipper 需要過多空間
這個坑是我沒想到的, 竟然是因爲安裝 Klipper 的時候依賴了整個源代碼編譯環境,
不僅有 arm-gcc / python 2 和 3, 甚至還有完全用不到的 avr-gcc. 這可是 STM32 呀..
整個安裝過程需要至少 3GB 的空間, 當時我就傻眼了, 怎麽會事呢 (?
OpenStick 一般是被嚴重閹割過, 只有 4GB 的eNAND. 而且裝完系統之後還會少一些——
所以不出意外, 全給我吃光了
所以現在如果還想繼續用 OpenStick 做主機, 那幾乎就只有一條路了,
考慮換 EMCP 擴容. EMCP 我選擇的比較穩妥且經過測試的 KMK8X000VM-B412
, 配置為 16G(eNAND) + 1G(RAM)
應該也許可能大概差不多夠用了 XD, 換新的 EMCP 成本為 18 HKD 左右, 還是承受得起的, 別忘了買植球鋼網
話説貌似.. 用網路把分區映射到 NAS 好像也是一個不錯的選擇…
08/25/2022 更新
擴容教程已經施工完畢 ╰(*°▽°*)╯
如果你想給你自己的 OpenStick 擴容, 可以參考 EMCP 擴容
第四個坑 - 依賴包炸裂
因爲 Moonraker 依賴的 libglib2.0-bin
會依賴比較舊的包,
而 OpenStick 預裝的比較新, 會引發一些依賴炸裂的問題, 導致裝不上。
千萬不要去嘗試卸載 libglib2.0-0(=2.68.1-2mobian1)
, 這樣會導致連帶差不多整個系統都給揚了。
所以我們只需要把 libglib2.0-0
降到 (=2.66.8-1)
然後等待降級完畢就行。具體可以參考 libglib2.0-0:amd64 install / remove broke whole ubuntu
1 | $ sudo apt install -f libglib2.0-0=2.66.8-1 |
第五個坑 - Locale 不對勁
因爲 OpenStick 所使用的 debian 可能被精簡過, 在給 Monster 8 編譯固件之前需要 make menuconfig,
然後 python 會打印一行錯誤
1 | warning: setlocale: LC_ALL: cannot change locale (en_US) |
所以我們要自己重新配置一下 locale,
選擇 en_US.UTF-8, 等待自動安裝完畢即可
1 | $ sudo apt install locales |
第六個坑 - USB Modem (CDC ACM) 支援
這個坑目前來說可以説是最大的了, 解決這問題需要重新編譯内核。
因爲 OpenStick 的内核默認沒有啓用 USB Modem (CDC ACM)
功能, 所以在插入串口設備的時候沒有 /dev/ttyACM0
,
會導致一系列問題, 比如 kiauh
等脚本無法識別設備進而導致上載固件失敗, klipper
沒辦法與 Monster 8 通訊。等等
編譯和準備工作
所以我們需要準備一個 Debian 9 / Debian 10 的系統 (Ubuntu 也行),
先把 OpenStick 的内核克隆下來。
1 | $ git clone https://github.com/OpenStick/linux --depth 1 |
然後配置内核編譯選項
1 | # 安裝 gcc9 |
選擇右下角的 Load
,
輸入 arch/arm64/configs/msm8916_defconfig
, 載入預設 Ok 確認。
然後依次選擇
- Device Drivers
- USB support
- USB Modem (CDC ACM) support
按下 y
啓用功能 (標記變成 <*>), 然後按下若干次 esc
退出并保存到 .config
。
最後開始編譯, 應該不會有問題發生。
1 | $ make -j24 |
合成 boot.img
跳轉到 arch/arm64/boot
下, 確認存在編譯生成後的 Image.gz
檔案。
敲入以下命令, 將設備樹 dtb 檔案附加在内核尾部,
這兒我使用我的設備型號 ufi001c 的設備樹, 請根據實際情況自行調整。
1 | $ cat Image.gz dts/qcom/msm8916-handsome-openstick-ufi001c.dtb > kernel-dtb |
解包 OpenStick 官方發行的 debian 的 boot.img 並提取出 initrd.img。
我這就偷懶用 ApkDB
工具來解包了, Windows 上比較方便 XD
這個 ramdisk.gz
就是 initrd.img 了
進入到 OpenStick 終端, 使用 lsblk -f
指令找到 rootfs
所在分區的 UUID 並記下。
重命名為 initrd.img
丟到 debian 去, 使用 mkbootimg
合成 boot.img 檔案
需要注意的是在以下命令中 –cmdline 參數中的 root=UUID=xxxx, 需要將 xxxx
換成你自己的 rootfs 分區的 UUID。
1 | $ mkbootimg \ |
最後, 就能得到帶有 USB Modem (CDC ACM)
功能的内核了,
使用 fastboot flash boot boot.img
刷新分區, 重啓即可。
Klipper 識別到設備, 開始正常工作
未完待續
從零購置一台 Voron 打印機 (二) Klipper 主機調試