zImageとdevice treeをSDカードから読み込みたかった・・・
nvidiaのbootloaderを使うと、zImageとdevice treeがSDから読めないので、カーネル更新毎にeMMCをすり減らす、という現状を改善すべく、hackを試みるも惨敗しました、
おはようございます(AM 2:00から4時間ぐらいtryしててテンションがおかしくなってきました)
tryした内容をざっくりと書きます。
* flash.shにzImageと偽ってu-bootのバイナリを渡す
昨日知り合いと話していて、出てきたideaです。
flash.shには、zImageのパスを教えてあげると、それをeMMCに書き込んで、bootloaderから参照するような仕組みになっています。
これがzImageだよ〜と言って、u-bootを渡すと、bootloaderは騙されてu-bootを起動する筈、と。
結果は、NG。たぶん、u-bootのバイナリ自体は読み込んでくれたと思うんですが、u-bootは起動せず。単純に特定の領域に展開して、jumpという訳ではないんでしょう。
また、zImage生成時と同様に、u-bootをobjcopyに喰わせた結果を用いても同様にNGでした。
linuxカーネルを修正して、start_kernel辺りにu-bootのデータをメモリ上に展開して、そこにjumpするコードを実装すれば、u-bootが起動するんじゃないかと思ったんですが、結果は全く動かず。
* eMMCにu-bootを書き込む
u-bootをUSB経由でのonRAM実行しているのがまずいのかと疑って、flash.shを使ってeMMCにu-bootを書いてみたところ、u-bootは起動しますが、USB経由と同様にカーネルが正常に起動しませんでした。
やはり、nvidiaのローダで実行している何らかの処理がu-bootに入っていないか、u-bootの実装がバグってて、カーネルの起動を邪魔しているかのどちらかっぽいですね。
これ以上、blackboxなbootloaderをhackするのは私程度のスキルでは難しいですね・・・
予備ボードがあるので、1台はeMMCを生贄に捧げて、がりがり書き換えることにしようかなぁ。
u-bootにせよ、linux kernelのDRM対応にせよ、そのうちgitに上がるだろうから、それを待ちながら、何か策を思いついたら、悪あがきすることにします。
Stephen Warrenさんに期待します。