はじめに
突如 CB1 の sd ガードのデータが破損して起動できなくなった.
また過去には BTT から提供されている OS イメージがプリント中にフリーズする事象も報告されており,実際に私も CB1 導入当初は稀にフリーズする事象に遭遇していた.
せっかくなので最新の Armbian をベースに CB1 上で Klipper をビルドし直す.
Armbianインストール
Armbian のページから最新のイメージを確認すると Armbian 26.2.1 Minimal (Feb 4,2026) で,Debian13 ベースの OS になっている.ちなみにもともと使っていた BTT 純正イメージは Debian12(Bookwarm) がベース,最近のアップデートV3.1.0では Debian13(Trixie) がベースになっているらしい.

ここでイメージをダウンロードして自分で dd コマンドなどで sd カードに焼くか,Armbian 公式ツール ArmbianImager を使うか,お好みでどうぞ.初期設定などの一部も Imager で設定できるので,ArmbianImager が使えるのであれば使ったほうが簡単.画面にしたがって設定するだけなので細かい説明は省略.ただし,まだ Wayland との相性は最悪で,ウィンドウ内のフラッシュというか描画ラグがひどく使い物にならない可能性がある点に注意...

Armbian初期設定
何はともあれパッケージの最新化をする.ユーザ名は user,ホスト名は cb1 と仮称する.
~$ ssh user@xxx.xxx.xxx.xxx
user@cb1:~$ sudo apt update
user@cb1:~$ sudo apt upgrade
user@cb1:~$ sudo apt install vim git dnsutilsOS インストール時に locale の設定は以下の設定ファイルにも反映されている.この設定のせいで armbian-config の locale の設定が反映されないので当該箇所を削除する.
user@cb1:~$ vim .bashrc
user@cb1:~$ vim .xsessionrc続いて IP アドレスを設定する.Armbian では NetPlan という仕組みでアドレスの管理がされている.わざわざラッパーを作らなくても,素の systemd-networkd で十分だったような.アドレス,SSID,パスワードは自身の環境に合わせて設定すること.
user@cb1:~$ cat <<EOF | sudo tee /etc/netplan/30-wifi.yaml
network:
wifis:
${SSID}:
dhcp4: false
addresses:
- xxx.xxx.xxx.xxx/xx
routes:
- to: default
via: xxx.xxx.xxx.xxx
nameservers:
addresses:
- xxx.xxx.xxx.xxx
dhcp6: true
access-points:
"${SSID}":
password: "${PASSWD}$"
EOF
user@cb1:~$ sudo chmod 600 /etc/netplan/30-wifi.yaml
user@cb1:~$ sudo netplan try
user@cb1:~$ sudo netplan applyKlipper for M5P MCU
kiauh 使わなくても直接 make することもできるけれど,mainsail とか他のコンポーネントとセットで kiauh で管理させたいので,メインの klipper は kiauh を使ってインストールすることにする.
user@cb1:~$ cd ~ && git clone https://github.com/dw-0/kiauh.git
user@cb1:~$ ./kiauh/kiauh.sh1) Install → 1) Klipper → 1) Build



※左の画像は Klipper/Moonraker/Mainsail をインストールしちゃったあとのキャプチャ

