私は長い間、運が悪ければカーネル構成を変更しようとしました。 :-(
Meta-xxx-yyy /にBSPがあり、recipes-kernel/linux/linux_git.bbがあります。私は私のレシピ-kernel/linux/linux_git.bbappendとrecipes-kernel/linux/files/frag.cfgがあるmeta-xxx-mylayerという名前のレイヤーのカーネル構成を上書きしようとします
frag.cfg:
# CONFIG_NETFILTER is not set
CONFIG_AUTOFS4_FS=y
linux_git.bbappend:
COMPATIBLE_MACHINE_my_mach = "my_mach"
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += "file://frag.cfg"
linux_git.bb:(ファイルの一部)
KERNEL_RELEASE = "3.10"
PV = "3.10"
PR = "r10"
S = "${WORKDIR}/git"
COMPATIBLE_MACHINE = "(my_mach)"
meta-xxx-yyy/conf/machine/my_mach.conf:(meta-xxx-mylayer/conf/machine/my_mach.confはありません)
PREFERRED_PROVIDER_virtual/kernel = "linux"
UBOOT_MACHINE = "socfpga_cyclone5_config"
KERNEL_MACHINE = "socfpga"
ビルドコマンド:
bitbake linux -c cleansstate -f
bitbake linux -c configure -f
bitbake linux -c compile -f
bitbake linux -c deploy -f
すべてがビルドされますが、/ proc/config.gzを調べると、CONFIG_AUTOFS4_FSが有効になっていないことがわかります。
Meta-xxx-mylayerレイヤーに別のレシピがあり、rootfsにビルドしてインストールするので、レイヤーが有効になっていることがわかります。
Frag.cfgファイルはビルド中に./tmp/work/my_mach-poky-linux-gnueabi/linux/3.10-r10/にコピーされますが、残りのファイルは./tmp/work/my_mach-poky-linuxにあります-gnueabi/linux/3.10-r10/git /。問題ありますか?
私は何を間違っているのですか???
実際のカーネルレシピを見ずに答えるのは難しいですが、おそらく起こっているのは、socfpgaのカーネルレシピはカーネルを継承するだけで、linux-yoctoではないということです。その場合、フラグメントを使用して構成を変更することはできません。完全なdefconfigを提供する必要があります。
Yoctoでmenuconfig
を使用してkernel configを変更する簡単な方法は次のとおりです:-
bitbake -c menuconfig virtual/kernel
多分遅いけど...
カーネル開発には、独自の変更方法があります。昨日ここに投稿しましたが、自分の間違いを理解していたのですぐ消しました。正確な手順は入れません。簡単な説明。それらは特別なものではないので、yocto devマニュアルで見つける必要があります。
カーネルの変更は、ソース(通常は/ workdir/tmp /内)で直接行う必要があります。そして、gitを使用してパッチを作成します。 bitbake -c menuconfig virtual/kernelなどを使用して構成を変更する場合は、カーネル.bbappendファイルに直接追加してください。それは間違いなく動作します。私はほぼ同じようにdevtoolを試してみましたが、パッチはマージされませんでした。
Alexandre Belloni に同意しますが、多少の修正はあります。カーネルレシピ(linux_git.bb)がカーネルから継承し、kernel-yoctoを継承しない場合、構成フラグメントを使用できません。
残念ながら、ドキュメントでこれについての説明を見ることができませんでしたが、
kernel-yocto.bbclass:
# returns all the elements from the src uri that are .scc files
def find_sccs(d):
sources=src_patches(d, True)
sources_list=[]
for s in sources:
base, ext = os.path.splitext(os.path.basename(s))
if ext and ext in [".scc", ".cfg"]:
sources_list.append(s)
Elif base and base in 'defconfig':
sources_list.append(s)
return sources_list
sccs="$sccs ${@" ".join(find_sccs(d))}"
patches="${@" ".join(find_patches(d))}"
feat_dirs="${@" ".join(find_kernel_feature_dirs(d))}"
# updates or generates the target description
updateme ${updateme_flags} -DKDESC=${KMACHINE}:${LINUX_KERNEL_TYPE} \
${includes} ${addon_features} ${Arch} ${KMACHINE} ${sccs} ${patches}
拡張子が.cfgのファイルがsccs変数に追加され、updatemeカーネルツールで使用されることがわかります。
カーネル構成フラグの依存関係は適切に解決されていますか?これはこの場合の問題だと思います