YOCTO 更改内核版本和 select 驱动程序

YOCTO Change kernel version and select drivers

我正在尝试使用 YoctoT1042D4RDB-64B 嵌入式板编译从 https://github.com/qoriq-open-source/linux(版本 4.9)获得的新 Linux 内核。目前正在使用 4.1.35-rt41.

我遵循了这些步骤:

  1. bitbake virtual/kernel -c cleansstate

  2. bitbake virtual/kernel -c 补丁

  3. 正在用我的新内核源代码替换 git 文件夹 (https://github.com/qoriq-open-source/linux)

  4. make ARCH=powerpc menuconfig

  5. bitbake virtual/kernel

结果是

新内核编译成功,但uImage中没有我需要的驱动。新内核只有4个驱动(deploy/images/t1042d4rdb-64b/rootfs.tar.gz),分别是"hid"、"input"、"misc"和"staging"。

Linux kernel 4.9里面有很多驱动文件夹,比如gpio,gpu,bluetooth,connector等等..

问题是

如何将我需要的驱动程序导入新的uImage并将它们放入板中?或者我如何编译这个内核和 select 所需的 modules/drivers?我想要像我的 Ubuntu 内核那样的丰富内核。

内核配置:

驱动选择发生在通过.config文件编译内核时。您可以通过 menuconfig 配置内核(包括使用的驱动程序):

bitbake -c menuconfig virtual/kernel

现在,您需要说服 bitbake 使用这些有效的更改。为此,您需要强制编译内核:

bitbake -f -c compile virtual/kernel

最后,您可以编译映像并将其烧写到目标上。

不过,这不会使更改永久生效。要使更改永久生效,您需要一个自定义层和一个 bbappend 文件。使用 devtool 很容易做到这一点。 yocto mega manual 详细解释了该过程。在这里,我将只解释非常基本的步骤。 运行

devtool modify virtual/kernel

将在本地分支上的 build/workspace/sources/linux-mainline 中添加一个临时工作副本(前提是您使用的内核称为 kernel-mainline)。您可以在这里进行所有想要的更改,并在您的硬件上进行尝试。一旦您高兴并想将这些更改添加到您的食谱中,您需要提交这些更改。 最后运行

devtool finish linux-mainline <path-to-your-layer> 

将自动生成一个 .bbappend 和一个 defconfig (.config) 文件并将其放入您的图层中。如果您想修补某些驱动程序等,您可能需要查看手册的 kernel-dev 部分。

内核版本选择:

我不太确定这个,但它应该像这样工作: 您需要一个已经可用的内核配方,作为 bitbake 已知的任何层的配方。如果您不确定,请查看 openembedded layer index 并搜索您要使用的内核版本,下载配方并将其放入您的层中。最后你需要告诉 bitbake 使用这个版本。这可以在 build/local.conf 配置文件中完成:

PREFERED_VERSION_linux-mainline = "5.3.11"

我从来没有尝试过最后一个,不知道它是否有效,也不知道这可能会破坏哪些其他依赖关系。

我通过将 Yocto 版本从 2.0 升级到 2.7 找到了解决方案。我使用的版本是为我的主板 (t1042d4rdb-64b) 新设计的,包括 linux 内核 4.19.xxx。安装说明可以在这里找到 https://source.codeaurora.org/external/qoriq/qoriq-components/yocto-sdk/tree/readme?h=yocto_2.7