目次: Linux
以前(2022年2月2日の日記参照)、ARMやAArch64系のQEMUで動作確認するためのイメージとしてRaspberry Pi OS Liteを使いました。正しい方法ではありませんがとりあえず動作するので便利でした。
しかしRaspberry Pi OSの実装が変わって、デフォルトユーザー(ユーザー名: pi、パスワード: raspberry)がなくなってしまいました(参考: Changing the default login user from pi - Raspberry Pi Forums)。QEMUで起動してもログインできなくて困ってしまいました。
素直に別のrootfs(buildrootなど)を使うのも一つの方法ですが、今回はRaspberry Pi OS Liteのイメージを書き換えて無理やりパスワードを設定する方法をご紹介したいと思います。
ざっくりいうとこんな操作をします。この操作はRaspberry Pi OS Liteだけでなく他のOSイメージにも応用できるので知っておくと割と便利です。
OSイメージをダウンロードします。公式サイト(Operating system images - Raspberry Pi)からダウンロードできます。パーティションの開始位置を知るためにfdiskコマンドを使います。
$ xz -d 2025-05-13-raspios-bookworm-arm64-lite.img.xz $ /sbin/fdisk 2025-05-13-raspios-bookworm-arm64-lite.img Welcome to fdisk (util-linux 2.40.4). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): p Disk 2025-05-13-raspios-bookworm-arm64-lite.img: 2.57 GiB, 2759852032 bytes, 5390336 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xd9c86127 Device Boot Start End Sectors Size Id Type 2025-05-13-raspios-bookworm-arm64-lite.img1 16384 1064959 1048576 512M c W95 FAT32 (LBA) 2025-05-13-raspios-bookworm-arm64-lite.img2 1064960 5390335 4325376 2.1G 83 Linux
開始位置(セクタ単位)はStartの列に書いてあります。1つ目のパーティションはブート用なので放っておいて、2つ目のパーティションをloopbackファイルシステムでマウントします。オプションoffsetにはパーティションの開始位置(バイト単位)を指定します。開始位置(セクタ単位) * 512 = 1064960 * 512 = 545259520を渡してください。
$ mkdir mntdir $ sudo mount -o loop,offset=545259520 2025-05-13-raspios-bookworm-arm64-lite.img ./mntdir/ $ ls mntdir/ bin boot dev etc home lib lost+found media mnt opt proc root run sbin srv sys tmp usr var
これでRaspberry Pi用ディスクイメージのマウントと読み書きができるようになりました。
まだchrootはできません、もう1つ準備が必要です。x86_64マシン上でAArch64バイナリを実行できるようにqemuをインストールし、イメージ内にコピーします。
$ sudo apt-get install qemu-user-static $ sudo cp /usr/bin/qemu-aarch64-static ./mntdir/bin/
これでchrootの準備ができました。
ルートディレクトリにchrootすると、Lite OS上で操作しているときとほぼ同様にイメージを変更することができます。どうやらユーザーpiが元々存在しているようなので、passwdコマンドでpiユーザーのパスワードを好きなものに変えましょう。新規にユーザーを追加しても良いと思います。
$ sudo chroot ./mntdir/ # passwd pi New password: pi Retype new password: pi passwd: password updated successfully $ sudo umount ./mntdir/
このとき実行しているのは全てAArch64用のバイナリです。コンピュータがわかる人ほど不思議に思うんじゃないでしょうか。x86_64上で他アーキテクチャのバイナリを実行する仕組みは、昔に簡単な紹介(2024年8月6日の日記参照)をしていますので、興味があればご覧ください。
QEMUで動作確認しましょう。linuxのビルド方法は以前の日記(2022年2月2日の日記参照)などをご参照ください。
$ qemu-system-aarch64 \ -machine virt \ -cpu cortex-a53 -smp 1 \ \ -m 4G \ -serial stdio \ -kernel arch/arm64/boot/Image \ -append "rw root=/dev/vda2" \ -drive file=2025-05-13-raspios-bookworm-arm64-lite.img,format=raw,if=virtio [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034] [ 0.000000] Linux version 6.15.0-next-20250605-00001-g34bdb989e513 (katsuhiro@blackbird) (aarch64-unknown-linux-gnu-gcc (crosstool-NG 1.24.0.501_5bf4485) 11.2.0, GNU ld (crosstool-NG 1.24.0.501_5bf4485) 2.37) #94 SMP PREEMPT Tue Jun 10 01:53:41 JST 2025 [ 0.000000] random: crng init done [ 0.000000] Machine model: linux,dummy-virt [ 0.000000] efi: UEFI not found. [ 0.000000] OF: reserved mem: Reserved memory: No reserved-memory node in the DT ... [ OK ] Started NetworkManager-dis…Manager Script Dispatcher Service. [ OK ] Finished NetworkManager-wa…[0m - Network Manager Wait Online. [ OK ] Reached target network-online.target - Network is Online. Starting rpc-statd-notify.…- Notify NFS peers of a restart... Debian GNU/Linux 12 raspberrypi ttyAMA0 My IP address is 10.0.2.15 fec0::a5fc:71ea:fb56:5aee raspberrypi login: pi Password: pi Linux raspberrypi 6.15.0-next-20250605-00001-g34bdb989e513 #94 SMP PREEMPT Tue Jun 10 01:53:41 JST 2025 aarch64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. pi@raspberrypi:~$
ログインできました。良かった。
目次: Linux
WatchdogもしくはWatchdog Timerなどと呼ばれますが、システムがハングアップしたときに強制的に再起動する仕組みがあります(SW実装とHW実装があります)。Linuxも対応していますので、試しに使ってみます。
今回はROCK 3Cを使って実験したいと思います。ROCK 3Cの/dev以下を見ると/dev/watchdog0がありますから、HW Watchdogが存在していることがわかります。
$ ls /dev/watchdog* /dev/watchdog /dev/watchdog0
デバイスツリーのwatchdogのcompatibleを確認すると"snps,dw-wdt"でした。つまりsnps(= Synopsys社)のWatchdog IPを搭載しています。
# cat /proc/device-tree/watchdog@fe600000/compatible snps,dw-wdt
頭についているdw-はDesignWareの略でしょう。DesignWareはSynopsysが販売/提供しているIPのブランド名です。
準備は簡単でaptなどでwatchdogパッケージをインストールするだけです。環境はDebian GNU/Linux 11 (bullseye)です。
# apt-get install watchdog
インストールしたら設定ファイル/etc/watchdog.confの最後の行にwatchdog-device設定を付け加えて、restartします。
# Check for a running process/daemon by its PID file. For example,
# check if rsyslogd is still running by enabling the following line:
#pidfile = /var/run/rsyslogd.pid
watchdog-device = /dev/watchdog0
# apt-get restart watchdog
動作確認として、ソフトウェアの動作を完全に停止させて、Watchdogがハードウェア的にリセットを掛けてくれる様子を見ます。ソフトウェアを完全に止める簡単な方法は、Sysrqにcを書き込んでわざとLinuxカーネルをクラッシュさせることでしょう。他の方法でも構いません。
echo c > /proc/sysrq-trigger (89秒後に再起動されるはず)
再起動されない場合は設定ファイルの書き方が間違っていると思われます。ありがちな間違いとしては、
もし変な設定になっていたときはsystemctl status watchdogを見ると、エラーが出ているはずです。
#### 設定名を間違えたとき(alive=にデバイスファイル名が出ない) rock-3c watchdog[1398]: alive=[none] heartbeat=[none] to=root no_act=no force=no #### デバイスファイル名を間違えたとき rock-3c watchdog[1376]: cannot open /dev/watchdogeee (errno = 2 = 'No such file or directory')
正しく設定できているとalive=の部分にデバイスファイル名が出ます。
rock-3c watchdog[1419]: alive=/dev/watchdog0 heartbeat=[none] to=root no_act=no force=no rock-3c watchdog[1419]: watchdog now set to 89 seconds rock-3c watchdog[1419]: hardware watchdog identity: Synopsys DesignWare Watchdog
どのWatchdogデバイスでも必ずそうなるのかはわからないですが、私の環境だと再起動までの秒数と、ハードウェア名(Synopsys DesignWare Watchdog)も出ていました。
Newメガネを注文しました。今までどんなメガネかけてたっけ?と気になったので日記から掘り起こしてみました。古いものはいつ買ったのかすら怪しく、詳細も書き残していませんでした。メガネに関心がないことが良くわかりますね……。
フォーナインズ(999.9)の前にもメガネは持っていたのですが、記録がなくて何もわかりません。パリミキに行って購入記録を聞いてみたら上記のような感じでした。20年前でも残ってるんですね。
目次: 射的
JTSA Unlimitedの大会に参加しました。
「木」ステージが大失敗、「水」もダメダメで、高速ステージの「土」もいまいち振るわず、結果は75.69秒(前回は76.75秒)でした(総合82位/113人、LM 12位/21人)。70秒台前半くらいを出したかったけど無念ですね。
練習会の記録を見ると自己ベストは65.81秒ですが、その後はほとんど60秒台が出ないところをみると、75〜70秒くらいが実力と思われます。最近はあまり上達している感じがしません。そろそろ週1練習の限界かもしれませんが、今後もゆるゆると続けていきます。
金曜日、メガネの鼻当てが曲がってんなー?と思って、元の位置に戻そうと指で押したらパキっと音がして折れました。なにーー!?メガネの固定が甘くなって激しい動き、例えば走ったり階段の上り下りをすると、メガネが上下に揺れて視界がグワングワンします、目が回ります……。
直近で一番困ったのは、明日のシューティング大会JTSA Unlimitedです。サブのメガネもないし、メガネ外したら的が見えないですから、壊れたメガネのまま参加するしかありません。不幸中の幸いか、JTSA Unlimitedはアクションなし=その場から動かないで撃つタイプなのでメガネが揺れてどうこうなることはありません。
今日のシューティング練習会で試した限りでも、視界に大きな影響はなかったですし壊れたメガネで参加してきます。
< | 2025 | > | ||||
<< | < | 06 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | - | - | - | - | - |
合計:
本日: