LoginSignup
4
5

More than 5 years have passed since last update.

Jetson TX1の簡易カーネル更新手法

Last updated at Posted at 2016-06-15

目的

HostPCでカーネルビルドするたびflash.shを走らせるのは
- 転送に時間が掛かる
- TX1側のファイルが全て初期化される(パッケージ等)
等の理由で、とても非効率に感じたので
もう少し楽にアップデートできないものかとスクリプトを組んでみた。

用意するもの

  • HostPC(カーネルビルド済み)
  • TX1(初回flashは実施したもの)
  • ネットワーク環境

やること

TX1側に以下のスクリプトを書くだけです。

update.sh
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側でスクリプト組んだ方が楽なのでは?」「シーッ!!」

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5