「T2チップを備えない古いIntel MacをNerves化しよう」という構想の実現に邁進する駄文シリーズの第3弾です.前回までで,素のx86_64のbuildrootを構築してSSDにインストールし,Mac Pro (Mid 2010)で実行してみたところ,起動画面は出たのですが,ブートが途中で止まってしまう結果になりました.今回は,その対策を考えてみるという回です.
シリーズ
- Nerves化構想を思い立つ
- buildrootをビルドして起動する
- 仮説を立てる(本記事)
閑話休題
buildrootの問題は放置して,2023年のうちに購入していたものの諸問題があって今まで読めていなかった,牛尾剛さん著の「世界一流エンジニアの思考法」の冒頭から第1章の途中までを読みました.
小見出しをつまむと,「試行錯誤は悪である」「理解に時間をかける」「複雑な技術をコントロール」みたいな感じでした.
この部分を読むだけでも,示唆に富んでいて,読んだ甲斐がありました.
buildrootにおいて「理解に時間をかける」「複雑な技術をコントロール」そして仮説を立てる
さて,ここで,buildrootのことについて,いろいろ考えます.
まず幸いなのが,Linux自体は起動していて,ブートログを画面に出すことはできています.これもできていなかったら,本当に途方に暮れるところでした.
したがって,少なくともLinuxカーネルと,おそらくVGAの画面を出力に関係するデバイスドライバは,正常に動作しています.
しかし,問題なのは,起動シーケンスが早すぎて,ブートログがスクロールアウトして,読めないということでした.しかも,現状ではdmesg
コマンドを発行することもできないので,スクロールアウトしたブートログを読むことはできませんし,他のPCに転送することもできません.
こんな時,シリアル通信でログを取れているといいのになあと思いました.組込みシステムボードであれば,大抵はシリアル通信がついていて,PCで記録することができます.なので,組込みシステムボードを新規で設計するのであれば,まずシリアル通信を死守すべきと思います.FPGAボードであっても,シリアル通信の確立が最優先と思い知りました.
また,Arch Linuxや Ubuntu は Mac Pro (Mid 2010) で何の問題もなく起動できています.したがって,これらの dmesg
の出力するログを読めば,現状のLinux一式で,Mac Pro (Mid 2010) 向けにどんなデバイスドライバを必要としているかが明らかになることでしょう.
しかし,残念なことに,現状のArch Linuxのインストール状況では, dmesg
の出力結果を他のPCに転送することができていません.それをするには,USBメモリを使うか,SSH接続を確立するか,何かしないといけません.
しかも運の悪いことに,どういうわけか,USBメモリからの起動ができなくなりました.USBメモリを挿してオプションキーを押しながらの再起動をしても,起動可能なUSBメモリとして認識してくれません.何度上書きしても,ダメなのです.これについては,USBメモリが壊れたものとして,他のUSBメモリでやってみたら良いのかもしれません.
待てよ,Arch Linuxにこだわりすぎているのかもしれません.dmesg
のログを読むのが目的であれば,別にUbuntuでも良いのではないでしょうか.そうだ,ここで,Ubuntuに切り替えよう.
仮にUbuntuに切り替えてdmesg
を解析できたとします.依然として,buildrootのブートログを全て読めません.
一旦,まっさらから始めて,まずは画面表示に最低限必要なデバイスドライバのみを組み込んだbuildrootを構築して,ブートログとdmesg
のログ出力を照合しながら,進めたらどうだろうか?
うん,これでいけそうな気がします.
追記
この仮説は全面的に間違っていました.
buildrootを設定してみたら,すぐわかることでした.
つづく