2常见任务

2常见任务

目录

2常见任务

2.1准备构建主机以在内核上工作

2.1.1准备开发使用devtool

2.1.2为传统内核开发做好准备

2.2创建和准备图层

2.3修改现有配方

2.3.1创建追加文件

2.3.2应用补丁

2.3.3更改配置

2.3.4使用“树内”  defconfig文件

2.4使用devtool到内核打补丁

2.5使用传统内核开发打补丁内核

2.6配置内核

2.6.1使用  menuconfig

2.6.2创建  defconfig文件

2.6.3创建配置分片

2.6.4验证配置

2.6.5微调内核配置文件

2.7扩展变量

2.8使用“脏”内核版本字符串

2.9使用自己的资源

2.10使用树外模块

2.10.1在目标上构建树外模块

2.10.2合并树外模块

2.11检查变更和提交

2.11.1内核发生了什么变化?

2.11.2显示特定特征或分支变化

2.12添加配方空间内核功能


本章介绍了使用 Yocto Project Linux 内核时执行的几个常见任务。这些任务包括为内核开发准备主机开发系统、准备层、修改现有配方、修补内核、配置内核、迭代开发、使用您自己的源代码以及合并树外模块。

注意

本章中提供的示例适用于 Yocto Project 2.4 Release 及更高版本。

2.1准备构建主机以在内核上工作

在您进行任何内核开发之前,您需要确保您的构建主机已设置为使用 Yocto 项目。有关如何设置的信息,请参阅Yocto 项目开发任务手册中的“设置以使用 Yocto 项目”部分。准备系统的一部分是在您的系统上创建源目录poky)的本地 Git 存储库 。按照Yocto 项目开发任务手册中“克隆 poky 存储库”部分中的步骤设置源目录。

注意

确保您签出适当的开发分支或通过签出特定标签来创建本地分支以获得所需的 Yocto 项目版本。有关更多信息,请参阅Yocto 项目开发任务手册中的“在 Poky 中通过分支签出”和“在 Poky 中通过标签签出”部分。

内核开发最好使用devtool来完成, 而不是通过传统的内核工作流方法。本节的其余部分提供了这两种情况的信息。

2.1.1准备开发使用devtool

