从Yocto build手动构建内核源代码

时间:2017-11-22 08:10:58

标签: linux linux-kernel yocto

我有一个针对i.mx6的Yocto构建,我想修改它的内核。我想如果我在Yocto项目之外复制内核源代码并在不处理补丁的情况下进行修改,我可以大大加快速度。但事实是,我必须使用的内核源代码已经修补,我想从那里获取并继续工作。我将处理已修补的源文件并重新安排它们是一个痛苦的过程。

对于起点,我的补丁工作正常,我可以使用bitbake fsl-image-multimedia-full命令获得工作映像。我想要使​​用的内核源是在此过程之后创建的。

我尝试在..../tmp/work-shared/imx6qsabresd/kernel-source下复制来源。尽管make zImagemake modules没有遇到任何问题,但是在dtsi文件中出现错误(无法解析...)时手动构建不成功。当然,我已检查过该文件,并且没有语法错误。

另外,我检查了我复制的内核源文件,似乎补丁已成功实现。

我是否在修补补丁方面做错了什么?使用我的手动构建例程,我可以构建未修补的内核源代码而没有错误。我确信这里有经验丰富的Yocto用户有自己的解决方法来缩短这个过程。所以,任何帮助表示赞赏。提前致谢。

3 个答案:

答案 0 :(得分:1)

您还可以在tmp/work-shared/<machine>/kernel-source中编辑文件,然后使用bitbake -C compile virtual/kernel

编译修改后的内核

答案 1 :(得分:0)

由于它无法解析它,因此修补程序似乎存在问题。你如何修补设备树?你在.bb文件中修补它吗?

如果是这样,请检查补丁是否存在可能的语法错误,很容易忽略设备树中的语法错误。您可以删除修补程序并从bitbake -c devshell <kernel-name>

手动执行

如果没有,请尝试在那里再次检查。如果其中任何一项对您有帮助,请分享结果。

答案 2 :(得分:0)

我最喜欢的在Yocto项目中进行内核开发的方法是创建一个SDK,并在Yocto系统之外构建内核。这样可以加快构建速度,因为import * as sinon from 'sinon'; test('withArgs', () => { const stub = sinon.stub(); stub.withArgs(25).returns('first arg is 25!'); stub.returns('default response'); expect(stub(25)).toBe('first arg is 25!'); // SUCCESS expect(stub(25, function () { }, function () { })).toBe('first arg is 25!'); // SUCCESS expect(stub(10, function () { }, function () { })).toBe('default response'); // SUCCESS }); 只会构建新的更改,而Yocto中的内核构建总是从头开始。

以下是我在Yocto系统之外编译Linux内核的一些说明。确切的路径将取决于您的确切配置和软件版本。就您而言,make

  1. 运行IMAGE_NAME=fsl-image-multimedia-full。你会得到一个 自解压和自安装的Shell脚本。

  2. 运行shell脚本(对我来说, bitbake -c populate_sdk ${IMAGE_NAME}), 并同意默认的SDK位置(对我来说, tmp/deploy/sdk/${NAME}-glibc-i686-${IMAGE_NAME}-cortexa9hf-neon-toolchain-1.0.0.sh

  3. 获取由安装脚本生成的脚本。我用 以下帮助程序脚本来加载SDK,因此我不必保留 跟踪所涉及的路径。您每次都需要采购 您要使用SDK。

enable_sdk.sh

usr/local/oecore-i686
  1. #!/bin/bash if [[ "$0" = "$BASH_SOURCE" ]] then echo "Error: you must source this script." exit 1 fi source /usr/local/oecore-i686/environment-setup-corei7-32-${NAME}-linux source /usr/local/oecore-i686/environment-setup-cortexa9hf-neon-${NAME}-linux-gnueabi 文件从Yocto目录复制到内核 目录(在Yocto树之外的某个地方签出)为 defconfig

  2. 在内核目录中运行.config,以便Linux 内核构建系统选择现有的make oldconfig

    注意:您可能需要回答有关配置选项的问题 .config文件中未设置。

    注意:启用SDK后,运行.config将会失败, 因为SDK没有设置make menuconfig库 正确地。对于此命令,请在没有 启用了SDK,以便它使用您的本地ncurses-dev软件包 已安装。

  3. 运行ncurses来构建内核。

  4. 要运行新内核,请将make -jNzImage文件复制到 您的NFS / TFTP共享或引导设备。我使用另一个脚本来加快速度

update_kernel.sh

${NAME}.dtb
  1. 您也可以在#!/bin/bash set -x sudo cp /path-to-linux-source/arch/arm/boot/dts/${NAME}.dtb /srv/nfs/${DEVICE}/boot/ sudo cp /path-to-linux-source/arch/arm/boot/zImage /srv/nfs/${DEVICE}/boot/ set +x 中将Yocto指向本地Linux存储库 文件。这对于确保您的内核仍然保持更改很有用 在Yocto内正确构建。

    .bb