目的
HostPCでカーネルビルドするたびflash.sh
を走らせるのは
- 転送に時間が掛かる
- TX1側のファイルが全て初期化される(パッケージ等)
等の理由で、とても非効率に感じたので
もう少し楽にアップデートできないものかとスクリプトを組んでみた。
用意するもの
- HostPC(カーネルビルド済み)
- TX1(初回flashは実施したもの)
- ネットワーク環境
やること
TX1側に以下のスクリプトを書くだけです。
rsync -av host@xxx.xxx.xxx.xxx:<TEGRA_KERNEL_OUT>/arch/arm64/boot .
cp -f ./boot/Image /boot/
cp -f ./boot/zImage /boot/
rm /boot/*.dtb
cp ./boot/dts/*.dtb /boot/
rm -rf ./boot
rsync -av host@xxx.xxx.xxx.xxx:<TEGRA_MODULES_OUT>/lib .[
#初期モジュールフォルダ以外を削除する
ls -d /lib/modules/* | grep -v <default_module_dir> | xargs rm -rf
cp -rf ./lib /
rm -rf ./lib
あとは、コイツをsudoで実行して再起動すれば更新完了する、はず。
<追記>
/lib/modules/
の中身は、必要なもの以外は消さなければならない模様
多分、gitのtagか何かでベタベタと文字列が付いて(ex: R23.2ならmodules/3.10.67-g458d45c
という感じ)
これが新しいものが優先して読み込まれるのか何なのか、複数あると想定外の挙動になる事があるので
「Sample rootfs」に入っているものと「新しくBuildしたもの」の2個だけが残るようにする。
(Host側でも、INSTALL_MOD_PATH
に指定するディレクトリはmake前に掃除しておく)
めんどい
<追記2>
本記事は、eMMCブートを前提に記載しています。
その他のブート方式については未検証です。
<追記3>
lib/modules/
の中身を初期状態に戻すコマンドを追加
(git使い出すと、自動化しないとやってらんないくらい面倒になってきたので)
誤動作しても当然責任は負いません
雑記
シンボリックリンクが貼られているので、rsync
ではなくscp
コマンドで転送すると大変な事になりました
パスワード入力等は自動化してません、面倒なので
デバイスツリーについては、まだ良く調べてないので念のため既存のファイルを全消去しています
「Host側でスクリプト組んだ方が楽なのでは?」「シーッ!!」