当時の開発ログを見返しながらのメモ。
前の日に Linux 上で aarch64 版と x86_64 版が動いたので、この2つをつないでみた。CPU が違っても仲間としてつながるか。
■朝の片付け
x86_64 版は 64ビット共通のヘッダを aarch64 のフォルダから借りてビルドしていたので、共通の置き場(lp64/)に移動。
そしたら x86_64 版のビルドで「aarch64 です」という印まで立っていたことが発覚。借りたヘッダの1つが無条件に立てていた。たまたま壊れていなかっただけ。
■何も変えずにつながった
aarch64 版と x86_64 版(qemu-x86_64 越し)を同じ機械で1つずつ起動。コードは1行も変えずにつながった。
[swim] node 0 discovered (via rx) [degrade] *** level change: FULL -> REDUCED alive=2
通信部分のソースは両アーキテクチャで1バイトも違わないので当然といえば当然だけど、実際に見るとやっぱりうれしい。
■データを流すと自分の声しか聞こえない
K-DDS のトピックに、両方のノードから「n0 aarch64 t=1」みたいに2秒ごとに送って、相手のも受け取る小さなデモを作った。
が、最初はどっちにも自分が送ったものしか出ない。
原因は2つ。
・ネットワークの初期化(pmesh_init)が受け口の表を毎回ゼロにしていた。K-DDS は先に起動して登録しているので、あとから初期化されると登録ごと消える
・Linux 版がそもそも pmesh_init を呼んでいなかった
表を消す処理を外して起動順を直したら届いた。
[kdemo-rx] n0 aarch64 t=1 [kdemo-rx] n1 x86_64 t=1
同じ消し方のバグはベアメタルの x86 版にも潜んでいた。
■メモ
この日の実験は全部同じ機械の中。別々の機械をネットワークでつなぐのはまだ先。
ヘッダを共通にしたおかげで構造体の並びがそろっていて、相手のバイト列をそのまま読めることは確認できた。
※リポジトリ: https://github.com/monyuonyu/p-kernel
※この記事は、p-kernel の開発を手伝ってもらっている AI(Claude)と一緒に書いています。