デバイスツリー.dtbの作成
ここでは、デバイスツリーの生成手順について説明する。
目次
前提条件
- 使用するvivadoのバージョンは、2018.2であること。
- ザイリンクスSDK(v2018.2)がインストールされていること。
- 使用するOSがUbuntu16.04 LTS であること。
- vivadoでhdfファイルとbitファイルを生成していること。
手順
この手順は、Xilinxリポジトリからデバイスツリーをダウンロードするところから、デバイスツリーの生成までを説明する。
Xilinxリポジトリからデバイスツリーのダウンロード
次コマンドを入力し、Xilinxリポジトリからデバイスツリーをダウンロードする。
git clone https://github.com/Xilinx/device-tree-xlnx
ダウンロードが完了すると、device-tree-xlnxというディレクトリが生成されるので、そのディレクトに移動する。
cd ./device-tree-xlnx/
使用するvivadoのバージョンでブランチを切る。今回は2018.2なので、xilinx-v2018.2でチェックアウトし、xilinx-v2018.2_zyboというブランチを作成する。
git checkout -b xilinx-v2018.2_zybo refs/tags/xilinx-v2018.2
XSDKの起動
device-tree-xlnxと同じ階層にdtsという新しいディレクトリを作成する。
mkdir dts
そのディレクトリにhdfファイルをコピーする。
次のコマンドを入力し、XSDKの環境変数を設定する。
source /opt/Xilinx/SDK/2018.2/settings64.sh
hsi
と入力し、XSDKをCUIモードで起動する。
- 起動すると、次のログが表示される。
****** hsi v2018.2 (64-bit) **** SW Build 2258646 on Thu Jun 14 20:02:38 MDT 2018 ** Copyright 1986-2018 Xilinx, Inc. All Rights Reserved. hsi%
hdfファイルのセット
hdfファイルをセットする。
set hwdsgn [open_hw_design TopZybo.hdf]
デバイスツリー(dts、dtsi)の生成
次のコマンドを入力し、デバイスツリーファイルを生成する。
※リポジトリのパスやリポジトリ自体を間違えていると、エラーが発生する。
set_repo_path ../../device-tree-xlnx/ create_sw_design device-tree -os device_tree -proc ps7_cortexa9_0 generate_target -dir dts
- dtsフォルダには、デバイスツリーを含む次のファイルが生成されている。
device-tree.mss pl.dtsi system-top.dts zynq-7000.dtsi pcw.dtsi skeleton.dtsi system.dts
- 生成されてファイルのうち、使用するのは次である。その他は使用しない。
デバイスツリー(dts、dtsi)の編集
生成されたデバイスツリーでは、MIDOのデバイスツリーが記載されていない。 そのため、MIDOのデバイスツリーを追加し、イーサを動くようにする。
system-user.dtsiファイルの作成
デバイスツリーを記載するためにsystem-user.dtsiファイルを作成する。
touch system-user.dtsi
system-user.dtsiファイルを開き、デバイスツリーを書き込む。
system-user.dtsi
書き込む内容は、参考サイトNo.5-6を参考にしている。
gem0 { phy-handle = <ðernet_phy>; /* phy-reset-gpio = <&axi_gpio_eth 0 0>; phy-reset-active-low; phy-reset-duration = <10>; */ ethernet_phy: ethernet-phy@1 { /* rtl8211e-vl */ reg = <1>; device_type = "ethernet-phy"; mdio { #address-cells = <1>; #size-cells = <0>; phy0: phy@1 { compatible = "realtek,RTL8211E"; device_type = "ethernet-phy"; reg = <1>; } ; } ; }; };
次に、編集したデバイススリーsystem-user.dtsiと自動生成のデバイスツリーをマージする。
system-top.dtsファイルを開き、デバイスツリーを編集する。
gedit system-top.dts
編集内容は次に示す。
/dts-v1/;
/include/ "zynq-7000.dtsi"
/include/ "pl.dtsi"
/include/ "pcw.dtsi"
+/include/ "system-user.dtsi"
以上で、デバイスツリーの編集は完了である。
デバイスツリー(dtb)の生成
- 次のコマンドを入力し、デバイスツリーの変換を行う。
dtc -I dts -O dtb -o zynq-zybo.dtb system-top.dts
おわりに
エラー
リポジトリのパスやリポジトリ自体を間違えていると、エラーが発生する。
エラー内容
デバイスツリーを生成するときに、リポジトリの場所やリポジトリが間違えていると次のエラーが発生する。
hsi% create_sw_design device-tree -os device_tree -proc ps7_cortexa9_0 ERROR: [Hsi 55-1597] SwCore device_tree is not found in Repositories ERROR: [Hsi 55-1597] SwCore device_tree is not found in Repositories ERROR: [Hsi 55-1594] Core device_tree of version not found in repositories ERROR: [Hsi 55-1447] Error: running create_sw_design. ERROR: [Common 17-39] 'create_sw_design' failed due to earlier errors.
対策
デバイスツリーのフォルダが格納されている正しい場所を指定する。
set_repo_path ../../device-tree-xlnx/
デバイスツリーリポジトリが次からダウンロードすること。
git clone https://github.com/Xilinx/device-tree-xlnx
※私は、間違えて違うリポジトリをダウンロードしていた。
git clone https://github.com/Xilinx/linux-xlnx.git
参考サイト
Build Device Tree Blob
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842279/Build+Device+Tree+BlobPetalinux 2017.2 - questions about the dts & dtsi files
https://forums.xilinx.com/t5/Embedded-Linux/Petalinux-2017-2-questions-about-the-dts-amp-dtsi-files/m-p/801134[Linux][kernel] Device Tree についてのまとめ
https://qiita.com/koara-local/items/ed99a7b96a0ca252fc4e組み込みLinuxデバイスドライバの作り方 (11)
https://qiita.com/take-iwiw/items/0d13142863d9ed064e41Digilent/Petalinux-Zybo:system-user.dtsi
https://github.com/Digilent/Petalinux-Zybo/tree/master/Zybo/project-spec/meta-user/recipes-bsp/device-tree/fileszynq / zybo > ZyboにてPetalinuxでEthernetを使うまでの手順
https://qiita.com/7of9/items/43e650f2e7d9c55da175