This service is available only in Japanese-language.

ユーザ独自のdefconfigファイルを使用して、カーネルイメージ(uImage、zImage)またはカーネルモジュールをビルドする方法

とあるメーカーのYocto(BSP)を元に、defconfigの変更を独自のものに変更してビルドをするため、
https://yoctobbq.lineo.co.jp/?q=node/41
の(a)の方法(下記にも示します)で行いたいのですが、細かい手順が分からないため、教えてください。
やりたい事はBSPで提供されているdefconfigの内容を一部変更(注釈にしたり、追加する)をして独自のdefconfigで
ビルドをするのが目的です。
------------------------------------------------------------------------------------------------------------------
(a) ユーザー独自のdefconfigを使用する
1. bitbake カーネル名 -c menuconfig を実行して、make menuconfig と同様にコンフィグを変更します。
2. bitbake カーネル名 -c diffconfig を実行して、差分ファイルfragment.cfg を生成します。
3. fragment.cfg ファイルを、recipes-kernel/linux/linux-xxx/ ディレクトリ以下にコピーする。
4. bbappend ファイルに、SRCURI += "file://fragment.cfg" を追加する。
 # xxx.cfgと、cfgがサフィックスに指定されたファイルは、コンフィグレーション関連のファイルとbitbakeは認識します。
-------------------------------------------------------------------------------------------------------------------

Q1:1で述べている「カーネル名」とは、Linuxカーネルバージョンを入れるのでしょうか?
Q2:2で述べている差分ファイルfragment.cfgを生成するためにが、元々のdefconfigファイルと独自に用意したdefconfigファイル差分を取ると思いますが、独自に用意したdefconfigファイルはどのディレクトリに置けば良いのでしょうか?

当方、初心者のため的外れな質問をしてるかもしれませんが、宜しくご教示願います。

まずは質問に対しての返答です。
> Q1:1で述べている「カーネル名」とは、Linuxカーネルバージョンを入れるのでしょうか?
カーネルのレシピ名を指定します。どのレシピを使用するのかは、conf/local.conf 内でMACHINEに設定しているボード名.conf ファイル
もしくはその中からincludeなりrequireで指定したファイル内で、viretual/kernel で指定された名称となります。

> Q2:2で述べている差分ファイルfragment.cfgを生成するためにが、元々のdefconfigファイルと独自に用意したdefconfigファイル差分を取ると思いますが、独自に用意したdefconfigファイルはどのディレクトリに置けば良いのでしょうか?

独自のdefconfigファイルは特に用意しなくても良いと考えます。
menuconfigを実施することで、新たな.configファイルが生成され、オリジナルとの差分を生成する仕組みとなっています。

なお、記載された手順ですが、bbappend ファイルで、FILESを追加する前に
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
の指定が必要となります。(レシピ名のみのディレクトリは、標準のファイル検索対象とならないため)

さて、実施しようとしている手順ですが、Yocto Projectで配布されているpokyでは問題なく動作しますが、一部のBSPでは
do_patch を実施した段階では、うまく変更が適応されますが、その次にBSPで独自に定義したタスクで、ボード毎のdefconfig
で上書きをするものもあります。(NXP系のBSP等)
この場合は、https://yoctobbq.lineo.co.jp/?q=node/184 で説明した手順でカーネルのコンフィグレーションを変更します。

早速の回答有難うございます。
使用しているCPUはi.MX6です。
もともとのdefconfigファイ内に定義されている「CONFIG_MXC_GPU_VIV=y」 を注釈文にして
無効にしてビルドしたいのですが、
その際の手順としても「#  CONFIG_MXC_GPU_VIV=y」 と変更したdefconfigファイルを用意せずに無効にする方法は
どのようにするのでしょうか?

