カーネルイメージを変更する

概要

カーネルイメージは nvidia-l4t-bootloader のdebパッケージで配布される bl_update_payload の中に含まれています。 そのため、カーネルイメージは通常はこのdebパッケージによって更新されます 1 が、独自の修正を加えたい場合は、以下の手順で更新作業を行う必要があります。

1

nvidia-l4t-bootloaderのpostinstスクリプト https://forums.developer.nvidia.com/t/unable-to-update-kernel-image-with-nv-update-engine/163726

事前準備

BUP(Bootloader Update Payload)の生成に必要になりますので、 OSを新規インストールする に沿ってOSイメージを用意してください。 必要となるのは ./build_l4t_bup.sh だけですので、ここではEDGEPLANT T1への書込みを行う必要はありません。

手順

  1. カーネルをカスタマイズしてビルドします。 手順については ソースコードからカーネルをビルドする を参照してください。

  2. カーネルをカスタマイズしてビルドしたイメージをもとに、BUPを作成します。 以下は、EDGEPLANT T1用にBUPを作成する場合のコマンドです。

    $ cp <tegra_kernel_out>/arch/arm64/boot/Image <install_work_dir>/Linux_for_Tegra/kernel/Image
    $ cd <install_work_dir>/Linux_for_Tegra
    $ sudo FAB=300 BOARDID=3489 FUSELEVEL=fuselevel_production ./build_l4t_bup.sh --clean-up jb01-jasmine mmcblk0p1
    $ sudo FAB=300 BOARDID=3489 FUSELEVEL=fuselevel_production ./build_l4t_bup.sh --multi-spec jb01-jasmine mmcblk0p1
    
    • <tegra_kernel_out>: カーネルビルドの成果物の生成先のディレクトリ

    • <install_work_dir>: インストール用のイメージを展開したディレクトリ

  3. Linux_for_Tegra/bootloader/payloads_t18x/bl_update_payload に作成されたBUPをコピーし、所定のフォルダーに格納します。

    $ sudo cp bl_update_payload /opt/ota_package/
    
  4. アップデートを実施します。

    # Enabling A/B redundancy
    $ sudo /usr/sbin/nv_update_engine --enable-ab
    Nvidia A/B-Redundancy Update tool Version 1.2
    enabling A/B redundancy
    A/B Redundancy has been enabled.
    
    # Installation
    $ sudo /usr/sbin/nv_update_engine --install no-reboot
    Nvidia A/B-Redundancy Update tool Version 1.2
    current slot 0
    Start updating slot 1
    Tegra User Block Device: /dev/disk/by-partlabel
    Tegra Boot Block Device: /dev/mmcblk0boot0
    HEADER: MAGIC NVIDIA__BLOB__V2
    HEX_VALUE 131072
    BLOB_SIZE 39628682
    HEADER_SIZE 48
    NUMBER_OF_ELEMENTS 17
    HEADER_TYPE 0
    UNCOMP_SIZE 39628682
    MB1_RATCHET_LV 0
    MTS_RATCHET_LV 0
    ROLLBACK_FUSE_LV 0
    config COMPATIBLE_SPEC not found in /etc/nv_boot_control.conf
    Device TN Spec: 3489-300-0888-K.0-1-0-jb01-jasmine-mmcblk0p1
    config COMPATIBLE_SPEC not found in /etc/nv_boot_control.conf
    Device TN Spec: 3489-300-0888-K.0-1-0-jb01-jasmine-mmcblk0p1
    Device is fused board.
    ENTRY_TABLE:
    PART  POS  LEN  VER TNSPEC TYPE UPDATABLE
    bpmp-fw  2088  533904  2    1  1
    sce-fw  535992  125568  2    1  1
    cpu-bootloader  661560  285232  2    1  1
    mb2  946792  117600  2    0  1
    spe-fw  1064392  95984  2    0  1
    secure-os  1160376  366400  2    1  1
    mb1  1526776  99664  2    2  1
    mts-bootpack  1626440  2082144  2    1  1
    mts-preboot  3708584  63104  2    0  1
    sc7  3771688  23632  2    1  1
    bpmp-fw-dtb  3795320  315392  2  3489-300---1-0-jb01-jasmine-mmcblk0p1  1  1
    bootloader-dtb  4110712  357440  2  3489-300---1-0-jb01-jasmine-mmcblk0p1  1  1
    VER  4468152  98  2  3489-300---1-0-jb01-jasmine-mmcblk0p1  0  1
    BCT  4468250  3584  2  3489-300---1-0-jb01-jasmine-mmcblk0p1  2  1
    MB1_BCT  4471834  50592  2  3489-300---1-0-jb01-jasmine-mmcblk0p1  0  1
    kernel  4522426  34748816  2    1  1
    kernel-dtb  39271242  357440  2  3489-300---1-0-jb01-jasmine-mmcblk0p1  1  1
    Saving Entry table to /opt/ota_package/entry_table
    Writing 533904 bytes to /dev/disk/by-partlabel/bpmp-fw_b for bpmp-fw
    Writing 125568 bytes to /dev/disk/by-partlabel/sce-fw_b for sce-fw
    Writing 285232 bytes to /dev/disk/by-partlabel/cpu-bootloader_b for cpu-bootloader
    mb2 write: slot = 1 offset = 1276928 bytes = 117600
    spe-fw write: slot = 1 offset = 883712 bytes = 95984
    Writing 366400 bytes to /dev/disk/by-partlabel/secure-os_b for secure-os
    Writing 2082144 bytes to /dev/disk/by-partlabel/mts-bootpack_b for mts-bootpack
    mts-preboot write: slot = 1 offset = 1801216 bytes = 63104
    Writing 23632 bytes to /dev/disk/by-partlabel/sc7_b for sc7
    Writing 315392 bytes to /dev/disk/by-partlabel/bpmp-fw-dtb_b for bpmp-fw-dtb
    Writing 357440 bytes to /dev/disk/by-partlabel/bootloader-dtb_b for bootloader-dtb
    VER write: slot = 1 offset = 4063232 bytes = 98
    MB1_BCT write: slot = 1 offset = 622592 bytes = 50592
    Writing 34748816 bytes to /dev/disk/by-partlabel/kernel_b for kernel
    Writing 357440 bytes to /dev/disk/by-partlabel/kernel-dtb_b for kernel-dtb
    Update successful
    Setting slot 1 as active boot slot