在Yocto中修改内核配置

时间:2015-06-24 20:24:36

标签: linux linux-kernel embedded-linux yocto bitbake

我已经尝试了很长时间没有运气修改内核配置。 : - (

meta-xxx-yyy中有一个BSP / recipes-kernel / linux / linux_git.bb。 我尝试在我所拥有的名为meta-xxx-mylayer的层中覆盖内核配置 recipes-kernel / linux / linux_git.bbappend和recipes-kernel / linux / files / frag.cfg

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)"

元-XXX-YYY / CONF /机/ 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-狭小-Linux的gnueabi / LINUX / 3.10-R10 / git的/。这是一个问题吗?

我做错了什么???

5 个答案:

答案 0 :(得分:5)

如果没有看到真正的内核配方很难回答,但可能发生的事情是socfpga的内核配方只是inhertis内核而不是linux-yocto。如果是这种情况,那么您无法使用片段更改配置,您必须提供完整的defconfig。

答案 1 :(得分:3)

也许已经晚了但是......

内核开发有自己的方法进行更改。我昨天在这里发了一篇文章,但我明白我错了,所以我马上把它删了。 我不会说出确切的步骤。只是简短的描述。你应该在yocto dev手册中找到它们,因为它不是特别的东西。

内核更改应直接在源上进行(通常在/ workdir / tmp /中)。然后使用git制作补丁。 如果使用bitbake -c menuconfig virtual / kernel或其他方式更改配置,请将其直接放在内核.bbappend文件中。这绝对有效。 我尝试使用几乎相同的devtool并且补丁没有合并。

答案 2 :(得分:3)

我同意Alexandre Belloni,但稍作修正。如果您的内核配方(linux_git.bb)仅继承自内核而不是内核 -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内核工具中使用。

答案 3 :(得分:1)

在Yocto中使用menuconfig修改内核配置的简单方法是:-

bitbake -c menuconfig virtual/kernel

答案 4 :(得分:0)

是否正确解析了内核配置标志的依赖关系?我想在这种情况下这将是问题