Yocto新增一个hello程序_yocto hello-程序员宅基地

技术标签: Linux杂项  linux  


 刚接触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.o

hello.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.bb

1 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 dependencies

Build 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 nativesd
 
 QB_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中

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/baidu_26866585/article/details/107581893

智能推荐

xDeepFM论文解读(KDD2018)_cin模型-程序员宅基地

文章浏览阅读2.1k次。xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems引言(ABSTRACT)组合特征对与许多商业模型的成功都至关重要。受网络获取的原始数据的种类、容量和提取速度等限制,手工提取特征往往花费较大的代价。随着深度学习的兴起,最近研究者们提出了许多基于DNN的因子分解模型来学习高阶和..._cin模型

第九届蓝桥杯 c组c/c++ 省赛 第八题---等腰三角形题解(步骤详讲)_c++ 逆时针 填数形成三角行-程序员宅基地

文章浏览阅读3.1k次,点赞10次,收藏16次。题目:等腰三角形本题目要求你在控制台输出一个由数字组成的等腰三角形。具体的步骤是:先用1,2,3,…的自然数拼一个足够长的串用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。比如,当三角形高度是8时:输入,一个正整数n(3<n<300),表示三角形的高度输出,用数字填充的等腰三角形。为了便于测评,我们要求空格一律用"."代替。例如:输入:5程序应该输..._c++ 逆时针 填数形成三角行

OBD技术速成——J1850协议概述-程序员宅基地

文章浏览阅读6.3k次,点赞2次,收藏28次。在整理过程中进步,与君共勉!目录概述J1850-PWMJ1850-VPW概述J1850总线是1994年由汽车工程师协会(Society of Automotive Engineers;SAE)所颁布的标准,之后普及运用于美国车厂的汽车中,如福特(Ford)、通用汽车(General Moter;GM)、克赖斯勒(Chrysler)等。J1850总线有两种形式:•SAE J1850 PWM(Pulse Width Modulated;PWM) 即:脉宽调制。运用2条线路以差分方式进行传输,最高速率为_j1850

vue+element中多选框选一个然而就全部选中了_element中selec设置多选时选中一个时所有下拉被选中怎么回事-程序员宅基地

文章浏览阅读7.2k次,点赞2次,收藏6次。例如:点击一个即所有的多选框都选中了,出现的情况有以下几种;第一种情况:v-model 绑定的值应该是数组的形式,结果写成了字符串的形式。第二种情况:没有写label值..._element中selec设置多选时选中一个时所有下拉被选中怎么回事

丰干诗_丰干禅师诗作-程序员宅基地

文章浏览阅读205次。丰干诗【壁上诗二首】丰干 丰干禅师,居天台山国清寺。昼则舂米供僧,夜则扃房吟咏。一日骑虎松径来,入国清巡廊唱道,众皆惊怖。尝于京辇为闾丘太守救疾,闾丘之任台州,便至国清问丰干禅院所在,云在经藏后,无人住得。每有一虎,时来此吼。闾丘至师院,开房惟见虎迹。今存房中壁上诗二首。余自来天台,凡经几万回。一身如云水,悠悠任去来。逍遥绝无闹,忘机隆佛道。世途岐路心,众生多烦恼。兀兀沈浪海,漂漂轮三界。可惜一灵物,无始被境埋。电光瞥然起,生死纷尘埃。寒山特相访,拾得常往来。论心..._丰干禅师诗作

解决ReferenceError: weakly-referenced object no longer exists-程序员宅基地

文章浏览阅读3.3k次。import mysql.connectordb_info = dict()db_info['host'] = ‘127.0.0.1’db_info['port'] = 3306db_info['user'] = ‘root’db_info['passwd'] = 'root'db_info['database'] = 'test'cur = mysql.connector.connect(**db_info).cursor()cur.execute("SHOW databases;")_referenceerror: weakly-referenced object no longer exists

随便推点

VSCode 使用npm_vscode npm-程序员宅基地

文章浏览阅读2.6w次,点赞12次,收藏75次。VSCode 使用npm文章目录VSCode 使用npm1.打开cmd 输入指令 npm -v 查看npm是否安装2.打开vscode 在工作区创建一个项目,右键打开 “在集成终端中打开”3.终端中输入 ==npm init -y==,为项目创建npm环境,创建成功生成package.json文件4.修改npm镜像5.利用npm导入jquery,导入成功生成两个文件6.更多命令操作1.打开cmd 输入指令 npm -v 查看npm是否安装2.打开vscode 在工作区创建一个项目,右键打开 “在集成_vscode npm

proj4库的编译方法_org.osgeo.proj4j找不到-程序员宅基地

文章浏览阅读8.8k次。作者:朱金灿来源:http://blog.csdn.net/clever101 Proj.4库是开源GIS最著名的地图投影库,著名的开源图像库gdal中的投影转换函数也是动态调用该库函数的,目前的最新版本是proj-4.7.0。proj4库的下载地址是:http://trac.osgeo.org/proj/ 其编译方法_org.osgeo.proj4j找不到

Linux基本操作之路径的详解_linux路径怎么写-程序员宅基地

文章浏览阅读1.4w次,点赞19次,收藏63次。一、linux下的路径Linux中的路径可以分为绝对路径和相对路径,因为根据档名写法的不同,也可以将所谓的路径(path)定义为绝对路径(absolute)和相对路径(relative)。这两种文件名/路径的写法根据是这样的: 绝对路径:由跟目录(/)开始起的文件或者目录名称,例如 /home/dmtais/.bashrc: (绝对路径的写法一定是由 / 目录写起的) 相对路径:相对于目前路径的文件名写法。例如 ./home/dmtsai 或 ../ ../home/dmtsai ..._linux路径怎么写

ThinkPhp8.x 笔记-程序员宅基地

文章浏览阅读78次。ThinkPhp8.x 笔记

csh和bash的区别-程序员宅基地

文章浏览阅读2.8k次,点赞2次,收藏22次。csh 和bash的区别_csh和bash的区别

微信整人假红包图片_微信整人红包动态图如何制作 微信红包图片显示5秒后变成恶搞图或其它文字制作方法...-程序员宅基地

文章浏览阅读5.6k次。现在谈红包就兴奋,如果你在微信上收到一个红包,不管是一毛钱还是一分钟,总是很开心的。但你有没碰到过损友发过来的整人图片呢,比如第一眼以为是收到大收包了,条件反射下不经大脑就想去拆红包了,但转瞬弹出一幕整人文字或各种搞怪图,确实能让人哭笑不得。想知道微信红包图片截图整人的动态图如何制作么?这里将分享微信红包图片显示5秒后变成恐怖图或其它文字制作方法,速度来围观哟!微信红包图片截图整人的动态图,预览:..._微信红包仿真动图

推荐文章

热门文章

相关标签