3

我正在为 SBC Pine64 开发一个 bsp 层,并且我的图像已成功生成,但是从busybox 启动 init 时出现“致命:内核太旧”。我检查了我的 busybox 二进制文件,它正在为内核 3.14.0 编译。

我的内核是 3.10 版,我使用了 Linaro 5.3 工具链。我尝试添加:OLDEST_KERNEL = "3.10.0" 并且我也尝试使用 Linaro 4.9,但我仍然遇到同样的错误。我正在使用 yocto Krogoth 并生成 core-image-minial。请参阅下面的引导日志中的错误片段:

[13.068932] EXT4-fs (mmcblk0p2): couldn't mount as ext3 due to feature incompatibilities
[13.086717] EXT4-fs (mmcblk0p2): couldn't mount as ext2 due to feature incompatibilities
[13.112988] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[13.127040] VFS: Mounted root (ext4 filesystem) readonly on device 179:2.
[13.143393] devtmpfs: mounted
[13.151972] Freeing unused kernel memory: 520K (ffffffc0009e4000 - ffffffc000a66000)
FATAL: kernel too old
[13.198566] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f00
[13.198566]
[13.218884] CPU: 2 PID: 1 Comm: init Not tainted 3.10.102-pine64 #1
[13.230876] Call trace:

如何配置 yocto 为内核 3.10.0 编译 linaro eglibc?

谢谢,蒙特兹

4

1 回答 1

3

当您想要覆盖不是“软分配”的现有变量时,也就是说不使用?=语法而是使用=语法,您需要使用OVERRIDES中的变量之一作为更改值的一部分。你可以看到覆盖是如何工作的,就像我们在 conf/bitbake.conf 中一样:

##################################################################
# Kernel info.
##################################################################

OLDEST_KERNEL = "3.2.0"
OLDEST_KERNEL_aarch64 = "3.14"
OLDEST_KERNEL_nios2 = "3.19"

并且aarch64已在您的覆盖列表中找到。幸运的是,该列表中还有其他值,并且在评估变量时,OVERRIDES列表中后面的值优先。因此,在您的 local.conf 中,您可以执行以下操作:

OLDEST_KERNEL_forcevariable = "3.10"

然后确认已经生效:

$ bitbake -e busybox | grep -E ^OLDEST_KERNEL=
OLDEST_KERNEL="3.10"
于 2016-08-23T11:56:07.163 回答