繁体   English   中英

在 Yocto 中修改内核配置

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM