我有一个针对i.mx6的Yocto构建,我想修改它的内核。我想如果我在Yocto项目之外复制内核源代码并在不处理补丁的情况下进行修改,我可以大大加快速度。但事实是,我必须使用的内核源代码已经修补,我想从那里获取并继续工作。我将处理已修补的源文件并重新安排它们是一个痛苦的过程。
对于起点,我的补丁工作正常,我可以使用bitbake fsl-image-multimedia-full
命令获得工作映像。我想要使用的内核源是在此过程之后创建的。
我尝试在..../tmp/work-shared/imx6qsabresd/kernel-source
下复制来源。尽管make zImage
和make modules
没有遇到任何问题,但是在dtsi文件中出现错误(无法解析...)时手动构建不成功。当然,我已检查过该文件,并且没有语法错误。
另外,我检查了我复制的内核源文件,似乎补丁已成功实现。
我是否在修补补丁方面做错了什么?使用我的手动构建例程,我可以构建未修补的内核源代码而没有错误。我确信这里有经验丰富的Yocto用户有自己的解决方法来缩短这个过程。所以,任何帮助表示赞赏。提前致谢。
答案 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
运行IMAGE_NAME=fsl-image-multimedia-full
。你会得到一个
自解压和自安装的Shell脚本。
运行shell脚本(对我来说,
bitbake -c populate_sdk ${IMAGE_NAME}
),
并同意默认的SDK位置(对我来说,
tmp/deploy/sdk/${NAME}-glibc-i686-${IMAGE_NAME}-cortexa9hf-neon-toolchain-1.0.0.sh
。
获取由安装脚本生成的脚本。我用 以下帮助程序脚本来加载SDK,因此我不必保留 跟踪所涉及的路径。您每次都需要采购 您要使用SDK。
enable_sdk.sh :
usr/local/oecore-i686
将#!/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
。
在内核目录中运行.config
,以便Linux
内核构建系统选择现有的make oldconfig
。
注意:您可能需要回答有关配置选项的问题
.config
文件中未设置。
注意:启用SDK后,运行.config
将会失败,
因为SDK没有设置make menuconfig
库
正确地。对于此命令,请在没有
启用了SDK,以便它使用您的本地ncurses-dev软件包
已安装。
运行ncurses
来构建内核。
要运行新内核,请将make -jN
和zImage
文件复制到
您的NFS / TFTP共享或引导设备。我使用另一个脚本来加快速度
update_kernel.sh :
${NAME}.dtb
您也可以在#!/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