rockchip的yocto编译环境搭建

作者: 良知犹存

作者:良知犹存

转载授权以及围观:欢迎添加微信公众号:Conscience_Remains

总述

嵌入式的朋友们,应该知道Linux驱动开发过程中,需要进行搭建交叉编译工具链环境、移植u-boot、kernel、根文件系统的几个部分工作。最开始们的学习是把几个模块分开使用学习使用,各个部分生成代码,然后进行烧录,有时候们会用脚本去把各个部分的代码打包到一起进行烧录。

后来随着工具的发,们只需要一个SDK就可以完成所有的工作,从编译交叉工具链到生成的打包文件。而这种软件的变化最开始是为了方便根文件系统的编译,最开始的busybox需要自己移植lib、还要很多第三方的软件也要们自行添加。到现在比较常见的buildroot就是一体化生成,包括今天要介绍yocto环境都是如此,虽然buildroot小巧,但是有些功能没有办法完全满足开发,例如ROS和QT一些的支持。

韦东山老师在最新的pdf中介绍yocto是这样的。

Yocto 超级难用

单是下载程序容量就达到 10G,使用一般的个人电脑需要编译 20 小时以上。以后稍微修改一下程序,

重新制作时至少需要半小时。

们迫不得已才使用 Yocto:QT GUI 程序需要用到 GPU 的一些库,在 Buildroot 上们还没搞定。

韦东山

确实yocto其他环境无法比拟的优势,自己使用建议用buildroot,除非必要,不建议使用yocto。下面就听介绍是如何搭建适配rockchip的yocto环境的。

一、基本介绍

rockchip的bsp构建方式有三种:

1.rockchip维护的linux sdk包,涵盖uboot、kernel、buildroot(便于构建rootfs)、toolchain。

其中buildroot也是官方主推的bsp维护方式,采用make、pkg-config工作模式,使用简单。

2.独立获取rockchip的uboot、kernel,其相对于原版拥有rockchip的patch。

3.rockchip维护的yocto,类似buildroot但比之略微复杂,使用bitbake工作模式,相对应的,其工作方式更加灵活而强大。

本文就是介绍rk的yocto环境的配置:

Yocto计划(英语:Yocto Project™),一个自由软件项目计划,由Linux基金会于2010年宣布,这个计划的目标在于创造出可以提供嵌入式linux发行版的软件工具,以改善软件发展流程。2011年3月,这个计划与OpenEmbedded计划结合,以OpenEmbedded-Core计划作为计划的另一个名称。

它提供跨平台工具、元数据以及流程以利于快速和可复制的开发Linux嵌入式系统。

Yocto项目主要由三个组件组成:

BitBake:读取配置档与处方档(recipes)并运行,配置与建置所指定的应用程序或者系统文件映像档。

OpenEmbedded-Core:由基础layers所组成,并为处方档(recipes),layers与classes的集合:这些要素都是在OpenEmbedded系统中共享使用的。

Poky:是一个参考系统。是许多案子与工具的集合,用来让用户延伸出新的发行版(Distribution)

from:维基百科

首先们需要准备一个足够大的目录放yocto,因为在编译过程中,yocto会下载很多包,至少编译之后空间大小友32G。

甚至正点原子的imx6u的yocto制作中有这么几句话的描述

yocto 构建根文件系统需要预留足够的硬盘空间, I.MX yocto 手册上标明至少要留120G 的空间。 yocto 构建根文件系统需要非常长的时间, 不建议用低配置的电脑进行构建。否则可能需要一两天的构建时间。 yocto 构建的根文件系统包括了官方评估板所用的一切东西,文件系统十分巨大,需要读者自行裁剪

二、准备工作

1.首先们要git rockchip在github的yocto源码,这个时候需要电脑端有git环境,至于这块的操作请大家阅读之前的文章就好了,

git从安装到多账户操作一套搞定(一)入门使用

git从安装到多账户操作一套搞定(二)多账户使用

这里就不多做描述。

2.安装编译所需要的一些包

sudo apt-get install gawk wget git-core diffstat unzip texinfo \build-essential chrpath sudo apt-get install libsdl1.2-dev xterm sudo apt-get install make xsltproc docbook-utils fop sudo apt-get install autoconf automake libtool libglib2.0-dev

3.使用repo去git源码

repo 是一个构建在 Git 之上的工具,它可以更容易地管理包含多个存储库的项目,而这些存储库不需要位于同一台服务器上。repo 很好地补充了 yocto 项目的分层特性,使用户可以更容易地将自己的层添加到 BSP 中。简单来说,repo 用来管理多个 git 工程, git 是无法将厂商的在存储库里面的某个项目给 clone 下来,如果们只需要厂商的 yocto 项目, (要想知道 芯片厂商可不只有 yocto 项目呢),使用 Git 下载却把个存储库项目都下下来了。

这就是为什么要用 repo 来管理更庞大的项目的原因了。

下面是repo命令里面git的源码


repo init --repo-url=https://github.com/rockchip-linux/repo-u https://github.com/rockchip-linux/manifests-b yocto -m rocko.xml

下载结束之后用更新一下文件

repo sync

第一步下载比较少,第二部同步更新的时候下载了好多文件,(有梯子请用梯子)目录如下

这是编译之后用tree 2级目录的情况(3级以上文件显示就太多了 )

├── build

│ ├── bitbake-cookerdaemon.log

│ ├── bitbake.lock

│ ├── bitbake.sock

│ ├── build

│ └── conf

├── flash_tool.sh

├── README

├── rkbin

│ ├── bin

│ ├── img

│ ├── README

│ ├── RKBOOT

│ ├── RKBOOT.ini

│ ├── RKTRUST

│ ├── scripts

│ └── tools

├── setup-environment

└── sources

├── base

