拓冰建站拓冰建站
首页 / 资讯中心 / 正文

轻松学习yocto: 10-Yocto 学习路线

到此 我可以重建core-image-minimal 带有ssh-dropbear, pi image IP设置好了 windows也可以用putty 连接pi2, 接下来我学什么你现在其实已经跨过了一个非常重要的坎你不再只是“会编译 Yocto”而是已经能从 recipe → BitBake → rootfs → WIC → SD Card →Raspberry Pi → SSH完整跑通一条链。文章摘要本文为 Yocto 学习者规划了一条从“会编译”到“能定制”的清晰进阶路径。作者基于读者已成功构建并运行带 SSH 的 Raspberry Pi 镜像这一基础提出了Yocto 第二阶段的九个核心实验旨在帮助读者建立完整的嵌入式 Linux 产品开发思维从零编写最小 Recipe通过一个纯 Shell Script 的hello-yocto.bb掌握从 Recipe 到最终在 Pi 上运行的完整流程。编写 Systemd Service让应用开机自启理解 Yocto 如何定义系统服务。创建自己的 Layer建立meta-myproduct学习通过 Layer 覆盖和扩展官方配置这是工程化开发的基础。区分 local.conf 与 Layer理解临时构建配置与产品级配置的边界培养配置管理意识。创建自定义 Image Recipe告别core-image-minimal定义属于自己的产品镜像。深入 Kernel 定制在理解上层构建流程后再学习内核配置、模块和设备树。使用 SDK 进行应用开发为自定义镜像生成 SDK在主机上进行交叉编译应用开发。遵循结构化学习路线提供了从 Recipe 到 BSP 的 11 个阶段学习表格避免盲目学习。巩固核心主线强调应专注于 BitBake → Recipe → Package → Rootfs → Image 这条核心构建链暂缓学习 Docker 等外围技术。全文核心思想是Yocto 是一个构建系统其目标是让你能够定义和构建属于自己的完整 Linux 产品而不仅仅是编译软件。下一步建议立即动手实践第一个实验编写hello-yocto.bb。结合我们前面已经做过的 busybox.bb、busybox.inc、task dependency、do_compile/do_install/do_package、WIC 和 Dropbear我建议不要马上去学别的 recipe。下一阶段应该进入Yocto 第二阶段从“构建系统”进入“定制系统”我建议你按下面顺序走。1. 我最建议你下一课自己写一个最小 recipe不要再解剖 BusyBox 了。BusyBox 已经完成了它的教学使命让你理解recipe ↓ BitBake metadata ↓ task ↓ do_compile ↓ do_install ↓ do_package ↓ package ↓ rootfs ↓ image现在我们反过来自己写一个 recipe然后亲眼看它如何进入 Raspberry Pi 的 rootfs。例如做一个hello-yocto最终 SSH 到 Pi2rootraspberrypi2:~# hello-yoctoHello Yocto!这个练习非常关键因为你会真正掌握hello-yocto.bb │ ├── SRC_URI ├── do_compile ├── do_install ├── FILES:${PN}▼ package ▼ core-image-minimal ▼ WIC ▼ SD Card ▼ Raspberry Pi2这个练习非常关键因为你会真正掌握hello-yocto.bb │ ├── SRC_URI ├── do_compile ├── do_install ├── FILES:${PN}▼ package ▼ core-image-minimal ▼ WIC ▼ SD Card ▼ Raspberry Pi2这次我们甚至可以不依赖任何复杂源码先做一个纯 shell script recipe。具体建议与补充说明结构优化将这句关键提示从单纯的引用块提升为一个小节标题例如“1.1 从最简单的 Shell Script Recipe 开始”使其在视觉上更突出逻辑层次更清晰。逻辑深化在此处补充一个简短的段落解释“为什么从 Shell Script 开始”从纯 Shell Script 开始可以让你完全专注于 Recipe 的元数据metadata和任务task流程本身而无需被 C/C 编译环境、交叉编译工具链、源码补丁等复杂因素干扰。这是理解 BitBake 如何“打包”和“部署”一个软件的最干净起点。案例补充紧接着提供一个极简的hello-yocto.bb示例框架让抽象概念立刻变得具体可操作# hello-yocto.bbSUMMARYA simple hello-yocto scriptLICENSEMITSRC_URIfile://hello-yocto.shdo_install(){install-d${D}${bindir}install-m0755${WORKDIR}/hello-yocto.sh${D}${bindir}/hello-yocto}FILES:${PN}${bindir}/hello-yocto并附上对应的hello-yocto.sh脚本内容#!/bin/shechoHello Yocto!行动指引在案例后增加一个“下一步动作”提示引导读者立即实践动手试试在你的 layer 中创建上述两个文件然后运行bitbake hello-yocto。观察tmp/work/目录下生成的日志和文件特别是do_install任务将脚本安装到了哪个临时目录以及最终它如何被包含进core-image-minimal的包列表中。承上启下最后用一句话衔接至下一个实验systemd service强化学习路径的连贯性当你成功在 Pi2 上运行hello-yocto命令后你将获得对 Recipe 生命周期的完整感性认识。接下来我们就可以让这个“Hello World”在系统启动时自动运行进入systemd service的实验。然后做第二个实验自己写 systemd service比如hello-yocto.service让 Pi 启动之后自动运行hello-yocto然后你 SSH 进去systemctl status hello-yocto这一步会把你带到一个非常重要的概念recipe ↓ 安装文件 ↓ /etc/systemd/system/xxx.service ↓ systemd ↓ 开机启动你会开始真正理解Yocto 不只是“把软件编译出来”而是决定目标 Linux 系统里面有什么以及它怎么启动。3. 第三个实验正式创建自己的 Layer现在你应该从poky/ meta-openembedded/ meta-raspberrypi/开始建立自己的meta-myproduct/例如meta-myproduct/ ├── conf/ │ └── layer.conf ├── recipes-example/ │ └── hello-yocto/ │ └── hello-yocto.bb └── recipes-core/ └──...然后bitbake-layers create-layer../meta-myproduct bitbake-layers add-layer../meta-myproduct以后你自己的所有东西都放进去meta-myproduct │ ├── recipes ├── configuration ├── services ├── patches ├── kernel config └── device tree这一步非常重要。因为从这里开始你不应该再修改poky/meta/... meta-raspberrypi/...而是通过自己的 layer 覆盖/扩展别人提供的东西。这是 Yocto 真正的工程工作方式。4. 第四个实验学习 local.conf 和 layer 的边界你现在应该开始刻意区分临时实验build-rpi2/conf/local.conf和产品级配置meta-myproduct/例如MACHINE “raspberrypi2”可以是 machine/build 配置。而IMAGE_INSTALL:append dropbear虽然可以放 local.conf但如果你要做正式产品就应该逐渐移动到自己的 layer / image recipe 中。最终形成local.conf ↓ 开发者个人/机器相关配置 meta-myproduct ↓ 产品本身的配置这个思想非常重要。第五个实验不要再只用 core-image-minimal你现在应该创建自己的 imagemy-product-image.bb例如my-product-image │ ├── dropbear ├── busybox ├── hello-yocto ├── your-service └── your-config然后bitbake my-product-image最终my-product-image-raspberrypi2.rootfs.wic这时候你就真正开始从“我在编译 Yocto 的 image”变成“我在定义自己的 Linux 产品。”6. 第六阶段Kernel等上面的东西真正理解之后再进入 kernel。这一阶段非常值得你在 Pi2 上做Yocto │ └── Linux Kernel ├── kernel config ├── module ├── device tree └── patch例如bitbake virtual/kernel然后研究bitbake -c menuconfig virtual/kernel再研究KERNEL_DEVICETREE然后自己加一个 kernel configuration。这一阶段你会第一次真正理解Yocto 并不是 Linux kernel。Yocto 是构建系统而 kernel 只是 Yocto 构建出来的一个组件。7. 第七阶段SDK等你已经能做自己的 image 后再学bitbake -c populate_sdk然后Yocto PC │ SDK ▼ Application Developer ▼ your-app ▼ ARM/Raspberry Pi然后你可以在 PC 上写#include stdio.hintmain(){printf(Hello Raspberry Pi\n);return0;}使用 Yocto SDK 编译aarch64-poky-linux-gcc …或者根据你的 Pi2 配置对应的 ARM toolchain。这时候就进入Yocto Embedded Linux Application Development8. 所以我给你安排的路线是不要一下子学 20 个东西。我们就按这个顺序我尤其建议你现在不要急着学 Docker、systemd 全家桶、Linux 驱动等因为你现在最宝贵的是刚刚建立起来的这条“主线”。我们应该趁热打铁然后我们把箭头反过来这会是你真正从“使用 Yocto”进入“掌握 Yocto”的转折点。下一步我建议我们直接开始 01从零写第一个 hello-yocto.bb。而且这次我会带你用我们之前解剖 BusyBox 的方法一行一行追踪它从 .bb 文件到最终出现在 Pi2 /usr/bin/hello-yocto 的全过程
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门