文章目录

  • 1.编写源代码和Makefile
  • 2.新增配方/recipes
  • 3.尝试编译
  • 4.运行

 刚接触yocto,在这里记录一下怎么向yocto添加一个自己的helloworld并编译到rootfs中去。

1.编写源代码和Makefile

既然是新增一个helloworld,那就和linux中的helloworld一样,需要源码以及编译这个源码的Makefile.
hello.c

#include "stdio.h"
#include "stdlib.h"int main()
{while(1){fprintf(stderr, "HelloWorld");sleep(1);}return 0;
}

以及标准的HelloWorld Makefile

hello:hello.o$(CC) -o hello hello.ohello.o: hello.c$(CC) -c hello.c.PHONY : clean
clearn:-rm -rf *.o

2.新增配方/recipes

 Yocto编译时是bitbake去读取配方中的配置来进行获取源文件,编译,以及将编译生成的目标文件install到rootfs中去的。
 因此如果我需要让bitbake能编译到我的源码,我就需要让新增一个recipes用于描述这个新增的hello模块该怎么编译,并让bitbake在编译时读取到我新增的recipes.
 要让bitbake能够读取到hello的recipes,我们有多种办法,最简单的就是在已有的layer文件夹下.
首先看一下那些layer会被读取到

zrh@zrh-PC:~/hdd2/poky$ cat ./build/conf/bblayers.conf
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"BBPATH = "${TOPDIR}"
BBFILES ?= ""BBLAYERS ?= " \/home/zrh/hdd2/poky/meta \/home/zrh/hdd2/poky/meta-poky \/home/zrh/hdd2/poky/meta-yocto-bsp \"

所以我选择meta-poky这个layer,在这个layer里面已经存在一个recipes-core的文件夹,新增一个recipes-test用来存放hello的源码和recipes,在recipes-test里面新建hello文件夹,并新增hello.bb
hello.bb

DESCRIPTION = "Hello World Test"
SECTION = "examples"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://hello.c;md5=c887acb828cf8aa8512e94eed3e729f0"
PV = "1"
PR = "r0"SRC_URI = "file://hello.c \file://Makefile \ "S = "${WORKDIR}"do_compile () {make
}do_install() {install -d ${D}${bindir}/install -m 0755 ${S}/hello ${D}${bindir}/
}FILES_${PN} = "${bindir}/hello"

以下是参数说明

  • DESCRIPTION:这个包的描述
  • LIC_FILES_CHKSUM:文件的md5校验值,可以用md5sum hello.c来获取
  • PV:recipe的版本号
  • PR:recipe的修订版本号
  • SRC_URI:源文件列表
  • S:
  • do_compile : 重写了bitbake的函数,是bitbake进行compiletask的时候做的事情
  • do_install:同上
  • bindir:是一个路径变量,可以在总的conf,以及各个packge的conf中找到定义,大部分情况下是 /usr/bin/
  • file:// : 从本地获取文件,会从配方(*.bb)或者附加文件(.bbappend)的子目录中去寻找

再把c文件和Makefile文件添加进去就可以完成这个recipces了,添加完成之后的目录结构是这样的

zrh@zrh-PC:~/hdd2/poky/meta-poky/recipes-test$ tree hello/
hello/
|-- hello
|   |-- Makefile
|   `-- hello.c
`-- hello.bb1 directory, 3 files

3.尝试编译

在完成上面这些步骤之后,我们就可以单独的编译这个包了。
先查看一下bitbake能不能读取到我们新增的recipes

zrh@zrh-PC:~/hdd2/poky/meta-poky/recipes-test$ bitbake -s | grep hello
go-helloworld                                         :0.1-r0
hello                                                   :1-r0

看起来是能读到
那就可以执行bitbake hello单编一下这个recipes试试了

