ddy*_*dyn 2 linux linux-kernel yocto
我有 i.mx6 的 Yocto 版本,我想修改它的内核。我认为如果我复制 Yocto 项目之外的内核源代码并进行修改而不处理补丁,我可以显着加快速度。但问题是,我必须使用的内核源已经修补,我想从那里获取并继续工作。我将处理已经修补的源文件,重新排列它们是一个痛苦的过程。
首先,我的补丁工作正常,我可以使用bitbake fsl-image-multimedia-full
命令获取工作图像。我想要使用的内核源是在此过程之后创建的。
我尝试将源复制到..../tmp/work-shared/imx6qsabresd/kernel-source
. 尽管顺利make zImage
完成make modules
,但手动构建并未成功,dtsi 文件中出现错误(无法解析...)。当然,我检查过文件,没有语法错误。
另外,我检查了我复制的内核源文件,看来补丁已成功实施。
我对补丁做错了什么吗?通过我的手动构建例程,我可以毫无错误地构建未修补的内核源代码。我确信这里有经验丰富的 Yocto 用户有他们自己的解决方法来缩短这个过程。因此,我们非常感谢任何帮助。提前致谢。
在 Yocto 项目中进行内核开发时,我最喜欢的方法是创建 SDK 并在 Yocto 系统外部构建内核。这允许更快速的构建,因为make
只会构建新的更改,而 Yocto 中的内核构建总是从头开始。
以下是我在 Yocto 系统之外编译 Linux 内核的一些笔记。其确切路径取决于您的确切配置和软件版本。就你而言,IMAGE_NAME=fsl-image-multimedia-full
跑步bitbake -c populate_sdk ${IMAGE_NAME}
。您将获得一个自解压和自安装的 shell 脚本。
运行 shell 脚本(对我来说是
tmp/deploy/sdk/${NAME}-glibc-i686-${IMAGE_NAME}-cortexa9hf-neon-toolchain-1.0.0.sh
),并同意默认的 SDK 位置(对我来说是
usr/local/oecore-i686
)。
获取安装脚本生成的脚本。我使用以下帮助程序脚本来加载 SDK,因此我不必跟踪所涉及的路径。每次您想要使用 SDK 时都需要获取它。
启用_sdk.sh:
#!/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
Run Code Online (Sandbox Code Playgroud)
将文件从 Yocto 目录复制defconfig
到内核目录(在 Yocto 树之外的某个位置检出),格式为
.config
.
在您的内核目录中运行make oldconfig
,以便 Linux 内核构建系统选择现有的.config
.
注意:您可能需要回答有关文件中未设置的配置选项的问题.config
。
注意:make menuconfig
启用SDK后,运行会失败,因为SDK没有ncurses
正确设置库。对于此命令,请在未启用 SDK 的新终端中运行它,以便它使用您已安装的本地 ncurses-dev 软件包。
运行make -jN
以构建内核。
要运行新内核,请将zImage
和${NAME}.dtb
文件复制到 NFS/TFTP 共享或引导设备。我使用另一个脚本来加速该过程。
update_kernel.sh:
#!/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
Run Code Online (Sandbox Code Playgroud)
您还可以将 Yocto 指向.bb
文件中的本地 Linux 存储库。这对于确保您的内核更改仍然在 Yocto 中正确构建非常有用。
SRC_URI = "git:///path-to-linux-source/.git/;branch=${KBRANCH};protocol=file"
更新:一年多后,我意识到我完全错过了有关损坏补丁的问题。如果没有更多信息,我无法确定将内核源代码从 Yocto 复制到外部构建时出了什么问题。我建议为内核打开一个 Bitbake devshell,并在手动应用补丁后与外部目录进行比较,以查看出了什么问题,或者只是将源代码从 devshell 内部复制到外部目录。 https://www.yoctoproject.org/docs/1.4.2/dev-manual/dev-manual.html#platdev-appdev-devshell
当调试某些命令甚至只是编辑包时,devshell 可能是一个有用的工具。当您调用 devshell 时,源文件将被提取到您的工作目录中并应用补丁。