Yocto Project 编译imx-第1节(下载和编译)

Yocto Project 编译imx-第1节(下载和编译)

  • 前言说明
    • 参考文章
    • 版本说明
    • Ubuntu 系统说明和建议
    • 必备软件安装
    • 设置Git用户名和密码
      • 解决git报错
      • 使用FastGithub
    • 获取repo
    • 获取Yocto项目
      • 设置Yocto源
        • 获取Yocto版本(https://source.codeaurora.org废弃)
        • 获取Yocto版本(https://github.com/nxp-imx/imx-manifest)
    • 解压文件(B站离线教程使用,在线下载文件不需要这步)
    • 初始化Yocto构建目录
      • 文件说明
    • BitBake构建系统
      • BitBake 使用的命令行参数
        • 使用举例1
        • 使用举例2
      • bitbake-layers 使用的命令行参数

前言说明

参考网上其他人写的文章,然后整理的知识笔记。

参考文章

iMX6Ull采用Yocto构建嵌入式Linux系统系列:https://www.bilibili.com/read/cv16216317
bitbake 语言网站: https://docs.yoctoproject.org/bitbake/2.0/bitbake-user-manual/bitbake-user-manual-intro.html
Yocto网站 :https://git.yoctoproject.org/poky/refs/heads
imx-yocto 库网站1: https://source.codeaurora.org/external/imx/
imx-yocto 库网站2: https://git.codelinaro.org/explore/
openembedded 网站:https://layers.openembedded.org/layerindex/branch/zeus/layers/
将docker添加到发行版教程:https://m5p3nc3r.github.io/Adding_docker_to_yocto/

版本说明

名词说明
BB_VERSION“1.44.0”
BUILD_SYS“x86_64-linux”
NATIVELSBSTRING“ubuntu-20.04”
TARGET_SYS“arm-poky-linux-gnueabi”
MACHINE“imx6dlsabresd”
DISTRO“fsl-imx-fb”
DISTRO_VERSION“5.4-zeus”
TUNE_FEATURES“arm vfp cortexa9 neon thumb callconvention-hard”
TARGET_FPU“hard”

Ubuntu 系统说明和建议

使用的Ubuntu 系统可以是虚拟机,也可以是直接安装的系统。鉴于虚拟机的性能,建议使用自己安装的系统的方式进行编译,可以安装win10和ubuntu双系统方便开发使用,如果是安装了双系统,在Ubuntu 系统中也是可以挂载win10系统使用的硬盘的。
电脑的硬件最好是CPU核心越多越好。核心越多内存也要跟着一起扩大,因为编译时,核心越多,执行的任务越多,消耗的内存也越多。
双系统安装教程:http://t.zoukankan.com/leime-p-9446954.html

必备软件安装

安装指令:

sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib 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
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \build-essential chrpath socat cpio python python3 python3-pip python3-pexpect \xz-utils debianutils iputils-ping libsdl1.2-dev xterm
sudo apt install zstd curl

设置Git用户名和密码

git config --global user.name "Your Name" // 配置git用户名:“Your Name”
git config --global user.email "Your Email" // 配置git用户邮箱:“Your Email”
git config --list //  查看git配置信息

解决git报错

fatal: unable to access ‘https://github.com/…/.git‘: Could not resolve host: github.com

git config --global --unset http.proxy 
git config --global --unset https.proxy

使用FastGithub

地址:https://github.com/dotnetcore/FastGithub
详细使用方法参照FastGithub介绍,可以加速git访问
在这里插入图片描述

获取repo

切换至工程项目文件夹,如:/home/YourName/Yocto/,在该文件夹下使用如下命令:

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod a+x repo

获取Yocto项目

设置Yocto源

切换至Yocto工作路径/home/YourName/Yocto/,然后使用如下repo命令,获取Yocto项目(克隆NXP官方fsl-arm-yocto-bsp.git项目的imx-linux-zeus分支):

./repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-zeus -m imx-5.4.47-2.2.0.xml

注意:由于国内的原因,直接运行上面repo init命令时,会出现fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle的错误,这是因为repo运行时,会去google服务器请求最新版本,解决方式是在本地环境变量中指定repo服务器地址,可以使用清华的镜像源进行更新,即将如下内容复制到你的~/.bashrc里,并重启Ubuntu即可:

export REPO_URL="https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/"

输入上述命令./repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-zeus -m imx-5.4.47-2.2.0.xml后,会提示/usr/bin/env: ‘python’: No such file or directory,这是因为Ubuntu20.04中已经移除了python2的原因,直接使用的是Python3。因此,使用命令:

sudo rm -r /usr/bin/python
sudo ln -s /usr/bin/python3 /usr/bin/python

将python连接为Python3即可。再次输入:

获取Yocto版本(https://source.codeaurora.org废弃)

Yocto 3.0版本(使用)

./repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-zeus -m imx-5.4.47-2.2.0.xml

Yocto 3.1版本

./repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-dunfell -m imx-5.4.47-2.2.0.xml

Yocto 4.0版本

./repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-kirkstone -m imx-5.15.32-2.0.0.xml
获取Yocto版本(https://github.com/nxp-imx/imx-manifest)
./repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-zeus -m imx-5.4.47-2.2.0.xml

Yocto 3.1版本

./repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-dunfell -m imx-5.4.47-2.2.0.xml

Yocto 4.0版本

./repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-kirkstone -m imx-5.15.32-2.0.0.xml

获取Yocto项目

./repo sync

解压文件(B站离线教程使用,在线下载文件不需要这步)

下载的文件为3个文件,把三个文件组合在一起指令入如下

cat *.tar.gz.* >> downloads.tar.gz

解压 downloads.tar.gz

tar -zxvf downloads.tar.gz

解压 uboot-2016.tar.bz2
1.先用 bzip2 -df 解压 bz2 文件,解压之后原 bz2 文件会消失,不放心的话可以自己备份一下。
2、褪下外层 bz2 之后该怎么解压怎么解压。

bzip2 -df ./uboot-2016.tar.bz2
tar -xvf uboot-2016.tar

初始化Yocto构建目录

通过repo取了Yocto项目源码(NXP官方的index: imx-manifest.git项目的imx-linux-zeus分支)之后,还需要初始化Yocto构建目录,用于Yocto构建嵌入式Linux系统的工作环境(实际上是创建一些文件夹、初始化一些变量值,得到的配置文件,用于构建特定的嵌入式Linux发行版本)。 在repo获取的Yocto项目源码路径(/home/jason/Linux/Yocto/fsl-release-yocto)下,Freescales提供了imx-setup-release.sh脚本。该脚本用于初始化Yocto构建目录,该脚本语法如下:

DISTRO=<distro name> MACHINE=<machine name> source imx-setup-release.sh -b <build dir>

imx-setup-release.sh脚本运行时,需要输入3个主要参数:

DISTRO=fsl-imx-fb
MACHINE=imx6ull14x14evk #芯片型号
-b build

fsl-imx-fb 说明
framebuffer是出现在内核中的驱动程序的接口。他把显示设备抽象的映射到帧缓冲区——可以认为是显存!可以把它看成是显示内存的一个映像,将其映射到进程地址空间以后,就可以直接进行读写操作,并且写操作可以直接反应在屏幕上。

例如:
1.imx6ull14x14evk芯片

 DISTRO=fsl-imx-fb MACHINE=imx6ull14x14evk source imx-setup-release.sh -b build

2.imx6dlsabresd芯片(使用)

 DISTRO=fsl-imx-fb MACHINE=imx6dlsabresd source imx-setup-release.sh -b build

3.imx8mpq芯片

DISTRO=fsl-imx-fb MACHINE=imx8mqevk source imx-setup-release.sh -b build

4.imx8mpq芯片

DISTRO=fsl-imx-xwayland MACHINE=imx8mqevk source imx-setup-release.sh -b build_imx8

文件说明

获取Yocto项目源码成功后,会在Yocto工作路径/home/jason/Linux/Yocto/fsl-release-yocto路径下得到imx-setup-release.sh、setup-environment、sources等文件。其中:

文件或文件夹说明
imx-setup-release.sh该脚本用于初始化Yocto构建嵌入式Linux系统工作环境。
setup-environment该脚本根据运行imx-setup-release.sh脚本时输入的参数,设置Yocto工作环境。
sources文件夹在该文件夹下存放了很多文件、源码以及编译工具,用于构建嵌入式Linux系统。
sources文件夹下文件说明
base该文件夹下主要存放了bblayers.confsetup-environment,构建Yocto工作环境时用到。
meta-browser提供了几种浏览器,如gnome、mozilla。
meta-clangC语言家族前端和LLVM编译器后端。
meta-freescale提供了一些基于Freescale ARM官方参考板的基础支持软件。
meta-freescalse-3rdparty第三方板卡支持软件。
meta-freescalse-distro图形后端驱动层,包括fsl-framebuffer,fsl-wayland,fsl-xwayland,fslc-framebuffer,fslc-wayland,fslc-x11,fslc-xwayland,当前驱动选择与芯片型号有关,不一定全部支持
meta-nxp-demo-experienceNXP官方提供的一些demo。
meta-openembeddedOE内核的一些集合,定义了构建Yocto使用到的一些工具软件。
meta-qt5QT5相关的软件。
meta-timesys提供Vigiles工具来查看和通知BSP漏洞。
pokyYocto的基础发行版,在此版本基础上进行构建自己的嵌入式Linux发行版。
meta-python2python2相关的软件。
meta-rustrust相关的软件。
meta-imx文件夹
sources/meta-imx 文件夹下文件说明
meta-bspmeta-fsl-arm, poky, meta-openembedded层的一些更新软件。
meta-sdkmeta-freescale-distros以及发行版的一些更新软件。
meta-ml机器学习相关的软件。

需要注意的是,对于i.MX板卡的配置,主要是在meta-imx以及meta-freescale中定义的,包括Linux内核、U-Boot以及一些板级硬件配置信息

BitBake构建系统

Yocto项目中,采用的是BitBake工具来构建嵌入式Linux系统的。通过repo获取了Yocto项目的同时,也一起获取BitBake工具,直接使用即可。使用BitBake的最主要目的是生成一些安装包、内核、SDK以及一个完整的嵌入式Linux发行版(包括:U-Boot、Kernel、Rootfs、DeviceTree)。这些安装包或目标文件就构成了一个完成的嵌入式Linux发行版,可以通过Freescale提供的工具,将其生成一个SD卡镜像文件,用于烧写至开发板中。

运行imx-setup-release.sh脚本后,会自动生成一个build文件夹,进入该文件夹,运行bitbake命令:

bitbake imx-image-multimedia

此镜像包含除QT5,OpenCV,机器学习软件包之外的所有软件包。git

bitbake imx-image-full

这是包括imx image multimedia,OpenCV,QT5,机器学习的镜像

BitBake 使用的命令行参数

BitBake 参数描述示例备注
<target>直接编译/执行一个 recipe bitbake core-image-minimal
-c <task> <target>执行某个 recipe 的某个任务bitbake -c build glibc示例表示执行 glibc 的 do_build 任务<task>表示要执行的任务:fetch 表示从 recipe 中定义的地址拉取软件到本地 compile 表示重新编译镜像或软件包deploy 表示部署镜像或软件包到目标 rootfs 内 cleanall 表示清空整个构建目录
-c listtasks <target>显示某个 recipe 可执行的任务bitbake -c listtasks glibc如果你不确定 target 支持哪些任务,就可以用 listtasks 来查询
-b <xx.bb>用BitBake直接执行这个.bb文件bitbake -b rtl8188eu-driver_0.1.bb单独编译 rtl8188eu-driver 任务
-k有错误发生时也继续构建
-e <target>显示当前的执行环境查找包的原路径:bitbake -e hello | grep ^SRC_URI 查找包的安装路径:bitbake -e hello | grep ^S=
-s显示所有食谱(recipes)的当前和首选版本bitbake -s | grep hello例如如果自己在一个Layer下面安装了一个hello.bb,可以查看 hello 这个 package 能否被 bitbake
-v显示执行过程
-vDDDD打印一些调试信息(v 后面可以加多个 D)bitbake -vDDDD -c build glibc
-g <target>显示一个包在 BitBake 时与其他包的依赖关系,生成依赖图bitbake -g glibc在当前目录生成一些文件:task-depends.dot(任务之间的依赖关系)package-depends.dot(运行时的目标依赖)pn-depends.dot(构建时的依赖)pn-buildlist(包含需要构建的任务列表)*.dot 文件可以通过 xdot 工具打开
使用举例1
1.    显示全局或每个配方环境有关变量所在位置的信息:# 查看源码目录:bitbake –e linux-renesas | grep ^S=   # ^S 首字母为S # S="/home/zsj/rzg2/build/tmp/work-shared/smarc-rzg2l/kernel-source"bitbake –e u-boot | grep ^S=   # 查看源码 git 下载链接:bitbake -e linux-renesas | grep ^SRC_URI=bitbake -e u-boot | grep ^SRC_URI=# 查看源码编译工作目录:bitbake -e linux-renesas | grep ^WORKDIR=bitbake -e u-boot | grep ^WORKDIR=
2.    配置内核 menuconfig
bitbake linux-renesas -c menuconfig
3.    编译修改后的内核目录 (-C 为大写)
bitbake linux-renesas -C compile –f
4.    编译内核所需要的执行的任务:
bitbake linux-renesas -c listtasks
5.    显示图层
bitbake-layers show-layers
6.    强制执行操作,即使不需要
bitbake -f <target>
7.    显示更多调试信息
bitbake -DDD <target>
8.    清除单个目标
bitbake -c clean <recipe_name/target_name>      # 执行 do_clean 任务
bitbake -c cleanall <recipe_name/target_name>  # 轻易不要用这个,这个会将 downloads 的源文件删除
使用举例2

单独编译 kernel、模块、设备树
MYS-6ULX-IOT 开发板对应的 kernel 是 linux-mys6ulx:

$ bitbake -c menuconfig -f -v linux-mys6ulx
$ bitbake -c compile -f -v linux-mys6ulx
$ bitbake -c compile_kernelmodules -f -v linux-mys6ulx
$ bitbake -c deploy -f -v linux-mys6ulx

也有一些资料用 virtual/kernel 来指定 kernel,命令变成这样了:

$ bitbake -c menuconfig virtual/kernel
$ bitbake -c compile -f -v virtual/kernel
$ bitbake -c compile_kernelmodules -f -v virtual/kernel
$ bitbake -c deploy -f -v virtual/kernel

单独编译u-boot

$ bitbake -c compile -f -v u-boot-mys6ulx
$ bitbake -c deploy -f -v u-boot-mys6ulx

编译文件系统

$ bitbake core-image-minimal
$ bitbake core-image-base
$ bitbake fsl-image-gui
$ bitbake fsl-image-qt5
$ bitbake fsl-image-multimedia

清除编译结果

$ bitbake -c clean -v linux-mys6ulx

bitbake-layers 使用的命令行参数

BitBake提供了Layer管理工具,用来查看Layers的一些基本信息。使用方式如下:

$ bitbake-layers command [arguments]

可以使用的命令如下:

command说明
help帮助命令。
show-layers显示当前配置的Layer。
show-recipes显示可用的recipes以及recipes提供的layers。
show-overlayed显示覆盖的recipes。高优先级Layer中的recipe将覆盖其他低优先级Layer中相同的recipes。
show-appends显示.bbappend文件,以及对应的recipe文件。
show-cross-depends显示不同Layer中recipes的依赖关系。

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

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

相关文章

记录用命令行将项目打包成war包

记录用命令行将项目打包成war包 找到项目的pom.xml 在当前路径下进入cmd 输入命令 mvn clean package 发现报错了 Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project MMS: Error assembling WAR: webxml attribute is req…

排序算法-快速排序法(QuickSort)

排序算法-快速排序法&#xff08;QuickSort&#xff09; 1、说明 快速排序法是由C.A.R.Hoare提出来的。快速排序法又称分割交换排序法&#xff0c;是目前公认的最佳排序法&#xff0c;也是使用分而治之&#xff08;Divide and Conquer&#xff09;的方式&#xff0c;会先在数…

统计子岛屿的数量

统计子岛屿 题目描述 给你两个 m x n 的二进制矩阵 grid1 和 grid2 &#xff0c;它们只包含 0 &#xff08;表示水域&#xff09;和 1 &#xff08;表示陆地&#xff09;。一个 岛屿 是由 四个方向 &#xff08;水平或者竖直&#xff09;上相邻的 1 组成的区域。任何矩阵以外…

【STM32单片机】防盗报警器设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器&#xff0c;使用按键、动态数码管、蜂鸣器、指示灯、热释电人体红外传感器等。 主要功能&#xff1a; 系统运行后&#xff0c;默认处于布防状态&#xff0c;D1指示灯…

Excel 规范录入数据

文章目录 录入日期录入百分比 快捷键&#xff1a; tab&#xff1a;向右切换单元格 enter&#xff1a;向下切换行 shift tab&#xff1a;向左切换单元格 shiftenter&#xff1a;向上切换行 录入日期 输入今天的日期的快捷键&#xff1a;Ctrl ; 输入当时的时间的快捷键&a…

Java反射获取抽象类方法属性问题讲解

Java反射获取抽象类方法属性问题讲解 结论一、案例准备二、测试方法&#xff1a;使用反射获取抽象类私有方法和私有属性具体操作&#xff08;获取私有方法&#xff09;具体操作&#xff08;获取私有属性&#xff09; 结论 Java 通过反射可以获得抽象类的任何修饰符&#xff08…

Gin框架中的Cookie怎么搞(会话控制)

参考地址 设置和获取 Cookie | Gin Web Framework (gin-gonic.com)https://gin-gonic.com/zh-cn/docs/examples/cookie/ 什么是cookie cookie在互联网上随处可见,具体体现如下: 保持登录状态 保存浏览器的历史记录 大数据随心配,按喜好推送讯息 购物网站加入购物车 都会…

IntelliJ IDEA Maven 项目的依赖分析

在一个 maven 的项目中&#xff0c;我们需要知道我们的项目中使用的包可能有哪些冲突。 这个在 IntelliJ IDEA 中提供了贴心的查看。 选择 Maven 项目中的分析依赖。 随后&#xff0c;IntelliJ IDEA 将会打开一个依赖分析的标签页。 在这个标签页中&#xff0c;我们可以看到…

用例图 UML从入门到放弃系列之三

1.说明 关于用例图&#xff0c;这篇文章我将直接照搬罗伯特.C.马丁老爷子在《敏捷开发》一书种的第17章&#xff0c;并配上自己的理解&#xff0c;因为这一章写的实在是太精彩了&#xff0c;希望能够分享给大家&#xff0c;共勉。以下是老爷子的原文中文翻译以及豆芽的个人解读…

C++ (Chapter 1)

C (一) 1.C的命名空间 先来看一个C语言的例子: 下面这段代码是可以正常运行的. #include<stdio.h> int rand 0; int main() {printf("%d \n", rand);return 0; }但是,包含了一个头文件之后,甚至无法通过编译. #include<stdio.h> #include<stdli…

大数据Doris(八):启动FE步骤

文章目录 启动FE步骤 一、配置环境变量 二、​​​​​​​创建doris-mate

排序算法-插入排序法(InsertSort)

排序算法-插入排序法&#xff08;InsertSort&#xff09; 1、说明 插入排序法是将数组中的元素逐一与已排序好的数据进行比较&#xff0c;先将前两个元素排序好&#xff0c;再将第三个元素插入适当的位置&#xff0c;也就是说这三个元素仍然是已排序好的&#xff0c;接着将第…

剖析伦敦银最新价格走势图

国际金融市场瞬息万变&#xff0c;伦敦银的价格走势会受到诸多因素的影响&#xff0c;比如重要经济数据的公布&#xff0c;国际间的政治博弈&#xff0c;突发的政经大事&#xff0c;都可以令白银价格的走势&#xff0c;在短时间内暴涨暴跌的情况。 要在伦敦银市场实现良好的收益…

Linux文件目录总结

众所周知&#xff0c;Linux系统文件目录是树状结构&#xff0c;如下图所示&#xff1a; 英文缩写的目录下到底存放的是什么文件&#xff0c;善于做归纳总结的逍遥哥哥来解释一下&#xff1a; /bin&#xff1a;bin是Binary的缩写&#xff0c;这个目录存放着最经常使用的命令。 …

NEFU离散数学实验1-排列组合

相关概念 在离散数学中&#xff0c;组合数是一种用于计算从n个不同元素中选取m个元素的方式。以下是一些与组合数相关的概念&#xff1a; 排列&#xff1a;从n个不同元素中选取m个元素进行排列&#xff0c;排列数用P(n, m)表示&#xff0c;计算公式为P(n, m) n! / (n - m)! …

nodejs+vue家教管理系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1nodejs简介 4 2.2 express框架介绍 6 2.3 B/S结构 4 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性…

基于YOLO算法的单目相机2D测量(工件尺寸和物体尺寸)

1.简介 1.1 2D测量技术 基于单目相机的2D测量技术在许多领域中具有重要的背景和意义。 工业制造&#xff1a;在工业制造过程中&#xff0c;精确测量是确保产品质量和一致性的关键。基于单目相机的2D测量技术可以用于检测和测量零件尺寸、位置、形状等参数&#xff0c;进而实…

【网络安全】如何保护IP地址?

使用防火墙是保护IP地址的一个重要手段。防火墙可以监控和过滤网络流量&#xff0c;并阻止未经授权的访问。一家网络安全公司的研究显示&#xff0c;超过80%的企业已经部署了防火墙来保护他们的网络和IP地址。 除了防火墙&#xff0c;定期更新操作系统和应用程序也是保护IP地址…

学信息系统项目管理师第4版系列24_整合管理

1. PMBOK 1.1. 自1987年以来&#xff0c;PMBOK-直是基于过程的项目管理标准的重要代表 1.1.1. 基于过程的方法是项目管理的基石 1.2. 从2021年开始&#xff0c;第7版PMBOK采用了基于原则的标准&#xff0c;其中包含了 12个项目管理基本原则&#xff0c;这些基本原则为有效的…

Python数据攻略-递归方式实现json多层级数据展平

之前介绍过使用pandas如何展平json的多层数据,如果有兴趣可以参考文章 Python数据攻略-Pandas的json_normalize方法 Python数据攻略-递归方式实现json多层级数据展平 今天再介绍一个非常好用的使用递归的方式展平json数据。 文章目录 数据处理目标操作示例核心函数方法操作…