按照以下步骤准备使用 devtool. 完成此过程后,您将获得一个干净的内核映像,并准备好进行修改,如“使用 devtool 修补内核”部分所述:

  1. 初始化 BitBake 环境:在构建可扩展 SDK 之前,您需要通过获取构建环境脚本(即oe-init-build-env)来初始化 BitBake 构建环境:

    $ cd poky
    $ source oe-init-build-env
    

    注意

    前面的命令假设 Yocto 项目源存储库 (即poky)已使用 Git 克隆,并且本地存储库名为“poky”。

  2. 准备您的 local.conf 文件:默认情况下, MACHINE变量设置为“qemux86-64”,如果您在 64 位模式下为 QEMU 模拟器构建,这很好。但是,如果不是,则需要在构建目录(即 在本例中)中找到的文件中 适当地设置 MACHINE变量。conf/local.confpoky/build

    此外,由于您正准备处理内核映像,因此需要设置 MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS 变量以包含内核模块。

    在这个例子中,我们希望为 qemux86 构建,所以我们必须将MACHINE变量设置 为“qemux86”并添加“kernel-modules”。如上所述,我们通过附加到conf/local.conf

    MACHINE = "qemux86"
    MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-modules"
    
  3. 为补丁创建一个层:您需要创建一个层来保存为内核映像创建的补丁。您可以使用以下 命令:bitbake-layers create-layer

    $ cd poky/build
    $ bitbake-layers create-layer ../../meta-mylayer
    NOTE: Starting bitbake server...
    Add your new layer with 'bitbake-layers add-layer ../../meta-mylayer'
    $
    

    注意

    有关使用公共层和 BSP 层的背景信息,请分别参见Yocto 项目开发任务手册中的“理解和创建层”部分和Yocto 项目板支持 (BSP) 开发人员指南中的“ BSP 层”部分。有关如何使用命令快速设置图层的信息,请参阅Yocto 项目开发任务手册中的“使用 bitbake-layers 脚本创建通用图层”部分。bitbake-layers create-layer

  4. 通知 BitBake 构建环境关于您的层:按照您创建层时的指示,您需要将层添加到文件中的 BBLAYERS变量中 bblayers.conf,如下所示:

    $ cd poky/build
    $ bitbake-layers add-layer ../../meta-mylayer
    NOTE: Starting bitbake server...
    $
    
  5. 构建可扩展 SDK:使用 BitBake 构建可扩展 SDK,专门用于使用 QEMU 运行的图像:

    $ cd poky/build
    $ bitbake core-image-minimal -c populate_sdk_ext
    

    构建完成后,您可以*.sh在以下目录中找到 SDK 安装程序文件(即 文件):

    poky/build/tmp/deploy/sdk
    

    对于此示例,安装程序文件名为 poky-glibc-x86_64-core-image-minimal-i586-toolchain-ext-3.3.2.sh.

  6. 安装可扩展 SDK:使用以下命令安装 SDK。对于本示例,将 SDK 安装在默认 poky_sdk目录中:

    $ cd poky/build/tmp/deploy/sdk
    $ ./poky-glibc-x86_64-core-image-minimal-i586-toolchain-ext-3.3.2.sh
    Poky (Yocto Project Reference Distro) Extensible SDK installer version 3.3.2
    ============================================================================
    Enter target directory for SDK (default: poky_sdk):
    You are about to install the SDK to "/home/scottrif/poky_sdk". Proceed [Y/n]? Y
    Extracting SDK......................................done
    Setting it up...
    Extracting buildtools...
    Preparing build system...
    Parsing recipes: 100% |#################################################################| Time: 0:00:52
    Initializing tasks: 100% |############## ###############################################| Time: 0:00:04
    Checking sstate mirror object availability: 100% |######################################| Time: 0:00:00
    Parsing recipes: 100% |#################################################################| Time: 0:00:33
    Initializing tasks: 100% |##############################################################| Time: 0:00:00
    done
    SDK has been successfully set up and is ready to be used.
    Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
     $ . /home/scottrif/poky_sdk/environment-setup-i586-poky-linux
    
  7. 设置新终端以使用可扩展 SDK:您必须设置新终端以使用 SDK。您不能使用用于构建安装程序的同一个 BitBake shell。

    打开新 shell 后,按照安装 SDK 输出的指示运行 SDK 环境设置脚本:

    $ source poky_sdk/environment-setup-i586-poky-linux
    "SDK environment now set up; additionally you may now run devtool to perform development tasks.
    Run devtool --help for further details.
    

    注意

    如果您收到有关尝试在设置为运行 BitBake 的环境中使用可扩展 SDK 的警告,则您没有使用新的 shell。

  8. 构建干净的镜像:准备在内核上工作的最后一步是devtool在您刚刚为 SDK 工作设置和初始化的新终端中使用构建初始镜像:

    $ devtool build-image
    Parsing recipes: 100% |##########################################| Time: 0:00:05
    Parsing of 830 .bb files complete (0 cached, 830 parsed). 1299 targets, 47 skipped, 0 masked, 0 errors.
    WARNING: No packages to add, building image core-image-minimal unmodified
    Loading cache: 100% |############################################| Time: 0:00:00
    Loaded 1299 entries from dependency cache.
    NOTE: Resolving any missing task queue dependencies
    Initializing tasks: 100% |#######################################| Time: 0:00:07
    Checking sstate mirror object availability: 100% |###############| Time: 0:00:00
    NOTE: Executing SetScene Tasks
    NOTE: Executing RunQueue Tasks
    NOTE: Tasks Summary: Attempted 2866 tasks of which 2604 didn't need to be rerun and all succeeded.
    NOTE: Successfully built core-image-minimal. You can find output files in /home/scottrif/poky_sdk/tmp/deploy/images/qemux86
    

    如果您是为实际硬件而不是为仿真而构建,您可以将映像刷入 U 盘/dev/sdd并启动您的设备。有关使用 Minnowboard 的示例,请参阅 TipsAndTricks / KernelDevelopmentWithEsdk Wiki 页面。

