web-dev-qa-db-ja.com

ブートローダーとカーネルソースコードの両方でデバイスツリー構造(DTS)ファイルが必要なのはなぜですか?

Open Firmware APIを実装していないU-Bootのようなブートローダーは、フラット化されたデバイスツリーのバイナリ形式をカーネルに渡すことが期待されています- LinuxFDTBlob

DTSファイルがカーネルにも存在するのはなぜですか?それは冗長ではありませんか?

例として、U-bootソースコードには次のファイルがあります。
Arch/arm/dts/tegra124-jetson-tk1.dts

このファイルは、Linuxのソースコードにもあります。
Arch/arm/boot/dts/tegra124-jetson-tk1.dts

カーネルバージョンはU-bootバージョンの4倍ですが、この冗長性の背後にある理由を知りたいです。メンテナと開発者の両方にとって、メンテナンスと使用は難しいと思います

10
Hamzahfrq

以下はArtlessnoiseのコメントからの答えです:

U-bootソースはu-bootDTBを使用しますが、Linuxはカーネルの起動時にLinuxDTBを使用します。 u-bootバージョンは、起動に必要な周辺機器の数が少ないため、簡略化されたバージョンです。 Linuxのカーネルバージョンを常に使用します。つまり、u-bootはこれをLinuxに渡します(bzImageまたはvmlinuxをロードします)。

U-bootドライバーの多くはLinuxとほとんど同じです。明らかに、すべてのu-bootドライバーに対して同じ議論をすることができます。ほとんどは、割り込みがポーリングルーチンに置き換えられたLinuxドライバーのコピーです。同じopen-firmwareインターフェースを使用すると、それらをより厳密に一致させることができます。

6
Hamzahfrq
  1. UBootとLinuxカーネルは2つの異なるプロジェクトです。したがって、別々のプロジェクトを管理するために異なるコピーが必要になります。
  2. Linuxカーネルは、他のブートローダーと一緒に起動することもできます。 DTBをLinuxカーネルに渡す方法は他にもあります。カーネルイメージには、使用する必要のあるDTBを追加できます。

上記の理由により、DTSのコピーを複製することは理にかなっています。

4

Ubootには個別のDTSファイルがあり、ubootdefconfigでCONFIG_DEFAULT_DEVICE_TREEとして設定できます。このDTSファイルはubootイメージで構築されているため、ubootの一部です。 image。ubootの構文DTSファイルはLinuxカーネルDTSファイルと同じです。LinuxDTSファイルはDTBファイルにコンパイルされますLinuxカーネルによるハードウェア構成の解析に個別に使用されます。LinuxDTBイメージはLinuxカーネルイメージとは別にフラッシュされます。

0
Sanjay Tandel