Klipper ビルド設定は以下の通り.
- [*] Enable extra low-level configuration options
- Micro-controller Architecture = STMicroelectronics STM32
- Prosessor model = TSM32G0B1
- Bootloader offset = 8KiB bootloader
- Clock Reference = 8 MHz crystal
- Communication interface = USB (on PA11/PA12)
- [*] Optimize stepper code for ‘step on both edges’
Klipper for Linux MCU
一方で kiauh だと linux mcu のインストールが出来ない.仕方ないので kiauh を使わないでビルドとインストールを行う.
user@cb1:~$ cd klipper
user@cb1:~/klipper$ make clean
user@cb1:~/klipper$ make menuconfig
Klipperビルド設定は以下の通り.
- [ ] Enable extra low-level configuration options
- Micro-controller Architecture = Linux process
make flash でバイナリをインストールしたら systemd のデーモンを設定.OS 起動時に linux mcu も自動的に起動するようにする.
user@cb1:~/klipper$ make flash
user@cb1:~/klipper$ sudo cp ./scripts/klipper-mcu.service /etc/systemd/system/
user@cb1:~/klipper$ sudo systemctl daemon-reload
user@cb1:~/klipper$ sudo systemctl enable klipper-mcu.service
user@cb1:~/klipper$ sudo systemctl start klipper-mcu.service
user@cb1:~/klipper$ sudo setcap cap_sys_nice+ep /usr/local/bin/klipper_mcu
user@cb1:~/klipper$ echo "kernel.sched_rt_runtime_us = -1" | sudo tee /etc/sysctl.d/99-klipper-host-mcu.confこの設定をしておくことで,設定ファイルのサンプルにあるような CB1 の GPIO を指定した設定が可能になる.
[mcu CB1]
serial: /tmp/klipper_host_mcu
[heater_fan SoC_fan]
pin: CB1: gpio79Klipper 設定
Klipper の設定自体はこれまでと変わりないので,制御基板換装シリーズを参照.
設定自動バックアップ
mainsail 上で Klipper の設定ファイルを変更する際,直前の設定ファイルを残しておきたい.
CB1 公式 OS ではどういう仕組みか自動バックアップ機能が実装されている.以前調べた気がするものの,OS が吹き飛んでしまって改めて調べるのも面倒.inotify を使えば SAVE-CONFIG 時のイベントは簡単にキャッチできるので,SAVE-CONFIG 時と同じ内容のファイルをバックアップとして取っておくよう実装しておく.
ただし,ここで実装するのは SAVE-CONFIG 時に編集前のファイルをバックアップするのではない点に注意.${UserName} は自分の環境に合わせて設定すること.
user@cb1:~$ sudo apt install -y inotify-tools
user@cb1:~$ mkdir ~/printer_data/config/backups
user@cb1:~$ mkdir ~/printer_data/scripts
user@cb1:~$ cat <<'EOF' > ~/printer_data/scripts/klipper-config-backup.sh
#!/bin/bash
WATCH_DIR="/home/${UserName}/printer_data/config"
BACKUP_DIR="$WATCH_DIR/backups"
mkdir -p "$BACKUP_DIR"
inotifywait -m -r -e close_write,moved_to --format '%w%f' "$WATCH_DIR" |
while read -r file; do
[[ "$file" == $BACKUP_DIR/* ]] && continue
[[ "$file" != *.cfg ]] && continue
[[ ! -f "$file" ]] && continue
base=$(basename "$file")
latest="$BACKUP_DIR/.${base}.latest"
if [[ -e "$latest" ]] && cmp -s "$file" "$latest"; then
continue
fi
ts=$(date +%Y%m%d-%H%M%S)
backup="${base}.${ts}.bak"
cp "$file" "$BACKUP_DIR/$backup"
ln -sf "$backup" "$latest"
echo "[$(date '+%F %T')] Backed up: $base -> $backup"
# find "$BACKUP_DIR" -type f -name '*.bak' -mtime +30 -delete
done
EOF
user@cb1:~$ chmod 755 ~/printer_data/scripts/klipper-config-backup.sh
user@cb1:~$ cat <<EOF | sudo tee /etc/systemd/system/klipper-config-backup.service
[Unit]
Description=Auto backup Klipper config files on save
After=klipper.service
[Service]
Type=simple
User=${UserName}
ExecStart=/home/${UserName}/printer_data/scripts/klipper-config-backup.sh
Restart=always
RestartSec=2
[Install]
WantedBy=multi-user.target
EOF
user@cb1:~$ sudo systemctl daemon-reload
user@cb1:~$ sudo systemctl enable klipper-config-backup.serviceおわりに
ペンプロッタでほぼ同じことをしていたので,やることは結構簡単だね.
多くの人が BTT 純正のビルド済み OS イメージを使っているのではと思われるが,Armbian をベースに自分でビルドする参考としてどうぞ.


コメント