此时,您已设置好开始使用可扩展 SDK 修改内核。有关继续的示例,请参阅“使用 devtool 修补内核”部分。

2.1.2为传统内核开发做好准备

使用 Yocto 项目为传统内核开发做好准备涉及许多与上一节中描述的相同的步骤。但是,您需要建立内核源代码的本地副本,因为您将编辑这些文件。

按照以下步骤准备使用 Yocto 项目的传统内核开发流程更新内核映像。完成此过程后,您就可以按照“使用传统内核开发修补内核”部分中的说明对内核源代码进行修改:

  1. 初始化 BitBake 环境:在使用 BitBake 执行任何操作之前,您需要通过获取构建环境脚本(即oe-init-build-env)来初始化 BitBake 构建环境 。此外,对于此示例,请确保您签出的本地分支poky是 Yocto Project Hardknott 分支。如果您需要检出 Hardknott 分支,请参阅Yocto 项目开发任务手册中的“通过Poky 中的分支检出”部分。

    $ cd poky
    $ git branch
    master
    * hardknott
    $ source oe-init-build-env
    

    注意

    前面的命令假设 Yocto 项目源存储库 (即poky)已使用 Git 克隆,并且本地存储库名为“poky”。

  2. 准备您的 local.conf 文件:默认情况下, MACHINE变量设置为“qemux86-64”,如果您在 64 位模式下为 QEMU 模拟器构建,这很好。但是,如果不是,则需要在构建目录(即 在本例中)中找到的文件中 适当地设置 MACHINE变量。conf/local.confpoky/build

    此外,由于您正准备处理内核映像,因此需要设置 MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS 变量以包含内核模块。

    在这个例子中,我们希望为 qemux86 构建,所以我们必须将MACHINE变量设置 为“qemux86”并添加“kernel-modules”。如上所述,我们通过附加到conf/local.conf

    MACHINE = "qemux86"
    MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-modules"
    
  3. 为补丁创建一个层:您需要创建一个层来保存为内核映像创建的补丁。您可以使用以下 命令:bitbake-layers create-layer

    $ cd poky/build
    $ bitbake-layers create-layer ../../meta-mylayer
    NOTE: Starting bitbake server...
    Add your new layer with 'bitbake-layers add-layer ../../meta-mylayer'
    

    注意

    有关使用公共层和 BSP 层的背景信息,请分别参见Yocto 项目开发任务手册中的“理解和创建层”部分和Yocto 项目板支持 (BSP) 开发人员指南中的“ BSP 层”部分。有关如何使用命令快速设置图层的信息,请参阅Yocto 项目开发任务手册中的“使用 bitbake-layers 脚本创建通用图层”部分。bitbake-layers create-layer

  4. 通知 BitBake 构建环境关于您的层:按照您创建层时的指示,您需要将层添加到文件中的 BBLAYERS变量中 bblayers.conf,如下所示:

    $ cd poky/build
    $ bitbake-layers add-layer ../../meta-mylayer
    NOTE: Starting bitbake server ...
    $
    
  5. 创建内核 Git 存储库的本地副本:您可以在位于https://git.yoctoproject.org/cgit/cgit.cgi/的 Yocto 项目源存储库中的“Yocto Linux 内核”下找到受支持的 Yocto 项目内核的 Git 存储库 .

    为简单起见,建议您在Source Directory之外创建内核 Git 存储库的副本, 通常名为poky. 另外,请确保您在 standard/base分支中。

    以下命令显示了如何创建linux-yocto-4.12内核的本地副本 并位于standard/base分支中。

    注意

    linux-yocto-4.12内核可用于 Yocto Project 2.4 版本及以后版本。您不能linux-yocto-4.12在 Yocto Project 2.4 之前的版本中使用内核。

    $ cd ~
    $ git clone git://git.yoctoproject.org/linux-yocto-4.12 --branch standard/base
    Cloning into 'linux-yocto-4.12'...
    remote: Counting objects: 6097195, done.
    remote: Compressing objects: 100% (901026/901026), done.
    remote: Total 6097195 (delta 5152604), reused 6096847 (delta 5152256)
    Receiving objects: 100% (6097195/6097195), 1.24 GiB | 7.81 MiB/s, done.
    Resolving deltas: 100% (5152604/5152604), done. Checking connectivity... done.
    Checking out files: 100% (59846/59846), done.
    
  6. 创建内核缓存 Git 存储库的本地副本:为简单起见,建议您在源目录之外创建内核缓存 Git 存储库的副本, 通常名为poky. 此外,对于此示例,请确保您在yocto-4.12分支中。

    以下命令显示了如何创建 的本地副本 yocto-kernel-cache并切换到yocto-4.12分支:

    $ cd ~
    $ git clone git://git.yoctoproject.org/yocto-kernel-cache --branch yocto-4.12
    Cloning into 'yocto-kernel-cache'...
    remote: Counting objects: 22639, done.
    remote: Compressing objects: 100% (9761/9761), done.
    remote: Total 22639 (delta 12400), reused 22586 (delta 12347)
    Receiving objects: 100% (22639/22639), 22.34 MiB | 6.27 MiB/s, done.
    Resolving deltas: 100% (12400/12400), done.
    Checking connectivity... done.
    

