Yocto学习笔记1-下载与首次编译

news2024/12/27 15:57:01

Yocto学习笔记1-下载与首次编译

  • 1、基础环境介绍
  • 2、注意点
  • 3、安装依赖
    • 3.1 yocto常规系统构建所需依赖库(较全)
    • 3.2 龙芯适配时的最小依赖库(最小)
  • 4、下载
    • 4.1 通过git克隆
    • 4.2 查看所有远程分支
    • 4.3 签出一个长期支持的稳定版本
    • 4.4 查看当前本地分支版本
  • 5、使能编译环境
  • 6、开始Yocto编译
  • 7、编译中的遇到的问题
    • 7.1 在编译bison(版本bison-3.0.4)时遇到gnulib版本不匹配问题
    • 7.2 elfutils编译错误
    • 7.3 glib编译错误:directive argument is null(2处)
    • 7.4 qemu编译报错

1、基础环境介绍

操作系统:ubuntu 20.04
内存大小:12GB
磁盘空间:600GB

2、注意点

yocto poky下载和编译的整个环境(除了运行QMENU虚拟机外)不需要root权限,请尽可能不要在root环境下去操作。

3、安装依赖

3.1 yocto常规系统构建所需依赖库(较全)

sudo apt-get install -y gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm python3-subunit mesa-common-dev zstd liblz4-tool

3.2 龙芯适配时的最小依赖库(最小)

sudo apt-get install -y gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm

4、下载

4.1 通过git克隆

$ git clone git://git.yoctoproject.org/poky
$ cd poky

一般网速较慢,请耐心等待…

4.2 查看所有远程分支

$ git branch -r

执行如下图:
在这里插入图片描述
在这里插入图片描述

4.3 签出一个长期支持的稳定版本

如果构建针对龙芯的系统,可以签出sumo版本,因为龙芯官方主要是sumo版本的基础上进行构建。

$ git checkout sumo
或者使用完整命令
$ git checkout -t origin/sumo -b my-sumo

执行如下:
在这里插入图片描述

4.4 查看当前本地分支版本

$ git branch

在这里插入图片描述

5、使能编译环境

先进入poky目录,看一下poky目录下的内容,如下:
在这里插入图片描述

在poky目录下执行以下命令

$ source oe-init-build-env

执行结果如下图:
在这里插入图片描述

出现提示:
You can also run generated qemu images with a command like ‘runqemu qemux86’
说明使能编译操作成功,首次使能的时候会创建build目录,后面包括编译和输出的所有东西都在这个build目录下,所以build目录下的改动都是临时的,都是会变化的,所以不建议在build目录下去做代码的修改,也无法保存下来,当然也不要怕去修改build目录下的代码,为了快速和临时改动是可以接受的。

在执行 source oe-init-build-env时需要用到python2,且要求版本≥2.7.3,我的环境开始是python2和python3都安装了,默认/usr/bin/python软链接指向python3,就会出现以下错误。

在这里插入图片描述

解决此问题的方法, 可以先删除/usr/bin/python软链接,再建立一个指向/usr/bin/python3的软链接就可以了,如下:

在这里插入图片描述

6、开始Yocto编译

在build目录下执行以下命令开始编译:

$ bitbake core-image-sato

编译过程如下图:
在这里插入图片描述
因为要下载配方中的软件包并进行配置、编译、安装,第一次时间是很长的,需要耐心等待…

7、编译中的遇到的问题

7.1 在编译bison(版本bison-3.0.4)时遇到gnulib版本不匹配问题

问题描述如下:

Please port gnulib fseterr.c to your platform! Look at the definitions of ferror and cleareer on your system, then report this to bug-gnulib.

如下图:
在这里插入图片描述
问题分析:
网上查阅后是最新版本gnulib与bison不大兼容,一般正确做法是给要编译的软件包打补丁,包括以下2步。

  • 1、补丁下载
    补丁下载地址:

https://raw.githubusercontent.com/rdslw/openwrt/e5d47f32131849a69a9267de51a30d6be1f0d0ac/tools/bison/patches/110-glibc-change-work-around.patch

可以新开一个SSH终端,进入到软件包目录下直接通过wget下载,如下:

$ cd ~/Linux/yocto/poky/meta/recipes-devtools/bison/bison
$ wget https://raw.githubusercontent.com/rdslw/openwrt/e5d47f32131849a69a9267de51a30d6be1f0d0ac/tools/bison/patches/110-glibc-change-work-around.patch

下载后如下图:
在这里插入图片描述

  • 2、把下载的补丁添加到.bb文件中
    回到上一级目录,编辑bison_3.0.4.bb文件,添加110-glibc-change-work-around.patch补丁文件。
