使用しているデバイスツリーblob(dtbファイル)を確認するにはどうすればよいですか?


9

私は、ベースボードにプラグインされ、Yocto Linuxを実行している組み込みの「Computer on Module」であるTS-4900を使用しています。U-Bootを使用して開始し、おそらくベースボードのモデルに基づいて、開始する正しいdtbファイルを選択します。正しいファイルが見つからない場合は、モジュールの「汎用」ファイルにフォールバックします。

しかし、それはどのように/どこで正しいものを決定しますか?使用した.dtbを確認したり、使用する.dtbを設定するにはどうすればよいですか?

以下はU-Bootの起動メッセージです。

U-Boot 2014.10-g3ac6ec3 (Jan 29 2015 - 17:20:15)

CPU:   Freescale i.MX6SOLO rev1.1 at 792 MHz
Reset cause: POR
Board: TS-4900
Revision: C
       Watchdog enabled
I2C:   ready
DRAM:  1 GiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
SF: Detected N25Q64 with page size 256 Bytes, erase size 4 KiB, total 8 MiB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   using phy at 7
FEC [PRIME]
Press Ctrl+C to abort autoboot in 1 second(s)
(Re)start USB...
USB0:   Port not available.
USB1:   USB EHCI 1.00
scanning bus 1 for devices... 2 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
No storage devices, perhaps not 'usb start'ed..?
Booting from the eMMC ...
** File not found /boot/boot.ub **
** File not found /boot/imx6dl-ts4900-13.dtb **
Booting default device tree
42507 bytes read in 196 ms (210.9 KiB/s)
118642 bytes read in 172 ms (672.9 KiB/s)
ICE40 FPGA reloaded successfully
4609784 bytes read in 337 ms (13 MiB/s)
## Booting kernel from Legacy Image at 12000000 ...
   Image Name:   Linux-3.10.17-1.0.0-technologic+
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    4609720 Bytes = 4.4 MiB
   Load Address: 10008000
   Entry Point:  10008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 18000000
   Booting using the fdt blob at 0x18000000
EHCI failed to shut down host controller.
   Loading Kernel Image ... OK
   Using Device Tree in place at 18000000, end 1800d60a

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0

(Kernel startup commences...)

回答:


7

私はこれにかなり遅れていますが、私はこのスクリプトを実装しました。インターネット検索エンジンを使用してこれを見つけた人のためにこの問題に対処します。

モジュール上のこのコンピューターは、既製のTSまたはカスタムベースボードのほとんどすべてに配置でき、ユーザーが使用するデバイスツリーを調整する必要なく、自動的に動作するようにしました。キャリアボードには、ベースボードの一意のIDを持つ8入力シフトレジスタがあります。TS-8550では、これは0x13です。 http://wiki.embeddedarm.com/wiki/TS-4900#Baseboard_ID

したがって、U-Boot bbdetectで追加したコマンドは、このシフトレジスタに接続されたGPIOを読み取り、$ baseboardid環境変数を設定します。U-Bootは最初にベースボード固有のデバイスツリーをロードしようとします/boot/imx6${cpu}-ts4900-${baseboardid}.dtb。見つからない場合は、のフォールバックデバイスツリーを使用し/boot/imx6${cpu}-ts4900.dtbます。この後者のファイルには、どのキャリアボードでも機能する適切なデフォルトがあります。TS-8550はベースボード固有のキャリアボードを必要としないため、標準のデバイスツリーにフォールバックして起動し続けます。

元の質問に答えるには

cat /proc/device-tree/model

すべてのデバイスツリーは、デバイスツリー内のモデルが少し異なります。
たとえば、安全なフォールバックは次のとおりです。

  • 「Technologic Systems i.MX6 Quad TS-4900(デフォルトのデバイスツリー)」

または、特定のデバイスツリーを備えたTS-TPC-8390キャリアボード:

  • 「Technologic Systems i.MX6 Quad TS-4900(TS-TPC-8390)」

8

U-Bootがbootコマンドを実行すると、カーネルのメモリアドレスとデバイスツリーblobのメモリアドレスが提供されます。したがって、このコマンドの前に、これらのファイルをメモリにロードする必要があります。あなたが提供したメッセージに基づいて、eMMC / SDカードからの2つのファイルのロードに失敗したことがわかります。

/boot/boot.ub
/boot/imx6dl-ts4900-13.dtb

これらのファイルが存在しない、パスが間違っている、または不正なデバイス:パーティションがU-Boot loadコマンドに指定された可能性があります。いずれの場合も、コマンドは失敗します。この時点で、ブートローダーが「デフォルト」のデバイスツリーをロードしようとしているように見えます。ブートローダー自体と同じメディアに保存されている可能性があります。

何が起こっているのかを正確に知るには、ブートローダーでブートプロセスを停止し、U-Bootコマンドプロンプトにアクセスします。ここから、次のように入力できます。

printenv

これにより、U-boot環境変数が出力されます。これらの変数の多くは他の変数を参照します。これらの変数の一部はスクリプトのように実行されることが多いため、ブートスクリプト、カーネルお​​よびfdtロードスクリプトなどが表示される場合があります。ブートシーケンスを理解するには、bootcmd(または同様の)という変数を探します。これは通常、最終的にブート時に実行されるものです。この時点から複数の変数を介してブートシーケンスを追跡する必要がありますが、FDTをメモリにロードするためにロードコマンドが使用されている場所を確認する必要があります。printenvの出力を投稿したい場合は、ここで使用されている正確なロジックを特定できます。


1
ありがとう。bootcmdは、最初の起動スクリプトを含む1つのenv変数である必要がありました。
SF。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.