私はベースボードに接続され、Yocto Linuxを実行する組み込みの「コンピュータモジュール」であるTS-4900を使用しています。 U-Bootを使用して起動します。これはバックプレーンモデルに従って起動する正しい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...)
答え1
U-Boot は、ブートコマンドの実行時にカーネルにメモリアドレスを提供し、デバイスツリー blob にメモリアドレスを提供します。したがって、このコマンドを実行する前に、これらのファイルをメモリにロードする必要があります。あなたが提供した情報によれば、eMMC / SDカードから2つのファイルをロードできないことがわかりました。
/boot/boot.ub
/boot/imx6dl-ts4900-13.dtb
これらのファイルがまったく存在しないか、パスが間違っているか、U-Boot loadコマンドに無効なデバイス:パーティションが指定されている可能性があります。それにもかかわらず、コマンドは失敗します。この時点で、ブートローダは「デフォルト」デバイスツリー(おそらくブートローダ自体と同じメディアに保存されている)をロードしようとしているようです。
何が起こっているのかを正確に理解するには、ブートローダで起動プロセスを停止し、U-Bootコマンドプロンプトにアクセスする必要があります。ここで次のように入力できます。
printenv
これにより、U-boot環境変数が印刷されます。これらの変数の多くは他の変数を参照します。これらの変数のいくつかは通常スクリプトのように実行されるため、起動スクリプト、カーネル、fdtロードスクリプトなどを見ることができます。開始順序を特定するには、次の変数を見つけます。スタートコマンド(または同様のもの)。これは通常起動時に実行されます。この時点から、複数の変数を介して開始順序を追跡する必要がありますが、FDTをメモリにロードするためにloadコマンドが使用される場所を確認する必要があります。出力を公開するには印刷環境、ここで使用されている正確なロジックを決定できます。
答え2
非常に遅れましたが、このスクリプトを実装しており、インターネット検索エンジンを使用してこのスクリプトを探しているすべての人のためにこの問題を解決します。
コンピュータモジュールは、ほぼすべての既製のTSまたはカスタム基板に配置でき、ユーザーが使用するデバイスツリーを調整することなく自動的に動作できることを願っています。特定のキャリアボードには8つの入力シフトレジスタがあり、バックプレーンには一意のIDがあります。 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キャリアボード:
- 「技術システムi.MX6クアッドコアTS-4900(TS-TPC-8390)」
答え3
この質問に適切に答えられたかどうかはわかりません。すでに述べたように、printenvを使用してデフォルトのbootcmdを表示します。このコマンドの先頭を実行してブートデバイスからデータを読み取ることができますが、まだ実際にはブートしていません。
printenv(例:以下を印刷してください)
- bootcmd=mmcについて
- mmc 読み取り 90000000 100000 5000
- setenv fdt_high 0xffffffffffffffffff;
- bootm 90000000-$(fdtcontroladdr)
- fdtcontroladdr=bffe08d0
たとえば、私のRISCVマシンでは、画像は次のようにロードされます。
- mmc 読み取り 90000000 100000 5000
- setenv fdt_high 0xffffffffffffffffff
その後、fdtアドレスを設定できます。
- fdt addr(printenvのfdtcontroladdr値)
これにより、次のことができます。
- クイックプリント
こんにちは、フラットデバイスツリーが終了しました。