web-dev-qa-db-ja.com

Yoctoで独自のデバイスツリーと変更されたカーネル構成を使用する方法

Yoctoを使用して独自の「組み込みLinux」を構築する作業をしています。これは、SAMA5D35を備えたSAMA5D3x-MB + SAMA5D3x-CM(RONETIX)に基づいています。 2つの質問があります。

1.)デバイスツリーの変更

MACHINE ?? = "sama5d3xek"に基づいてイメージを作成します。

生成プロセスの後、私は5D35の2つのデバイスツリーファイルをデプロイディレクトリで見つけました。

  • zImage--4.1 + git0 + 19291d7be4-r0-sama5d35ek-.dtb
  • zImage--4.1 + git0 + 19291d7be4-r0-sama5d35ek-revc-.dtb

メインボードはrevDなので、zImage--4.1 + git0 + 19291d7be4-r0-sama5d35ek-.dtbを使用しています。

このファイルでは、can0とi2c1のみが定義されています。

Can1とi2c0も使用したいです。そのためには、独自のdtsファイルを作成し、それをカーネルのビルドプロセスに含める必要があると思います。

これまでのところ、メタテストレシピにdtsファイルを配置しました。カーネルにコピー/パッチする方法はありますか?

2.)カーネル構成の変更

カーネルをbitbake virtual/kernel -c menuconfigで確認しました

sAMA5D2などを使用しておらず、コンソールのみを使用しているため、これらのカーネル構成を非アクティブ化しました。新しい「.config」を「my.config」に保存して、my-recipe dirに保存しました。 1のような同様の質問があります-それをカーネルにパッチ/コピーする方法は?

私はヨクトとカーネルハッキングが初めてです。それを行う方法はありますか?

9
Stefan Jaritz

最近のYoctoプロジェクトリリースを使用している場合は、recipetoolを使用してこれに関するほとんどのレッグワークを行うことができます。 2つのオプションがあります。既存のRecipeToolコマンドと少量の手動作業を使用するか、いくつかのカーネル固有のコマンドを提供するMeta-mentorのRecipeToolプラグインを使用してこれを行うことができます。

レイヤー設定

まず、変更を保存するためのレイヤーが必要になります。既にレイヤーを作成している場合はそれを使用できます。それ以外の場合は、レイヤーを作成して構成に追加できます。

$ yocto-layer create local 1
$ bitbake-layers add-layer meta-local

オプション1:メタメンターからのレシピツールプラグインの使用

セットアップ

まず、メタメンターをクローンします。

$ git clone https://github.com/MentorEmbedded/meta-mentor

次に、設定にmeta-melを追加します。

$ bitbake-layers add-layer path/to/meta-mentor/meta-mel

または、meta-mentor/meta-mel/libを独自のレイヤーにコピーします。

$ cp -a path/to/meta-mentor/meta-mel/lib meta-local/

デバイスツリー

$ recipetool kernel_add_dts meta-local /path/to/your.dts

カーネル構成

$ recipetool kernel_add_fragments meta-local /path/to/your.cfg

または:

$ recipetool kernel_set_defconfig meta-local /path/to/the/defconfig

オプション2:手動

以下のセクションでは、明らかにあなたの場合、your-machine-nameはsama5d3xekである必要があります。以下のrecipetoolコマンドに渡される「-m your-machine-name」は、そのレシピを使用するマシンに影響を与えるのではなく、マシンに固有のレシピを変更します。一部のBSPレイヤーが複数のマシンで同じカーネルレシピを使用するため、レシピがマシンでのみ使用されていることがわかっている場合は、それを削除することもできますが、それを維持するのが最も安全です。たとえば、多くの場合、linux-yoctoが使用されます。

デバイスツリー

次に、使用したい.dtsが手元にあると仮定します。

$ recipetool appendsrcfile -wm your-machine-name path/to/meta-local virtual/kernel /path/to/your.dts 'Arch/${Arch}/boot/dts/your.dts'

これにより、メタローカルに.bbappendが作成され、.dtsがSRC_URIに追加され、カーネルソースツリーの適切なパスに配置されます。次のステップでは、作成した追加を編集し、.dtsの.dtbをKERNEL_DEVICETREE変数に追加します。

KERNEL_DEVICETREE += "your.dtb"

カーネルレシピにrecipes-kernel/linux/linux-dtb.incが含まれている場合、KERNEL_DEVICETREE内の.dtbファイルは、カーネルのビルドシステムを使用して.dtsファイルから作成されます。一部のカーネルにはlinux-dtb.incが含まれていません。その場合、追加で自分で追加できます。

require recipes-kernel/linux/linux-dtb.inc

カーネル構成

カーネルの構成は、構成がどのように行われるかがカーネルのレシピ間でわずかに異なるため、少し複雑です。一部のカーネルレシピは構成フラグメント(defconfig/.configの一部を含む単なるテキストファイル)をサポートしていますが、他のカーネルレシピは構成を完全に上書きする必要があります。 「linux-yocto」レシピは、他のいくつかと同様に、フラグメントを処理して使用できます。

使用しているカーネルレシピを確認するには(上のファイル名が使用されます):

$ bitbake -e virtual/kernel | grep '^FILE='

構成フラグメントを使用する場合は、フラグメントを手動で作成するか、フラグメントを生成できます。

$ bitbake -c menuconfig virtual/kernel
$ bitbake -c diffconfig virtual/kernel

「diffconfig」タスクは、menuconfigからの変更でフラグメントを作成し、そのパスを出力します。

次に、それをカーネルに追加できます(ただし、特定のレシピでのみ使用されます)。

$ recipetool appendsrcfile -wWm your-machine-name meta-local virtual/kernel /path/to/your.cfg

設定全体を上書きするために、ほとんどのレシピは「defconfig」ソースファイルに従い、それを使用します。

$ recipetool appendsrcfile -Wm your-machine-name meta-local virtual/kernel /path/to/the/defconfig

注:defconfigは自動生成されません。 defconfigをmenuconfig( '。config')の結果で置き換えます。

25
kergoth