今回の質問に至った背景を説明させてください。
メモリ4GBの際のVIVANTEドライバの問題(https://community.nxp.com/thread/481041)の対策をしたいためです。
NXPコミュニティには、L4.14.78-1.0.0-GA BSPで改善しているとのことではありますが、
現在使用しているメーカのBSPでは、4.14.78のカーネルを採用しておらず、Yocoto2.5_kernel4.9.88が最新になっているため、
これに対策を掛けたいと考えています。

連続書き込み失礼します。
defconfigの変更はmenuconfigで行うのですね。大変失礼しました。
ご紹介頂いた方法で試してみます。

i.MX系のカーネルの場合、do_copy_defconfig タスクで、.config ファイルを上書きする処理を追加しているBSPが多いです。
当該BSPでも、do_copy_defconfig タスクが実行されているようであれば、以下の手順でパッチを作成します。
1. コピー元のファイルを特定する。
2. bitbake カーネルレシピ -c devshell を実行して、カーネルソースツリー編集用のシェルを起動する。
3. シェル内でコピー元ファイルを編集する。
4. シェル内でgit のサブコマンド add を変更したファイルをパラメータに渡して実行する。
5. シェル内でgit のサブコマンド commit -m "変更理由" を実行して、コミットを行う。
6. シェル内でgit のサブコマンド format-patch -1 を実行して、パッチファイルを生成する。
7. 生成されたパッチファイルを使用したbbappendファイルを作成する。
なお、使用中のBSPでcopy_defconfig の追加場所がのdo_patchではなくdo_unpack の後に
指定されている場合は、bbappdendにdo_copy_defconfig[depends] += "カーネルレシピ名:do_patch"
を追記する。

アドバイスありがとうございます。
menuconfigがうまく開けないため、defconfigパッチを用意する方法を試そうと思いますが、
手順の1のコピー元のファイル を特定するためにログファイルを見ることになると思いますが、
どのファイルになるのでしょうか?
また、手順5の”変更理由”の部分は、いわゆる注釈扱いで任意に記入して良い部分でしょうか?
お手数でも教えてください。

手順1のコピー元ファイルの特定ですが、実際のカーネルの構築を行っているディレクトリ build/tmp/work/[ボード名]/[カーネル名]/[バージョン]/temp にある、run.do_copydefconfig に実際の処理が記載されています。ボードによっては、条件によってコピー元が変わるため bitbake [カーネルレシピ名] -c copydefconfig を実行することで、どのファイルが実際に.config にコピーされたのか確認可能です。
手順5で指定する変更理由ですが、手順6で生成されるパッチファイルの名称の一部に使用されるので、判りやすい理由を記述すれば良いかと。

アドバイス有難うございます。
menuconfigについて進展ありまして、そちらを先に確認しているところです。
(前後してしまい、すみません)

原因は、
libncursesw5-devのインストールが必要な事(sudo apt-get install libncursesw5-dev の実行)と、
カーネル名が間違ってましたので、正しいカーネル名を入れてmenuconfig画面を出す事が出来ました。

早速menuconfigで変更を掛けてdefconfigを保存しまして、差分抽出のdiffconfigを実施しましたが、
肝心のfragment.cfgが格納されているディレクトリが見つけられずの状態です。

下記URLのマニュアルに記載内容を見てみますと、
https://www.yoctoproject.org/docs/1.6.1/kernel-dev/kernel-dev.html
2.3.2. Generating Configuration Filesの3番のところには、
The resulting file fragment.cfg will be placed in the ${WORKDIR} directory:
と書いてありまして、
このWORKDIRは、用語解説のところに、下記のように書かれています。
-------------------------------------------------------------------------------------------------
The WORKDIR directory is defined as follows:

${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}

The actual directory depends on several things:

TMPDIR: The top-level build output directory
MULTIMACH_TARGET_SYS: The target system identifier
PN: The recipe name
EXTENDPE: The epoch - (if PE is not specified, which is usually the case for most recipes, then EXTENDPE is blank)
PV: The recipe version
PR: The recipe revision
-------------------------------------------------------------------------------------------------
PNのレシピネームまでは追えるのですが、その後のPVとPRが見つからない状況です。

どこのディレクトリにfragment.cfgが格納されているかアドバイス頂けますでしょうか?

実行時のコンソールログは、tmp/log/cooker/[マシン名]/ 以下に実行時の日時付きのファイル名に保存されています。
一般的な構成の場合、fragment.cfg は、tmp/work/[マシン名]/[カーネル名]/[バージョン名]/ 以下に出力します。

早速見てみましたが、
tmp/log/cooker/[マシン名]/ のところではうまく見つけられず、
tmp/work/[マシン名]/[カーネル名]/[バージョン名]/ を見てみましたが、fragment.cfgが見つかりません。
参考として、
menuconfigを実行した際のログと、
diffconfigを実行した際のログ。
そして、ご教示頂いたtmp/work/[マシン名]/[カーネル名]/[バージョン名]/ 配下の状態を示します。
findコマンドでfragment.cfgを探してみましたが、見つかりませんでした。
アドバイスお願い致します。
-----------------------------------------------------------------------------------------------------------------
test1234@test1234:~/yocto/build$ bitbake linux-congatec -c menuconfig
WARNING: Host distribution "ubuntu-14.04" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.
Loading cache: 100% |############################################| Time: 0:00:00
Loaded 2315 entries from dependency cache.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION = "1.38.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "universal-4.8"
TARGET_SYS = "arm-fslc-linux-gnueabi"
MACHINE = "cgtimx6"
DISTRO = "fslc-wayland"
DISTRO_VERSION = "2.5"
TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard"
TARGET_FPU = "hard"
meta
meta-poky = "HEAD:86aaecf94852c8893770c86183bd6db4d4c61241"
meta-oe
meta-multimedia = "HEAD:b0950aeff5b630256bb5e25ca15f4d59c115e7c1"
meta-freescale = "HEAD:50fbef4593f79949ab6c67b2582d8b5c8b24838a"
meta-freescale-3rdparty = "HEAD:9cf6dc12c1fc24b234c42b81cd3a8ab0fb57e901"
meta-freescale-distro = "HEAD:f7e2216e93aff14ac32728a13637a48df436b7f4"

Initialising tasks: 100% |#######################################| Time: 0:00:00
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
WARNING: Variable key RPROVIDES_${KERNEL_PACKAGE_NAME}-base ( ${KERNEL_PACKAGE_NAME}-${KERNEL_VERSION}) replaces original key RPROVIDES_kernel-base ( kernel-module-imx-gpu-viv).
NOTE: Tasks Summary: Attempted 373 tasks of which 372 didn't need to be rerun and all succeeded.
NOTE: Writing buildhistory

Summary: There were 2 WARNING messages shown.

test1234@test1234:~/yocto/build$ bitbake linux-congatec -c diffconfig
WARNING: Host distribution "ubuntu-14.04" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.
Loading cache: 100% |############################################| Time: 0:00:00
Loaded 2315 entries from dependency cache.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION = "1.38.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "universal-4.8"
TARGET_SYS = "arm-fslc-linux-gnueabi"
MACHINE = "cgtimx6"
DISTRO = "fslc-wayland"
DISTRO_VERSION = "2.5"
TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard"
TARGET_FPU = "hard"
meta
meta-poky = "HEAD:86aaecf94852c8893770c86183bd6db4d4c61241"
meta-oe
meta-multimedia = "HEAD:b0950aeff5b630256bb5e25ca15f4d59c115e7c1"
meta-freescale = "HEAD:50fbef4593f79949ab6c67b2582d8b5c8b24838a"
meta-freescale-3rdparty = "HEAD:9cf6dc12c1fc24b234c42b81cd3a8ab0fb57e901"
meta-freescale-distro = "HEAD:f7e2216e93aff14ac32728a13637a48df436b7f4"

Initialising tasks: 100% |#######################################| Time: 0:00:00
NOTE: Executing RunQueue Tasks
WARNING: Variable key RPROVIDES_${KERNEL_PACKAGE_NAME}-base ( ${KERNEL_PACKAGE_NAME}-${KERNEL_VERSION}) replaces original key RPROVIDES_kernel-base ( kernel-module-imx-gpu-viv).
NOTE: Tasks Summary: Attempted 1 tasks of which 0 didn't need to be rerun and all succeeded.
NOTE: Writing buildhistory

Summary: There were 2 WARNING messages shown.

test1234@test1234:~/yocto/build/tmp/work/cgtimx6-fslc-linux-gnueabi/linux-congatec/4.9.88-r0$ ls
build deploy-rpms license-destdir packages-split recipe-sysroot sstate-install-package sstate-install-packagedata sysroot-destdir
defconfig git linux-congatec.spec pkgdata recipe-sysroot-native sstate-install-package_qa sstate-install-populate_lic temp
deploy-linux-congatec image package pseudo sstate-install-deploy sstate-install-package_write_rpm sstate-install-populate_sysroot
-----------------------------------------------------------------------------------------------------------------

多少時間がかかりますが、一度 -c clean を実行後に、bitbake -c menuconfig [カーネルレシピ] を実行して変更点を保存して終了。続けてbitbake -c diffconfig [カーネルレシピ] を実行することで、差分ファイルが生成されると考えます。

-c clean を実行は、
bitbake -c clean [カーネルレシピ] を実行する。
ということで認識合ってますでしょうか?

はい、上記の手順でワークエリアを削除します。

有難うございます。
もうひとつ確認したいのですが、menuconfigの変更をして保存する際の名前については、任意に決めて問題ないでしょうか?
例えばconfig_testなど。

menuconfigの保存時の名称は、特に何も指定しなくても良いのですね。試してみて大丈夫でした。
次の手順として下記の
3. fragment.cfg ファイルを、recipes-kernel/linux/linux-xxx/ ディレクトリ以下にコピーする。
について、xxxは、使用するカーネルのbbと同じ名称を使用とのことですが、このbbとは何でしょうか?

そして
4. bbappend ファイルに、SRCURI += "file://fragment.cfg" を追加する。
については、bbappendファイルも何処のディレクトリにあるのか教えてください。

不勉強ですみませんが教えてください。

弊社で実施しておりますYocto超実践講座の中で、linux-yocto のカスタマイズを取り上げています。
最初にyocto-layer create (Yocto2.5 以降はbitbake-layers create-layer) で新規レイヤーを作成し、
そのレイヤー内に以下の構成でディレクトリ・ファイルを作成します。
recipes-kernel ディレクトリ以下のツリー構成は、元々のlinux-yocto_x.xx.bb が存在する meta/
以下と同様の構成としています。
.
|-- conf
| `-- layer.conf
`-- recipes-kernel (recipes-* 以下のファイルをBBFILESとして扱うよう layer.conf の中で指定されています)
`-- linux (このディレクトリ以下に、各種linuxのレシピ(.bb)に対する差分ファイル(.bbappend)や追加ディレクトリを作成)
|-- linux-yocto (linux-yocto関連のファイルを保存するディレクトリ)
| `-- fragment.cfg (bitbake [カーネルレシピ] -c diffconfig の出力ファイル)
`-- linux-yocto_%.bbappend

質問のbb ファイルはカーネルのレシピファイルを指します。

で、注意点ですが、linux-yoctoの場合は、上記の手順で.config の変更が可能ですが、NXPから
リリースされているBSPの場合、 do_patch タスクにてfragment.cfg ファイルを使用した.config
ファイルの変更が行われますが、その後 do_copy_defconfig タスクが実行されてカーネルのソース
ツリー内のファイルを .config にコピーを行う処理が入っています。

お使いのBSPで、kernelのレシピに対して
bitbake -c listtasks を実行した際に、do_copydefconfig が含まれる場合は、別の方法でbbappend ファイルを
作成することになります。

追加質問です。
--------------------------------------------------------------------
bbappend ファイルで、FILESを追加する前に
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
の指定が必要となります。(レシピ名のみのディレクトリは、標準のファイル検索対象とならないため)
--------------------------------------------------------------------
と前の回答で教えて頂きましたが、FILESを追加する前にというのは、次のようにする事でしょうか?

bbappendファイル内に、
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRCURI += "file://fragment.cfg"
とする。
そして{THISDIR}は、どのディレクトリになるでしょうか?

すみませんが、おしてください。

=======================================
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
=======================================

上記の行に関する説明ですが、FILESEXTRAPATHS 変数に設定されている既存の文字列の前に
THISDIR → bbapend ファイルが保存されているディレクトリ
PN → レシピ名
レシピ名のディレクトリを追加しています。
つまり、bbappend が保存されているディレクトリの下に作成されたレシピ名のディレクトリも
ファイル検索を行う際のPATHに追加されるということです。

なお、bbappend が保存されているディレクトリ以下に、レシピ名-レシピバージョン のディレクトを
作成した場合は、bitbake のデフォルトの検索パスに含まれるため、FILESEXTRAPATHSへの追加は不要です。

アドバイスありがとうございます。
そもそもの質問ですが、

bbappendファイル格納しているディレクトは、
~/yocto/sources/meta-freescale-3rdparty/recipes-kernel/linuxの配下に
linux-congatec-4.9.88ディレクトリ
linux-congatec_4.9.88.bbファイル
linux-fslc_%.bbapendファイルがあります。

そしてレシピファイルは、
~yocto/build/tmp/work/cgtimx6-fslc-linux-gnueabi/linux-congatec
ちなみに、fragment.cfgファイルは、
~yocto/build/tmp/work/cgtimx6-fslc-linux-gnueabi/linux-congatec/4.9.88-r0の配下に入っています。

この構成で合っていますでしょうか?
ディレクトリのルートが異なるので気になっています。
すみませんが教えてください。

レシピと呼ばれるファイルは、linux-congatec_4.9.88.bb であり、meta-freescale-3rdparty/recipes-kernel/linux 以下に保存されています。
このレシピ内で指定しているファイルは、meta-freescale-3rdparty/recipes-kernel/linux/linux-congatec-4.9.88 以下に保存されています。
このレシピを用いて構築を行う場合のWORKDIR がbuild/tmp/work/cgtimx6-fslc-linux-gnueabi/linux-congatec/4.9.88-r0と となります。diffconfig の結果等は、WORKDIR以下に出力されます。

このレシピに対して、利用者が何らかの変更を行う場合、Yoctoの流儀では、既存のレシピの編集は行わず、新規にレイヤーを作成して、その中に差分をbbapprd として保存します。 
この方法を取ることで、将来 BSPの提供元から更新があった場合も、自身で行った変更は別のレイヤー内にあるため更新による変更の影響を受けません。

整理いただいてありがとうございます。
ひとまずmenuconfigで変更して試す事ができるようになりました。
いろいろ格闘してみます。