デバイスツリーを変更する

概要

EDGEPLANT T1はNVIDIA L4Tをベースに開発されており、L4Tと同様にハードウェアの情報はデバイスツリー1 上に記載されています。 EDGEPLANT T1に標準搭載されているデバイスの挙動を変更したい場合や、新規にデバイスを接続する場合は、デバイスツリーを変更する必要があります。

1

https://www.devicetree.org/

事前準備

  • Device Tree Compiler(dtc)のインストール 2

    $ sudo apt install device-tree-compiler
    
  • aptpod L4T Driver Package (BSP) の用意

    詳細は OSを新規インストールする を参照してください。

2

EDGEPLANT T1にはデフォルトでインストールされています。

手順

L4TのDevice Tree Blob(DTB)ファイルは、kernel-dtbパーティションに暗号化されて配置されているため、変更する場合は以下の手順が必要です。

  1. DTBファイルをDevice Tree Source(DTS)ファイルに変換します。

    $ dtc -I dtb -O dts -o tegra186-aptpod-jb01-jasmine.dts tegra186-aptpod-jb01-jasmine.dtb
    

    DTBファイルは以下の場所に配置されています。

    対象

    パス

    ターゲットマシン

    /boot/dtb/tegra186-aptpod-jb01-jasmine.dtb

    L4T Driver Package(BSP)

    Linux_for_Tegra/kernel/dtb/tegra186-aptpod-jb01-jasmine.dtb

  2. DTSファイルに任意の変更を加えます。

  3. 変更したDTSファイルを、DTBファイルに再変換します。

    $ dtc -I dts -O dtb -o tegra186-aptpod-jb01-jasmine.dtb tegra186-aptpod-jb01-jasmine.dts
    
  4. 暗号化されたdtbファイルを作成します。 <work directory> は、BSPのインストール時に作成したディレクトリです。

    $ sudo cp tegra186-aptpod-jb01-jasmine.dtb <work directory>/Linux_for_Tegra/kernel/dtb/
    $ cd <work directory>/Linux_for_Tegra
    $ sudo ./flash.sh --no-flash -k kernel-dtb jb01-jasmine mmcblk0p1
    
    [   0.0236 ] Signed file: /home/jasmine/nvidia/Linux_for_Tegra/bootloader/tegra186-aptpod-jb01-jasmine_sigheader.dtb.encrypt
    *** tegra186-aptpod-jb01-jasmine.dtb has been signed successfully. ***
    
  5. 作成した暗号化DTBファイルを用いて、ターゲット上のDTBを差し替えます。 現在のRootfsスロットに対応したパーティションに書き込んでください。

    • slot 0: /dev/mmcblk0p30

    • slot 1: /dev/mmcblk0p31

    # Checking rootfs slot
    $ sudo nvbootctrl get-current-slot
    0
    
    # Checking partition
    $ ls -al /dev/disk/by-partlabel/ | grep kernel-dtb
    lrwxrwxrwx 1 root root  16 Jan 28  2018 kernel-dtb -> ../../mmcblk0p30    // for slot 0
    lrwxrwxrwx 1 root root  16 Jan 28  2018 kernel-dtb_b -> ../../mmcblk0p31  // for slot 1
    
    # Updating (e.g. slot 0)
    $ sudo dd if=./tegra186-aptpod-jb01-jasmine_sigheader.dtb.encrypt of=/dev/mmcblk0p30
    698+0 records in
    698+0 records out
    357376 bytes (357 kB, 349 KiB) copied, 0.031662 s, 1
    
    # Rebooting
    $ sudo systemctl reboot