faith's blog

気まぐれ日記

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でした。

 

* dummyのlinuxカーネルを渡す

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さんに期待します。