Yus*_*mak 4 linux linux-kernel embedded-linux openembedded yocto
我试图编译新Linux的内核获得https://github.com/qoriq-open-source/linux为(4.9版本)T1042D4RDB-64B使用嵌入式主板Yocto。它目前正在使用4.1.35-rt41.
我按照以下步骤操作:
bitbake 虚拟/内核 -c cleansstate
bitbake 虚拟/内核 -c 补丁
用我的新内核源代码替换 git 文件夹(https://github.com/qoriq-open-source/linux)
make ARCH=powerpc menuconfig
bitbake 虚拟/内核
结果是
新内核已成功编译,但 uImage 不包含我需要的驱动程序。新内核中只有 4 个驱动程序(deploy/images/t1042d4rdb-64b/rootfs.tar.gz),它们是“hid”、“input”、“misc”和“staging”这样的。
有很多驱动程序文件夹,Linux kernel 4.9例如 gpio、gpu、蓝牙、连接器等。
问题是
如何将我需要的驱动程序导入到新的 uImage 并将它们放入板中?或者我如何编译这个内核并选择所需的模块/驱动程序?我想要一个像我的 Ubuntu 内核一样的丰富内核。
小智 6
内核配置:
通过.config文件编译内核时会选择驱动程序。您可以通过 menuconfig 配置内核(包括使用的驱动程序):
bitbake -c menuconfig virtual/kernel
Run Code Online (Sandbox Code Playgroud)
现在,您需要说服 bitbake 使用这些有效的更改。为此,您需要强制编译内核:
bitbake -f -c compile virtual/kernel
Run Code Online (Sandbox Code Playgroud)
最后,您可以编译映像并将其烧录到目标上。
但是,这不会使更改永久化。要使更改永久生效,您需要一个自定义图层和一个 bbappend 文件。使用 devtool 很容易做到这一点。该yocto大型手册介绍的一些细节的过程。在这里,我将只解释非常基本的步骤。跑步
devtool modify virtual/kernel
Run Code Online (Sandbox Code Playgroud)
将在本地分支上的 build/workspace/sources/linux-mainline(假设您使用的内核称为 kernel-mainline)中添加一个临时工作副本。在这里,您可以进行所需的所有更改,并在您的硬件上进行尝试。一旦您感到高兴并希望将这些更改添加到您的食谱中,您就需要提交这些更改。终于跑起来了
devtool finish linux-mainline <path-to-your-layer>
Run Code Online (Sandbox Code Playgroud)
将自动生成一个.bbappend和一个 defconfig (.config) 文件并将其放入您的图层中。如果您想修补某些驱动程序等,您可能需要查看手册的内核开发部分。
内核版本选择:
我对这个不太确定,但它应该是这样工作的:您需要一个内核配方,作为已知 bitbake 任何层的配方。如果您不确定查看openembedded 层索引并搜索您要使用的内核版本,请下载配方并将其放入您的层中。最后你需要告诉 bitbake 使用这个版本。这可以在build/local.conf配置文件中完成:
PREFERED_VERSION_linux-mainline = "5.3.11"
Run Code Online (Sandbox Code Playgroud)
我从未尝试过最后一个,也不知道它是否有效,或者这可能会破坏哪些其他依赖项。