honeylab's blog

各種ハードウェアの改造、主にファミコンミニなどをやってます(ました)

ATOM Cam2でSDカード上から自前Linux Kernelを動かす

honeylab.hatenablog.jp

 

↑のようなものを作るにあたって、今まではなぜか存在しているいわゆる「Test.tar」機能を利用し、起動中のスクリプトに割り込む形で各種機能を実現していました。

しかし、このままでは

・Test.tar昨日はrootfs内のスクリプトで実行されているため、メーカーがこの機能を外すと起動できなくなる

・iCamera_appなどを使わず、自前の録画アプリなどを動かそうとすると、その前にウォッチドッグが有効化されてしまい、定期的に犬に餌を与えなければならない。それは結構めんどくさい

など、若干の問題があります。

また、ハードウェアや周辺機器を最大に生かすためにはカーネルの再構築がどうしても最終目標として挙がってきます。

かろうじて今まではinsmod可能なkoモジュールの導入に成功していましたが、カーネルを実際にコンパイルし、flashに書き込んでみると途中で止まってしまったりしてうまくいきませんでしたが、あれこれオプションをいじっていることで、どうにか単体起動な独自カーネルuImageが完成しました。

しかし、これを実際に動かすためにユーザーがFlashに書き込むというのは若干のリスクがあり、また、それを動かすためのdemo.binを生成するというのも少々めんどくさいという問題がありました。

で、今までu-bootのメッセージに出ていたこのfactory_t31_ZMC6tiIDQNという謎ファイルを探している表示について改めて調べてみることにしました。

f:id:honeylab:20211008132622p:plain

すると、発売直後にアトムテックにオネダリしてもらったu-bootのソースコードの中に見つけました(まぁ前から見つけてはいたんだけど)

github.com

動作をよく見てみると、どうやらSDカード上にこのファイルがあると、メモリ上に全部ロードして、ヘッダチェック後、bootmコマンドで起動してくれそうな感じでした。

キタコレ!

f:id:honeylab:20211008133036p:plain

しかし、これではコマンドラインが固定されてしまっています。
おそらくrescure mode的な使用が想定されているのでしょう。

また、出荷時にu-bootのdelayが0に指定されているため、手動でu-bootの環境を変えるのもめんどくさいです。

そこで、カーネルコンパイルオプションとして、本来普通に起動するときに使われているパラメーターを埋め込み、さらに、起動時にu-bootから渡されるこのcmdlineを無視するように設定します(ふつうはつかわないきのうです)

f:id:honeylab:20211008133258p:plain

こうすると、内蔵Flashのルートシステムを使い、自前のカーネルで起動させられそうです。

出来上がったuImageを「factory_t31_ZMC6tiIDQN」の名前でSDカードに配置してATOMCamに挿入して電源を入れると…

 

見事にSDカードからカーネルを読み込んで起動してくれました!

Flashの書き換えも何も必要ではありません。ファイルを置くだけ。

Test.tarと違ってスクリプトへの割り込みやファイルシステムの縛りもない

自由なLinux環境が手に入りました。

また、これはuboot環境での仕様なので、rootfsやkernelのOTA更新によって改変される可能性がかなり低いです。素晴らしい。

 

とりあえずusb-hdmiを使ってHDMIディスプレイをつないで遊んでみる

ローカルの画像や動画が表示できるので、もしかしたらカメラの設置とかそういうのにも使えるんじゃね??とか思ってますが、もしかするとパフォーマンスが足りないかもね。

 

まぁ、こんな感じで割と簡単にLinuxを起動できることが確認できました。

いまはbuildrootでrootfsを作っていますが、普通にdebianとかも入れられる気がします。
ATOMCam2の暗視性性能はかなりお墨付きで、天文観察愛好家の方々がいろいろ試行錯誤して使っているのが観察されています。
このようなガチ工夫によって、何らかの新しい使い方が発見できないか、今後もいろいろ試していきますので、何かそういったことがありましたら是非教えてください。