$ cd ..
$ ls
$ vim bison_3.0.4.bb

修改内容如下:
在这里插入图片描述
修改后保存退出,重新执行编译命令:

$ bitbake core-image-sato

7.2 elfutils编译错误

错误描述:

‘__elf64_msize’ specifies less restrictive attribute than its target ‘elf64_fsize’: ‘const’ [-Weeror=missing-attributes]
yocto官方patch可以参考如下:
https://docs.yoctoproject.org/pipermail/yocto/2019-June/045575.html

报错原因为warning被看作error,实质是elf中__elf64_msize变量为const,但是这里使用的时候没有标记,所以需要添加对应属性;

报错信息如下图:
在这里插入图片描述
进入到源码libelfP.h所在的目录:

$ cd ~/Linux/yocto/poky/build/tmp/work/x86_64-linux/elfutils-native/0.170-r0/libelf
$ vim libelfP.h

代码修改如下,增加2个__const_attribute__
在这里插入图片描述

7.3 glib编译错误:directive argument is null(2处)

错误描述:

…/…/glib-2.54.3/gio/gdbusauth.c:1305:11: error: ‘%’ directive argument is null [-Werror=format-overflow=]

报错信息如下图:
在这里插入图片描述

上图错误是在gdbusauth.c的1305行。

在这里插入图片描述

上图的错误是在gdbusmessage.c的2700行。

根据提示,%s的值可能为空,所以添加为空判断,如下:

gdbusauth.c修改如下:

首先进入到源码中gdbusauth.c所在的目录,然后编辑:

$ cd ~/Linux/yocto/poky/build/tmp/work/x86_64-linux/glib-2.0-native/1_2.54.3-r0/glib-2.54.3/gio
$ vim gdbusauth.c

在这里插入图片描述

gdbusmessage.c修改如下:

首先进入到源码中gdbusauth.c所在的目录,然后编辑:

$ cd ~/Linux/yocto/poky/build/tmp/work/x86_64-linux/glib-2.0-native/1_2.54.3-r0/glib-2.54.3/gio
$ vim gdbusauth.c

在这里插入图片描述

7.4 qemu编译报错

可以先通过以下命令查看一下单独编译qemu有那些可执行的任务task:

$ bitbake qemu -c listtasks

单独编译qemu

$ bitbake qemu

可以看到编译报错及警告如下:
在这里插入图片描述
1、手动处理方式:按以下思路进行修改:

1. gettid 需要rename 为 sys_gettid
2. stime 更新为 clock_settime
3. ‘SIOCGSTAMP’ undeclaration ,需要导入头文件<linux/sockios.h>

2、补丁处理方式:处理方式,网上能搜索到的的qemu-2.10.0版本补丁可以参考,参考一下补丁可以解决gettid与 ‘SIOCGSTAMP’ undeclaration问题。

由于我的qemu版本是2.11.1,因此下面补丁对应的行数是不太一样的。

--- qemu-2.10.0-clean/linux-user/syscall.c	2020-03-12 18:47:47.898592169 +0100
+++ qemu-2.10.0/linux-user/syscall.c	2020-03-12 19:16:41.563074307 +0100
@@ -34,6 +34,7 @@
 #include <sys/resource.h>
 #include <sys/swap.h>
 #include <linux/capability.h>
+#include <linux/sockios.h> // https://lkml.org/lkml/2019/6/3/988
 #include <sched.h>
 #include <sys/timex.h>
 #ifdef __ia64__
