Yoctoを使用して独自の「組み込みLinux」を構築する作業をしています。これは、SAMA5D35を備えたSAMA5D3x-MB + SAMA5D3x-CM(RONETIX)に基づいています。 2つの質問があります。
1.)デバイスツリーの変更
MACHINE ?? = "sama5d3xek"に基づいてイメージを作成します。
生成プロセスの後、私は5D35の2つのデバイスツリーファイルをデプロイディレクトリで見つけました。
メインボードは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のような同様の質問があります-それをカーネルにパッチ/コピーする方法は?
私はヨクトとカーネルハッキングが初めてです。それを行う方法はありますか?
最近のYoctoプロジェクトリリースを使用している場合は、recipetoolを使用してこれに関するほとんどのレッグワークを行うことができます。 2つのオプションがあります。既存のRecipeToolコマンドと少量の手動作業を使用するか、いくつかのカーネル固有のコマンドを提供するMeta-mentorのRecipeToolプラグインを使用してこれを行うことができます。
まず、変更を保存するためのレイヤーが必要になります。既にレイヤーを作成している場合はそれを使用できます。それ以外の場合は、レイヤーを作成して構成に追加できます。
$ yocto-layer create local 1
$ bitbake-layers add-layer meta-local
まず、メタメンターをクローンします。
$ 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
以下のセクションでは、明らかにあなたの場合、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')の結果で置き換えます。