[英]modifying kernel config in Yocto
我试图在没有运气的情况下修改内核配置。
在 meta-xxx-yyy/ 中有一个带有recipes-kernel/linux/linux_git.bb
的 BSP。 我尝试在名为 meta-xxx-mylayer 的层中覆盖内核配置,其中我有recipes-kernel/linux/linux_git.bbappend and recipes-kernel/linux/files/frag.cfg
片段.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 开发手册中找到它们,因为它不是什么特别的东西。
内核更改应直接在源上进行(通常在 /workdir/tmp/ 中)。 然后用 git 打补丁。 如果您使用 bitbake -c menuconfig virtual/kernel 或其他方式更改配置,请像您一样将其直接放入内核 .bbappend 文件中。 这绝对有效。 我尝试使用几乎相同的 devtool,并且补丁没有合并。
在 Yocto 中使用menuconfig
修改内核配置的简单方法是:-
bitbake -c menuconfig virtual/kernel
我同意Alexandre Belloni的观点,但稍作修正。 如果您的内核配方 (linux_git.bb) 仅继承自 kernel 而不是kernel -yocto,那么您不能使用配置片段。
不幸的是,我无法在文档中看到对此的任何解释,但查看
内核-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 内核工具中使用。
您的内核配置标志的依赖关系是否正确解决? 我想这将是这种情况下的问题
可能有两个问题。 首先,无论其名称如何,您的元层的优先级都低于原始内核的元。 请检查您的元层的优先级。
其次,使用devtool
隔离内核,使用命令devtool modify virtual/kernel
然后尝试在该内核中进行更改,该内核将位于workspace/sources/whatever-the-name-of-your-kernel
中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.