yocto使用实例[1]-自定义内核配方

文章目录

前言

5.0版本的yocto的默认内核是6.6+,默认gcc是13+,我们想要自己配置的话,就需要自定义配方。

目标:本篇,我们将会引入一个6.12的内核,和gcc-11

创建自定义层

自定义配方,需要先创建一个自定义层(类似容器)

bash 复制代码
bitbake-layers create-layer meta-arco  # 在build/路径下
bitbake-layers add-layer meta-arco

添加6.12内核配方

添加配方

方法1:使用devtool创建配方(需要源码是git仓库)

(这是个狗屎办法,不可用,创建的配方识别不了内核版本,无法添加到自定义层)

bash 复制代码
# 解压内核源码
tar -xvf linux-6.12.80.tar.gz

# 初始化成git仓库
git init
git add .
git commit -m "init repo of linux-6.12.80"

# 使用devtool,指定路径创建内核配方(注意!这里需要指定成linux-yocto,如果带了版本号,构建系统不识别,这里是需要让devtool自动推导)
devtool add linux-yocto /home/arco/user/packages/linux-6.12.80/

# 拷贝defconfig
# cp /home/arco/user/packages/linux-6.12.80/arch/arm64/configs/defconfig /home/arco/user/yocto/poky/build/workspace/recipes/${your_recipe}/

# 自定义工作区的路径,使用devtool创建的配方在这个路径下的recipes/路径下(有时候需要手动删东西!)
# /home/arco/user/yocto/poky/build/workspace/

# 把配方固化到层(包括defconfig)
devtool finish linux-yocto meta-arco


# 清理配方
devtool reset linux-yocto
创建配方报错解决

真傻逼

如果出现下面的报错,说找不到默认配方

bash 复制代码
bitbake -c clean linux-yocto_6.12
Loading cache: 100% |###############################################################################################################################################################################| Time: 0:00:00
Loaded 1879 entries from dependency cache.
ERROR: No recipes in default available for:
  /home/arco/user/yocto/poky/build/workspace/appends/linux-yocto_6.12.bbappend
  /home/arco/user/yocto/poky/build/workspace/appends/linux-yocto.bbappend

Summary: There was 1 ERROR message, returning a non-zero exit code.

那么就来到/home/arco/user/yocto/poky/build/workspace/appends/路径下,把这几个报错的配方删掉

真他妈傻逼

  • 修改配方
bash 复制代码
  • 添加完成后检查配方

可以看到,linux-yocto已经多出了6.12选项

bash 复制代码
bitbake-layers show-recipes linux-yocto
NOTE: Starting bitbake server...
Loading cache: 100% |###############################################################################################################################################################################| Time: 0:00:00
Loaded 1880 entries from dependency cache.
=== Matching recipes: ===
linux-yocto:
  meta                 6.6.123+git
  meta-arco            6.12.8

方法2:手动创建配方

拷贝meta/recipes-kernel/linux/linux-yocto_6.6.bb,在此基础之上修改

狗日的,这个配方文件也不好参考

直接用下面的例子:

bash 复制代码
inherit kernel

LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"

LINUX_VERSION = "6.12.80"
PV = "${LINUX_VERSION}"

SRC_URI = "file://linux-6.12.80.tar.xz"
SRC_URI += "file://defconfig"

S = "${WORKDIR}/linux-6.12.80"

PROVIDES += "virtual/kernel"
  • 源码和config文件位置

源码和config文件放置在meta-xxx/recipes-linux-linux/files路径下,这个files路径需要自己创建

  • 验证

执行bitbake-layers show-recipes linux-yocto进行验证

设置源码位置

配方文件放在meta-arco/recipes-linux/linux

内核源码压缩包放在meta-arco/recipes-linux/linux/files/,files这个路径没有,自己创建。

0409-这个版本的bb文件,menuconfig一闪而过

狗日的

构建内核

更改配置,使用6.12内核

conf/local.conf中添加

bash 复制代码
# 需要配方文件命名为linux-yocto_xxx.bb
PREFERRED_VERSION_linux-yocto = "6.12%"

这里是一个前缀匹配关系,它会查找linux-yocto配方

(如果你的配方是linux-yocto-6.12,那么就需要把这个参数改成PREFERRED_VERSION_linux-yocto-6.12,但这没什么用,因为构建流程并不识别linux-yocto-6.12,所以还是得创建配方的时候命名成linux-yocto_6.12.bb)

执行 bitbake virtual/kernel -c menuconfig 应该弹出 6.12 的配置界面。

如果出现报错,请参考解决方案

解决不了

直接清理后进入devshell手动menuconfig

bash 复制代码
# 先清理构建状态
bitbake virtual/kernel -c cleansstate

make menuconfig

尝试重新构建工具链

bash 复制代码
bitbake meta-toolchain

然后在build/tmp/deploy/images下可以找到构建出的Image

其他说明

virtual/kernel

这是个'逻辑组件',用来控制使用哪个配方来创建内核

可以在local.conf中通过设置↓来更改

PREFERRED_PROVIDER_virtual/kernel = linux-yocto

(不设置即为使用默认的linux-yocto)

控制使用配方的版本

在local.conf中添加↓

PREFERRED_VERSION_linux-yocto = "6.12%"

构建时即可匹配linux-yocto_6.12%.bb的配方

(就是 配方名 + '_' + 版本号,如果是linux-yocto-6.12则匹配不到,没准改了PREFERRED_PROVIDER_virtual/kernel = linux-yocto-6.12之后能匹配到?)

相关推荐
水饺编程3 小时前
第2章:Linux 基础,切换到超级用户
linux·c语言·汇编
便利店10244 小时前
系统活动一抓留存!深入 Linux C/C++ 调试工具之 sysdig
linux·运维·服务器·sysdig
qetfw4 小时前
Bash 变量:export、位置参数与默认值展开验证
linux·开发语言·chrome·bash
其实防守也摸鱼5 小时前
Cylab在线靶场——CTF中的通用技能
linux·数据库·学习·算法·靶场·ctf·学习网络安全
toooooop85 小时前
CentOS 7 内核 3.10.0-1160.119.1 升级指南
linux·运维·centos
码少女6 小时前
Linux——UDP协议和TCP协议
linux·网络·udp·tcp
GeW6 小时前
新质生产力发展路线图Linux、数据库、AI 一个都不能少
linux
kkkkkkkkkk_Z6 小时前
新手自学嵌入式 | 学习日记:Linux驱动复习之系统移植(U-Boot篇)
linux·运维·学习
Rabitebla6 小时前
【系统性学习笔记】Linux 权限篇(二):文件属性、权限修改与目录权限的底层逻辑
linux·c++·笔记·学习·算法
Lsetea8 小时前
curl下载HTTPS文件报23:证书验证成功与本地写入失败分层排查
linux·https·shell·ssl证书·curl