前回までの話
OSD335Xをカスタム基板でU-bootを動かすまで(メモ)
https://qiita.com/nonNoise/items/ef6702fd666421bd5688
今回の話
U-Bootの仕組みが少し見えてきたので、その話を。
前回の話に出た重要なコマンド
U-Bootにパッチを充てる
wget -c https://rcn-ee.com/repos/git/u-boot-patches/v2018.01/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
wget -c https://rcn-ee.com/repos/git/u-boot-patches/v2018.01/0002-U-Boot-BeagleBone-Cape-Manager.patch
wget -c https://raw.githubusercontent.com/RobertCNelson/Bootloader-Builder/master/patches/v2018.03-rc1/0002-NFM-Production-eeprom-assume-device-is-BeagleBone-Bl.patch
patch -p1 < 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
patch -p1 < 0002-U-Boot-BeagleBone-Cape-Manager.patch
patch -p1 < 0002-NFM-Production-eeprom-assume-device-is-BeagleBone-Bl.patch
U-Bootのパッチ
U-Bootのパッチについて調べた。
用はU-Bootをカスタムしてオリジナルボード用にしたいんだ。
まず、Pach がそもそも何をしているかを調べた。
何かのコンパイルした内容かなと思ってソースを探していたが見当たらない。
コンパイル前にパッチ当ててるし・・・もしかして・・・
patchファイルは普通にgitのdiff情報が載ってるファイルだった。
なるほど、パッチコマンドがあったから、何か仕組みがあると思ったら、こういう仕組みか。
そうなると、パッチの差分を把握して、U-Boot本体のソースを書き換えて、差分をパッチにすると自作パッチが出来上がるのかな。
なるほどね、知らなかった。
各パッチについて
gitのdiff情報を見ていくと、どのファイルを弄ったか一目でわかるの便利
◎ 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
◎ 0002-U-Boot-BeagleBone-Cape-Manager.patch
◎ 0002-NFM-Production-eeprom-assume-device-is-BeagleBone-Bl.patch
パッチの予想
Diffを見てると、同じファイルを別々のパッチで処理してるのがいるので、順番間違えたら衝突するんじゃないかって思った。
とりあえず、ひとつづつ
◎ 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
最初に当てるパッチだね。
am335x_pocketbeagle_defconfigが一番多く修正されてる。
ここは、U-Boot/configsのブロックで、どの機能をy/nするかを設定しているそうだ。
◎ 0002-U-Boot-BeagleBone-Cape-Manager.patch
次に当てるパッチ。
board/ti/am335x/board.c が最も変更されている。
ここはボードについてのパッチを充てているような気がしている。
特に、BeagleBone-Capeという、BeagleBoneの中では少し新しめのボード
https://github.com/u-boot/u-boot/tree/master/board/ti/am335x
◎ 0002-NFM-Production-eeprom-assume-device-is-BeagleBone-Bl.patch
最後に当ててるパッチ。
board/ti/common/board_detect.c が最も変更されている。
commonなので、ボード特有のインターフェース(外部拡張機能)に対して修正しているような気がする。
https://github.com/u-boot/u-boot/tree/master/board/ti/common
で、結局どこを弄ればいいの?
わからない。結局、基礎のU-bootのソースを見て、次にパッチ3種類の差分を把握して、自分がやりたい修正パッチを当てるという流れかな。
Diffなので、修正(削除)した個所はマイナスで表示されるので、とりあえず3種類のパッチを当てて、そのうえでソースを弄ってDiffを残しておくと、再現性高いU-Bootパッチが出来上がるんじゃないかな。
気持ち、最新のU-boot版でパッチを作り直したいが、そういうのも差分理解、ソース理解があっての技なのだろう。