当前位置: 首页 > news >正文

Yocto —— Linux Kernel 配置和修改

文章目录

  • 一、为什么用 Yocto 修改内核
    • 1. 内核是如何被构建的
    • 2. 内核源码从哪里来
  • 二、Linux Kernel 配置编译
  • 三、修改 Linux Kernel 内核源代码
  • 四、制作 Linux Kernel 内核驱动

一、为什么用 Yocto 修改内核

在嵌入式 Linux 开发中,Linux 内核是系统的核心。不同的硬件平台需要不同的内核配置(如启用特定驱动、关闭不需要的模块、优化性能)。
Yocto Project 提供了一套强大而灵活的机制,让你可以在不修改原始内核源码的前提下,安全、可维护地定制内核

1. 内核是如何被构建的

在 Yocto 中,内核由一个 .bb 配方文件构建,通常位于:
meta/recipes-kernel/linux/
├── linux-yocto_5.15.bb
├── linux-raspberrypi_5.10.bb
└── linux-stable_6.1.bb

这些配方使用 kernel.bbclass 来定义通用的构建逻辑。

2. 内核源码从哪里来

  • 可以是 上游 Linuxlinux-stable
  • 可以是 厂商维护的内核(如 linux-ti
  • 也可以是 自定义 Git 仓库

Yocto 使用 SRC_URI 指定源码位置,支持 Git、HTTP、本地文件等。


二、Linux Kernel 配置编译

配置内核:

bitbake linux-yocto -c menuconfig

在这里插入图片描述

编译内核模块:

bitbake linux-yocto -c compile kernelmodules

在这里插入图片描述

查看方法:

在这里插入图片描述

知道内核位置,不确定版本:

在这里插入图片描述

查看编译出的路径:

bitbake -e linux-yocto | grep ^S=

在这里插入图片描述

进入目录 git log 查看版本信息:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

查看编译的架构:

在这里插入图片描述

查看编译需要的配置文件:

cat ../meta/conf/machine/qemuarm64.conf
cat ../meta/conf/machine/include/qemu.inc

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

查看内核 bb :

在这里插入图片描述

查看内核镜像类型:

在这里插入图片描述

查看设备树文件:

在这里插入图片描述

三、修改 Linux Kernel 内核源代码

查看内核目录:

在这里插入图片描述

在工作区生成内核源码:

在这里插入图片描述

修改内核源码:

在这里插入图片描述

在这里插入图片描述

然后 commit 提交:

在这里插入图片描述

编译内核:

devtool build linux-yocto

在这里插入图片描述

构建镜像:

# devtool build-image core-image-sato 应该也可以,还未测试
bitbake core-image-sato

在这里插入图片描述

测试:

在这里插入图片描述

验证成功后打包回去,多了 bbappend 和 patch 文件:

devtool finish linux-yocto ../meta-mylayer

在这里插入图片描述

可以查看 bbappend 和 patch:

在这里插入图片描述
在这里插入图片描述

最后记得清理一下工作区和删除源码:

在这里插入图片描述

四、制作 Linux Kernel 内核驱动

将示例模板复制到自己的 layer:

在这里插入图片描述

查看 bb 文件:

在这里插入图片描述

查看 Makefile 和 .c 文件:

在这里插入图片描述
在这里插入图片描述

编译驱动代码:

bitbake hello-mod

在这里插入图片描述

查看驱动是否编译成功:

在这里插入图片描述

修改配置文件,添加:

在这里插入图片描述

在这里插入图片描述

重新配置一下环境和编译驱动,构建镜像:

source oe-init-build-env build-arm
bitbake hello-mod
bitbake core-image-sato

在这里插入图片描述

验证:

# 把内核日志打印出来,然后清空缓冲区
dmesg -c modprobe hello
dmesgrmmod hello
dmesg

在这里插入图片描述

http://www.dtcms.com/a/545390.html

相关文章:

  • Rust结构体:数据组织的优雅范式与实例化实践
  • 【Harmony】鸿蒙相机拍照使用简单示例
  • 论文笔记:“Mind the Gap Preserving and Compensating for the Modality Gap in“
  • 国产光学软件突破 | 3D可视化衍射光波导仿真
  • 仓颉语言中的Option类型与空安全处理:深度解析与实践
  • 无穷级数概念
  • mysql的事务、锁以及MVCC
  • [Dify 实战] 使用插件实现内容抓取与格式转换流程:从网页到结构化输出的自动化方案
  • 李宏毅机器学习笔记35
  • 类和对象深层回顾:(内含面试题)拷贝构造函数,传值返回和传引用返回区别
  • Rust环境搭建
  • 潍坊做网站价格个人网页设计软件
  • LeetCode 刷题【138. 随机链表的复制】
  • 做可转债好的网站wordpress不用邮件确认
  • Rust 中的减少内存分配策略:从分配器视角到架构设计 [特殊字符]
  • MySQL8.0.30 版本中redo log的变化
  • 0430. 扁平化多级双向链表
  • 网站关键词多少合适icp备案服务码
  • TypeScript声明合并详解二
  • 做网站组织架构my77728域名查询
  • 深度学习------图像分割项目
  • 【深度学习2】线性回归的从零开始实现
  • LeetCode第2题:两数相加及其变种(某大厂面试原题)
  • Java 字符编码全解析:从乱码根源到 Unicode 实战指南
  • SpringBoot 高效工具类大全
  • 自己做网站用软件wordpress电商优秀
  • 百度网站建设中的自由容器网站用哪个数据库
  • 入侵检测系统——HIDS和NIDS的区别
  • C语言多进程创建和回收
  • 仓颉编程语言:控制流语句详解(if/else)