zrh@zrh-PC:~/hdd2/poky/meta-poky/recipes-test$ bitbake hello
WARNING: Host distribution "deepin-20-Beta" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.
Loading cache: 100% |#####################################################################################################################################################| Time: 0:00:00
Loaded 1309 entries from dependency cache.
NOTE: Resolving any missing task queue dependenciesBuild Configuration:
BB_VERSION           = "1.46.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "universal"
TARGET_SYS           = "x86_64-poky-linux"
MACHINE              = "qemux86-64"
DISTRO               = "poky"
DISTRO_VERSION       = "3.1.1"
TUNE_FEATURES        = "m64 core2"
TARGET_FPU           = ""
meta
meta-poky
meta-yocto-bsp       = "my-yocto-3.1.1:febbe2944c0c4a04b85fa98fdc261186115954d8"Initialising tasks: 100% |################################################################################################################################################| Time: 0:00:00
Sstate summary: Wanted 0 Found 0 Missed 0 Current 135 (0% match, 100% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 542 tasks of which 542 didn't need to be rerun and all succeeded.Summary: There was 1 WARNING message shown.

此时虽然能单编通过,但是我们在rootfs中并没有找到hello,这是因为我们没有将hello这个package添加到编译目标的recipes中,也就是说编译整个Linux发行版的时候是不会编到hello的。
以官方Yocto Project Quick Build.为例,
执行 bitbake core-image-sato 进行编译时,首先是读取的 core-image-sato.bb,所以我们只需要在这个recipes中添加我们的包就可以了,如下所示

diff --git a/meta/recipes-sato/images/core-image-sato.bb b/meta/recipes-sato/images/core-image-sato.bb
index 673106eb6d..c5d01c1ce0 100644
--- a/meta/recipes-sato/images/core-image-sato.bb
+++ b/meta/recipes-sato/images/core-image-sato.bb
@@ -13,3 +13,7 @@ TOOLCHAIN_HOST_TASK_remove_task-populate-sdk-ext = " nativesdk-intltool nativesdQB_MEM = '${@bb.utils.contains("DISTRO_FEATURES", "opengl", "-m 512", "-m 256", d)}'QB_MEM_qemumips = "-m 256"
+
+IMAGE_INSTALL_append += "hello"
+
+

4.运行

执行runqemu qemux86-64启动虚拟机
启动之后点开终端,然后输入hello,回车,会发现hello能被执行,并且不断地在当前终端打印helloworld,表示hello成功的添加到了yocto中

Yocto新增一个hello程序相关推荐

  1. 第一个java程序释义_Java 学习之路(1)第一个Java程序

    Hello World程序 在编程语言的世界里,第一个编程语言估计就是输出Hello World了吧. /** * 编写第一个Java程序,输出Hello World! * @author LJS * ...

  2. 小程序工程化实践(上篇)-- 手把手教你撸一个小程序 webpack 插件,一个例子带你熟悉 webpack 工作流程...

    本文基于 webpack 4 和 babel 7,Mac OS,VS Code 小程序开发现状: 小程序开发者工具不好用,官方对 npm 的支持有限,缺少对 webpack, babel 等前端常用工 ...

  3. cdn jquery怎么没有提示_第一个jQuery程序

    1.配置jQuery环境 1.1获取jQuery最新版本 进入jQuery的官方网址 http://jquery.com ,下载最新的jQuery库. 1.2 jQuery库类型说明 目前jQuery ...

  4. CML更新 | 新增百度小程序、支付宝小程序

    祝所有工程师小伙伴开工大吉,Beatles 团队已经开始忙碌起来了. 几个事情要向诸位汇报一下: 一.新增百度小程序.支付宝小程序 发布alpha版本支持百度小程序.支付宝小程序,已有项目可以无缝直接 ...

  5. 云计算概况及第一个Azure程序

    08/04/2012 由于有不少人想尝试Azure,咨询注册问题,更新Azure支持部分. 简介 尝试Agile的方式来写博客.本文主要覆盖以下两个故事.故事一:作为一个没有开发过云计算平台的读者,我 ...

  6. Javaspring 1-6课 基本概念及第一个Javaspring程序

    只会前端还是差点事,开坑后端.参照教程为http://c.biancheng.net/spring/ 首先Javaspring是一个框架,之前一直没搞明白什么是框架,现在的理解框架就是毛坯房,已经设计 ...

  7. jquery项目源码_第一个jQuery程序

    1.配置jQuery环境 1.1获取jQuery最新版本 进入jQuery的官方网址 http://jquery.com ,下载最新的jQuery库. 1.2 jQuery库类型说明 目前jQuery ...

  8. (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序

    (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序 原文:(1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序 版权声明:本作品采用知识共享署名-非商 ...

  9. A002、java环境搭建_第一个java程序

    目录 1.内容介绍 2.软件开发概述 2.1 软件开发概念 2.2 软件开发示例 2.3 软件开发语言 2.3.1 计算机语言概述 2.3.2 计算机语言分类 2.4 小结 3.Java概述 3.1 ...

最新文章

  1. C#Winform窗体中传值
  2. Python网络_TCP/IP简介
  3. aspose word copy 获取某页的内容_6月已至,Aspose.Words又双叒叕更新到v20.6!PDF版本1.5标记过时...
  4. java hashtable排序_java中哈希表中有迭代器模式的实现,可以认为其是顺序表吗?...
  5. 面试总结-百度(1)
  6. 操作系统-命令解释程序(实验一)
  7. 计算机应用英语考什么,网考计算机应用基础(本)试卷10(国外英语资料).doc
  8. SQL select查询原理--查询语句执行原则转
  9. CSU 1111 三家人
  10. mac r 导出csv文件_R在Max OS进行导入和导出xlsx文件
  11. iOS 应用取消时间栏
  12. 【细胞分割】基于matlab GUI阙值+边缘+形态学+种子点图像分割【含Matlab源码 615期】
  13. 用聊天记录当证据 对方改了微信号怎么证明他是他
  14. ANSYS Workbench仿真(ADD):应力奇异点VS应力集中
  15. echarts嵌套饼图自动动画_使用百度echarts制作可视化大屏——制作一个双层饼图...
  16. 联想笔记本声音太小怎么办_联想笔记本电脑没声音了怎么办(大学生如何选择笔记本电脑)...
  17. MNL(多项logit)
  18. k-means算法简介
  19. 开源App动画Lottie
  20. gephi导入含时间线的动态数据

热门文章

  1. android手机扇区数据读写,磁盘、SD卡、移动磁盘物理扇区读写
  2. java-multimap使用
  3. 跨境人必收藏!掘金新赛道,带你科学开启TikTok Shop英国市场
  4. 【qsort函数实现】
  5. 体育视野杂志体育视野杂志社体育视野编辑部2022年第5期目录
  6. 从2010 IDF 看英特尔固态硬盘现状及策略
  7. iconfont的使用,阿里矢量图库的引用,配置,改变图标大小和图标颜色
  8. Java判断平衡二叉树
  9. conda的常用命令
  10. 二分幂,快速幂,矩阵快速幂,快速乘