此时,您已准备好开始使用传统的内核开发步骤对内核进行修改。有关继续的示例,请参阅“使用传统内核开发来修补内核”部分。

2.2创建和准备图层

如果您要修改内核配方,建议您创建并准备您自己的层来完成您的工作。您的层包含自己的BitBake 附加文件 ( .bbappend),并提供了一种方便的机制来创建您自己的配方文件 ( .bb) 以及存储和使用内核补丁文件。有关使用图层的背景信息,请参阅Yocto 项目开发任务手册中的“理解和创建图层”部分。

注意

Yocto 项目附带了许多工具,可以简化您需要执行的任务。 命令就是这样一种工具,它可以简化创建新图层的过程。有关如何使用此脚本快速设置新层的信息,请参阅Yocto 项目开发任务手册中的“使用 bitbake-layers 脚本创建通用层”部分。bitbake-layers create-layer

为了更好地理解您为内核开发创建的层,以下部分将介绍如何在不借助工具的情况下创建层。这些步骤假设创建了一个mylayer在您的主目录中命名的层:

  1. 创建结构:创建层的结构:

    $ mkdir meta-mylayer
    $ mkdir meta-mylayer/conf
    $ mkdir meta-mylayer/recipes-kernel
    $ mkdir meta-mylayer/recipes-kernel/linux
    $ mkdir meta-mylayer/recipes-kernel/linux/linux-yocto
    

    conf目录保存您的配置文件,而该 recipes-kernel目录保存您的附加文件和最终补丁文件。

  2. 创建图层配置文件:移动到 meta-mylayer/conf目录并创建layer.conf文件,如下所示:

    # We have a conf and classes directory, add to BBPATH
    BBPATH .= ":${LAYERDIR}"
    
    # We have recipes-* directories, add to BBFILES
    BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
                ${LAYERDIR}/recipes-*/*/*.bbappend"
    
    BBFILE_COLLECTIONS += "mylayer"
    BBFILE_PATTERN_mylayer = "^${LAYERDIR}/"
    BBFILE_PRIORITY_mylayer = "5"
    

    请注意mylayer作为最后三个陈述的一部分。

  3. 创建内核配方附加文件:移动到 meta-mylayer/recipes-kernel/linux目录并创建内核的附加文件。本示例使用linux-yocto-4.12 内核。因此,附加文件的名称是 linux-yocto_4.12.bbappend

    FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
    
    SRC_URI:append = " file://patch-file-one.patch"
    SRC_URI:append = " file://patch-file-two.patch"
    SRC_URI:append = " file://patch-file-three.patch"
    

    FILESEXTRAPATHSSRC_URI语句使OpenEmbedded构建系统查找补丁文件。有关使用附加文件的更多信息,请参阅Yocto 项目开发任务手册中的“将其他层元数据与您的层一起附加”部分。

2.3修改现有配方

在许多情况下,您可以自定义现有的 linux-yocto 配方以满足您的项目需求。Yocto 项目的每个版本都提供了一些 Linux 内核配方供您选择。这些位于源目录中 meta/recipes-kernel/linux

修改现有配方可以包括以下内容:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值