├── bitbake

├── meta-browser

├── meta-openembedded

├── meta-qt5

├── meta-rockchip

├── meta-rockchip-extra

└── poky

三、选择recipe进行编译

源码下载之后,们就要开始进行软件的编译工作了,正常第一件事情,先配置环境以及编译yocto的编译工具。

MACHINE=firefly-rk3399 DISTRO=rk-x11 . ./setup-environment -b build

(注意两个点之间有空格,这一步通过执行setup-environment脚本建立yocto构建系统环境变量,其中MACHINE指定机型,DISTRO指定图形后端,rk-x11表示使用x11后端,rk-wayland使用wayland后端,rk-none使用eglfs后端,-b指定构建目录,命令执行成功将直接跳进构建目录)

接下来就要开始用bitbake工具进行编译了,注意:

这里就遇到了一个问题,困扰了半天,随便用了个编译选项,就是提示

ERROR: Unable to start bitbake server

在stackoverflow上收到相关的文章

https://stackoverflow.com/questions/48132054/unable-to-start-bitbake-server

都是提示构建的系统上缺少一些包

思前想后想最前面的时候都已经安装了包,并且有环境可以正常使用yocto编译了。stackoverflow也不香了,最后一点点的摸,找到了问题。

在sources/poky下面藏着一个文件 oe-init-build-env 它是专门用了使能bitbake工具的,所以们除了要设置setup-environment还要在编译目录进行

source ../sources/poky/oe-init-build-env

这样们就可以进行相应的交叉工具链、根文件系统以及内核、u-boot的编译了。

其实这个时候要进行详细设置编译的环境,以及对应编译镜像里面需要的包,但是由于是属于环境的初步的搭建,就直接选择默认配置,然后进行了一些简单的编译了。

bitbake core-image-minimal

从上面图片可以看到,当把bitbake配置好后,下面就有了一些编译的参考选项,有根文件系统,有toolchain(编译工具链)等,

bitbake core-image-minimal

因为第一次编译的原因,bitbake边编译边下载的机制,这次编译花费了十几个小时,而且还是全程梯子。

查看编译好的文件

ls tmp/deploy/images/qemux86/

同样的操作继续编译u-boot

bitbake u-boot-mkimage

继续编译 编译工具链

bitbake meta-toolchain

继续编译 内核

bitbake linux-yocto

搭建yocto环境过程中,也是收集了一些官方和文章,大家如果想要的话,关注公众号,回复yocto环境搭建,就可以收到资料了。

这就是分享的rockchip的yocto环境搭建,篇幅的问题也不能继续展开介绍了,后续有时间再把yocto怎么增、改、删相应的源码包、yocto交叉工具链的编译设置等的操作介绍给大家,如果大家有什么更好的思路,欢迎分享交流哈

更多分享,扫码关注

原文作者:良知犹存

原文链接:https://www.cnblogs.com/conscience-remain/p/13552034.html

更多推荐

更多
  • Spark编程-结构化流式编程指南 概述,简单例子,编程模型,使用 Dataset 和 DataFrame 的API,连续处理,额外信息,基本概念,处理 Eventtime 和 Late Data,faulttolerance 语义,创建流式 DataFrame 和流式
  • Spark编程-20 Spark 配置Spark 属性,Environment Variables环境变量,Configuring Logging配置 Logging,Overriding configuration directory覆盖配置目录,Inhe
  • Spark编程-在Mesos上运行Spark 运行原理,安装 Mesos,连接 Spark 到 Mesos,Mesos 运行模式,Mesos Docker 支持,集成 Hadoop 运行,使用 Mesos 动态分配资源,配置,故障排查和调试,从源码安装,第三方软件包,验证,上传 S
  • Spark编程-Running Spark on YARN 启动 Spark on YARN,准备,配置,调试应用,在安全集群中运行,添加其他的 JARs,配置外部的 Shuffle Service,用 Apache Oozie 来运行应用程序,Kerberos 故障排查,使用 Spark Hi
  • Spark编程-Spark 调优 数据序列化,内存调优,其它考虑,,内存管理概论,确定内存消耗,优化数据结构,序列化 RDD 存储,GC优化,并行级别,Reduce任务内存使用,广播大变量,数据局部性, 由于大多数Spark计算都在内存中,所以集群中的任何资源(C
  • Spark编程-Spark Standalone模式 安装 Spark Standalone 集群,手动启动一个集群,集群启动脚本,提交应用程序到集群中,启动 Spark 应用程序,Resource Scheduling资源调度,监控和日志,与 Hadoop 集成,配置网络安全端口,高可用
  • Spark编程-Monitoring and Instrumentation Web 界面,Metrics,高级工具,事后查看,REST API,环境变量,Spark配置选项,API 版本控制策略, 有几种方法来监视 Spark 应用程序:Web UI,metrics 和外部工具。 Web 界面每
  • Spark编程-Spark提交任务Submitting Applications 打包应用依赖,用 sparksubmit 启动应用,Master URLs,从文件中加载配置,高级的依赖管理,更多信息, 在 script in Spark的 `bin` 目录中的`spark-submit` 脚本用与在集群上启动
  • Spark编程-作业调度 概述,跨应用调度,应用内调度,动态资源分配,公平调度资源池,资源池默认行为,配置资源池属性,配置和部署,资源分配策略,优雅的关闭Executor(执行器),概述Spark 有好几计算资源调度的方式。首先,回忆一下 [集群
  • Spark编程-Spark 概述 安全,下载,运行示例和 Shell,在集群上运行,进一步学习链接, Apache Spark 是一个快速的,通用的集群计算系统。它对 Java,Scala,Python 和 R 提供了的高层 API,并有一个经优化的支持通用执行图
  • 近期文章

    更多
    文章目录

      推荐作者

      更多