從零購置一台 Voron 打印機 (二) Klipper 主機調試

從零購置一台 Voron 打印機 (二) Klipper 主機調試

還記得上次説到 Voron 采購單中的樹莓派嗎, 現在樹莓派這麽貴
而且個人感覺用它性能浪費, 還不如找點其他的方案

所以我的目光來到了上次被我拆掉的那個 先機隨身4G上網卡
因爲我給它刷了 Debian, 所以可以做大部分普通派能做的事情, 乃至我現在腦洞大開想把它搞成 Voron 的控制端主機

第一個坑 - Type C 不輸出 5V

不得不説, 這個地方的問題我排查一個多小時

Monster 8 控制主機板的 Type-C 後邊有一個 USB-PWR 的跳綫
img

一開始以爲它是會輸出 5V 電的, 因爲我把跳綫撥到 ON 之後確實會輸出 5V 電壓,
但是隨便插了一個設備上去之後, 設備完全沒有反應, 像是完全沒上電的樣子
然後用萬用表一量, 好家夥插上設備之後只有 1V 了

遂開始找原理圖, 發現這個跳綫前端連著 VBUS, 但是貌似僅用作輸入
但是正好旁邊有一個 USB-A 母口, 它也有一個跳綫, 那我就不客氣地把電借過來用了, 一根飛綫!
img

因爲 USB-PWR 跳綫的左邊空接, 所以正好借過來的電也不會倒灌,
而是直接流向 Type-C 輸出 這簡直太合適了 (不
img

第二個坑 - USB 工作模式

這個問題處理起來比較簡單, 因爲直接就有現成的答案
因爲 OpenStick 的 Debian 固件默認啓動時會將 USB 配置爲從模式, 所以無法直接和 Monster 8 通訊

所以在參考 切換 USB 工作模式 之後,
使用以下指令就可以達到想要的效果了.

1
$ echo host > /sys/kernel/debug/usb/ci_hdrc.0/role

可以看到, 出現了一個 STMicroelectronics Virtual COM Port 的設備, 它就是 Voron 控制板啦 φ(゜▽゜*)♪
img

因爲 OpenStick 沒有 USB-ID 脚, 只能這樣手動切換 USB 模式來插入外部設備,
或者以後可以把這句指令寫入到啓動脚本或者 SystemCtl 服務來實現開機自動切換, 執行完指令之後所有從設備功能將失效

第三個坑 - 安裝 Klipper 需要過多空間

這個坑是我沒想到的, 竟然是因爲安裝 Klipper 的時候依賴了整個源代碼編譯環境,
不僅有 arm-gcc / python 2 和 3, 甚至還有完全用不到的 avr-gcc. 這可是 STM32 呀..

整個安裝過程需要至少 3GB 的空間, 當時我就傻眼了, 怎麽會事呢 (?
OpenStick 一般是被嚴重閹割過, 只有 4GB 的eNAND. 而且裝完系統之後還會少一些——

所以不出意外, 全給我吃光了
img

所以現在如果還想繼續用 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), 這樣會導致連帶差不多整個系統都給揚了。
img

所以我們只需要把 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
2
$ sudo apt install locales
$ sudo dpkg-reconfigure locales

第六個坑 - USB Modem (CDC ACM) 支援

這個坑目前來說可以説是最大的了, 解決這問題需要重新編譯内核。
因爲 OpenStick 的内核默認沒有啓用 USB Modem (CDC ACM) 功能, 所以在插入串口設備的時候沒有 /dev/ttyACM0,
會導致一系列問題, 比如 kiauh 等脚本無法識別設備進而導致上載固件失敗, klipper 沒辦法與 Monster 8 通訊。等等

編譯和準備工作

所以我們需要準備一個 Debian 9 / Debian 10 的系統 (Ubuntu 也行),
先把 OpenStick 的内核克隆下來。

1
2
$ git clone https://github.com/OpenStick/linux --depth 1
$ cd linux

然後配置内核編譯選項

1
2
3
4
5
6
7
8
9
# 安裝 gcc9
$ sudo apt install gcc-9-aarch64-linux-gnu

# 使用交叉編譯
$ export ARCH=arm64
$ export CROSS_COMPILE=aarch64-linux-gnu-

# 構建 menuconfig
$ make menuconfig

選擇右下角的 Load,
輸入 arch/arm64/configs/msm8916_defconfig, 載入預設 Ok 確認。
img

然後依次選擇

  • Device Drivers
  • USB support
  • USB Modem (CDC ACM) support

按下 y 啓用功能 (標記變成 <*>), 然後按下若干次 esc 退出并保存到 .config
img

最後開始編譯, 應該不會有問題發生。

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
img

這個 ramdisk.gz 就是 initrd.img 了
img

進入到 OpenStick 終端, 使用 lsblk -f 指令找到 rootfs 所在分區的 UUID 並記下。
img

重命名為 initrd.img 丟到 debian 去, 使用 mkbootimg 合成 boot.img 檔案
需要注意的是在以下命令中 –cmdline 參數中的 root=UUID=xxxx, 需要將 xxxx 換成你自己的 rootfs 分區的 UUID。

1
2
3
4
5
6
7
8
9
10
$ mkbootimg                   \
--base 0x80000000 \
--kernel_offset 0x00080000 \
--ramdisk_offset 0x02000000 \
--tags_offset 0x01e00000 \
--pagesize 2048 \
--second_offset 0x00f00000 \
--ramdisk initrd.img \
--cmdline "console=ttyMSM0,115200 root=UUID=xxxx rootwait rootfstype=ext4 consoleblank=0 loglevel=1 cgroup_enable=memory swapaccount=1 rw" \
--kernel kernel-dtb -o boot.img

最後, 就能得到帶有 USB Modem (CDC ACM) 功能的内核了,
使用 fastboot flash boot boot.img 刷新分區, 重啓即可。
img

Klipper 識別到設備, 開始正常工作
img

未完待續

從零購置一台 Voron 打印機 (二) Klipper 主機調試

https://blog.awa.moe/2022/08/24/voron/openstick-with-voron/

Author

TheSnowfield

Posted on

2022-08-24

Updated on

2024-03-17

Licensed under