@@ -116,6 +117,8 @@ int __clone2(int (*fn)(void *), void *ch
 #include "qemu.h"

+extern unsigned int afl_forksrv_pid;
+
 #ifndef CLONE_IO
 #define CLONE_IO                0x80000000      /* Clone io context */
 #endif
 
@@ -256,7 +259,9 @@ static type name (type1 arg1,type2 arg2,
 #endif

 #ifdef __NR_gettid
-_syscall0(int, gettid)
+// taken from https://patchwork.kernel.org/patch/10862231/
+#define __NR_sys_gettid __NR_gettid
+_syscall0(int, sys_gettid)
 #else
 /* This is a replacement for the host gettid() and must return a host
    errno. */
@@ -6219,7 +6224,8 @@ static void *clone_func(void *arg)
     cpu = ENV_GET_CPU(env);
     thread_cpu = cpu;
     ts = (TaskState *)cpu->opaque;
-    info->tid = gettid();
+    // taken from https://patchwork.kernel.org/patch/10862231/
+    info->tid = sys_gettid();
     task_settid(ts);
     if (info->child_tidptr)
         put_user_u32(info->tid, info->child_tidptr);
@@ -6363,9 +6369,11 @@ static int do_fork(CPUArchState *env, un
                mapping.  We can't repeat the spinlock hack used above because
                the child process gets its own copy of the lock.  */
             if (flags & CLONE_CHILD_SETTID)
-                put_user_u32(gettid(), child_tidptr);
+                // taken from https://patchwork.kernel.org/patch/10862231/
+                put_user_u32(sys_gettid(), child_tidptr);
             if (flags & CLONE_PARENT_SETTID)
-                put_user_u32(gettid(), parent_tidptr);
+                // taken from https://patchwork.kernel.org/patch/10862231/
+                put_user_u32(sys_gettid(), parent_tidptr);
             ts = (TaskState *)cpu->opaque;
             if (flags & CLONE_SETTLS)
                 cpu_set_tls (env, newtls);
@@ -11402,7 +11410,8 @@ abi_long do_syscall(void *cpu_env, int n
         break;
 #endif
     case TARGET_NR_gettid:
-        ret = get_errno(gettid());
+        // taken from https://patchwork.kernel.org/patch/10862231/
+        ret = get_errno(sys_gettid());
         break;
 #ifdef TARGET_NR_readahead
     case TARGET_NR_readahead:

关于stime的问题,按如下方式修改。

//ret = get_errno(stime(&host_time));	//注释使用stime的这一行,增加下面这一行改为clock_settime(CLOCK_REALTIME, &host_time)
ret = get_errno(clock_settime(CLOCK_REALTIME, &host_time));

修改完这些,qemu-2.11.1就可以编译过去了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1541145.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年noc指导教师认证测评参考试题题目1-2合集

[noc指导教师认证] 测评参考试题 说明:NOC教师指导认证考试题目是从题库里抽题,因此每位老师每次考试题目都不一样以下题目为测试考试时收集到的一些题目,作为辅助提供给各位老师,老师们可以记住题目及答案的具体内容 (选项顺序会变),以免考试时遇到。2024年的做的题目有的…

【前端寻宝之路】学习和使用表单标签和表单控件

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-cR8zvB8CkpxTk485 {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

DataEase大屏iframe嵌入自建网站(React)

1、修改dataease 所在的服务器nginx配置 server {listen 80;server_name dataease.ibaiqiu.cn;return 307 https://$host$request_uri; } server {listen 443 ssl;server_name dataease.ibaiqiu.cn;client_max_body_size 30M;ssl_certificate /usr/local/nginx/co…

明日周刊-第3期

第3期&#xff0c;分享自己最近的感悟和实用工具。 文章目录 1. 一周热点2. 资源分享3. 言论4. 歌曲推荐 1. 一周热点 国内生产总值持续增长&#xff1a;统计局最新数据显示&#xff0c;2023年全年国内生产总值&#xff08;GDP&#xff09;超过126万亿元&#xff0c;比上年增长…

Android Preference简单介绍

Android Preference简单介绍 文章目录 Android Preference简单介绍一、前言二、Preference 简单介绍二、PreferenceScreen和SwitchPreference 简单示例2、相关demo代码示例&#xff08;1&#xff09;SettingsActivity.Java&#xff08;2&#xff09;layout\settings_activity.x…

Docker Command

小试牛刀 # 查看docker版本 docker -v docker --version # 查看帮助 docker --help # 永远的Hello World docker run hello-world镜像操作 查看本地已有的镜像 docker images -a :列出本地所有的镜像&#xff08;含中间映像层&#xff09; -q :只显示镜像ID --digests :显示…

39 openlayers 对接地图图层 绘制点线面圆

前言 这里主要是展示一下 openlayers 的一个基础的使用 主要是设计 接入地图服务器的 卫星地图, 普通的二维地图, 增加地区标记 增加 省市区县 的边界标记 基础绘制 点线面园 等等 测试用例 <template><div style"width: 1920px; height:1080px;" &g…

【嵌入式】Docker镜像构建指南:引领应用部署的革新之路

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟。提供嵌入式方向的学习指导、简历面…

深度学习pytorch——GPU加速(持续更新)

使用 .to(device)&#xff0c;以前使用 .cuda() &#xff0c;但是现在基本不使用了。 代码示例&#xff1a; 查看电脑GPU运行情况&#xff1a; 使用Ctrl Shift ESC快捷键&#xff1a;

Unreal中的四元数FQuat

四元数&#xff1a;Quaternion&#xff0c;四维数域内的数&#xff0c;可用于描述点在三维空间内的旋转&#xff08;因为三维的旋转可以理解为绕某个轴旋转一个角度&#xff0c;所以需要4个维度的信息&#xff09; 注意这里的旋转的轴&#xff0c;指的是从原点到 ( x , y , z )…

vue3+threejs新手从零开发卡牌游戏(九):添加抽卡逻辑和动效

首先优化下之前的代码&#xff0c;把game/deck/p1.vue中修改卡组方法和渲染卡组文字方法提到公共方法中&#xff0c;此时utils/common.ts完整代码如下&#xff1a; import { nextTick } from vue; import * as THREE from three; import * as TWEEN from tweenjs/tween.js impo…

数据库基础篇-------语法结构

友友们&#xff0c;大家好&#xff0c;今天我们来回顾我们的数据库啦&#xff0c;数据库技术是在我们大一就进行了解的&#xff0c;但是在大二的时候有的学校会进行数据库开发技术的教学&#xff0c;这两本书是不一样的&#xff0c;数据库基础更加偏向于对应的基础语法结构&…

计算方法实验2:列主元消元法和Gauss-Seidel迭代法解线性方程组

Task 即已知 y 0 0 , y 100 1 y_00,y_{100}1 y0​0,y100​1&#xff0c;解线性方程组 A y b \mathbf{A}\mathbf{y} \mathbf{b} Ayb&#xff0c;其中 A 99 99 [ − ( 2 ϵ h ) ϵ h 0 ⋯ 0 ϵ − ( 2 ϵ h ) ϵ h ⋯ 0 0 ϵ − ( 2 ϵ h ) ⋯ 0 ⋮ ⋮ ⋱ ⋱ ⋮ 0 0 ⋯…

数学建模综合评价模型与决策方法

评价方法主要分为两类&#xff0c;其主要区别在确定权重的方法上 一类是主观赋权法&#xff0c;多次采取综合资讯评分确定权重&#xff0c;如综合指数法&#xff0c;模糊综合评判法&#xff0c;层次评判法&#xff0c;功效系数法等 另一类是客观赋权法&#xff0c;根据各指标…

(C语言)浮点数在内存中的存储详解

1. 浮点数 常见的浮点数&#xff1a;3.14159、 1E10等 &#xff0c;浮点数家族包括&#xff1a; float、double、long double 类型。 浮点数表示的范围&#xff1a; float.h 中定义. 2. 浮点数的存储 我们先来看一串代码&#xff1a; int main() {int n 9;float* pFloa…

高中信息技术教资刷题笔记_大题篇

1.选择排序 2. SMTP属于TCP/IP协议体系结构中的哪一层&#xff1f;请列出其通信的三个阶段。 3.高中信息技术课程的基本理念/意义 4.视频作品制作和发布的主要环节 5.信息社会责任内涵及学生表现 6.教学活动意图 ①突出学生的主体地位。材料中&#xff0c;王老师设计的“扮演谍…

关系型数据库mysql(4)事务

目录 一.事务的概念 1.事务的定义 2.事务的特点 2.1原子性 2.2一致性 2.4持久性 3.事务之间的相互影响 3.1脏读 3.2不可重复读 3.3幻读 3.4丢失更新 4. 事务的隔离级别&#xff08;如何解决事务的干扰&#xff09; 4.1查询全局事务隔离级别 4.2查询全局事务 …

【零基础C语言】联合体(共用体)和枚举

目录 自定义类型&#xff1a;联合体(共用体)和枚举 1.自定义类型&#xff1a;联合体(共用体) 1.1 联合体的声明 1.2 联合体的特点 ​编辑1.3 联合体的大小计算 1.4使⽤联合体是可以节省空间的 1.5使用联合体写一个程序判断机器是大端还是小端存储 2.自定义类型&#xff1a;…

详解|temu选品师是什么?算蓝海项目吗?

在快速发展的跨境电商行业中&#xff0c;temu选品师这一岗位逐渐受到人们的关注。temu作为拼多多旗下的跨境电商平台&#xff0c;致力于为中国商家提供一个通向全球市场的桥梁。而temu选品师&#xff0c;则是这个桥梁上不可或缺的角色。 temu选品师主要负责在海量商品中挑选出具…

探索Zalo:从社交APP到Mini App开发指南

1.Zalo是什么&#xff1f; Zalo是一款源自越南的即时通讯和社交软件&#xff08;相当于国内的微信&#xff09;&#xff0c;由越南VNG公司开发。它集成了多种功能&#xff0c;包括但不限于免费的文字、语音、视频消息发送&#xff0c;高质量的语音和视频通话&#xff0c;群聊功…