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环境,至于这块的操作请大家阅读我之前的文章就好了,
这里就不多做描述。
2.安装编译所需要的一些包


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







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

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


这是我编译之后用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的编译工具。

(注意两个点之间有空格,这一步通过执行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还要在编译目录进行





这样我们就可以进行相应的交叉工具链、根文件系统以及内核、u-boot的编译了。
其实这个时候要进行详细设置编译的环境,以及对应编译镜像里面需要的包,但是由于我是属于环境的初步的搭建,我就直接选择默认配置,然后进行了一些简单的编译了。
bitbake core-image-minimal


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



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


查看编译好的文件



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



继续编译 编译工具链



继续编译 内核



搭建yocto环境过程中,也是收集了一些官方和文章,大家如果想要的话,关注我公众号,回复yocto环境搭建,就可以收到资料了。
这就是我分享的rockchip的yocto环境搭建,篇幅的问题也不能继续展开介绍了,后续有时间再把yocto怎么增、改、删相应的源码包、yocto交叉工具链的编译设置等的操作介绍给大家,如果大家有什么更好的思路,欢迎分享交流哈


更多分享,扫码关注我
版权声明: 本文为 InfoQ 作者【良知犹存】的原创文章。
原文链接:【http://xie.infoq.cn/article/2bf4b83febe0419e46ea4b3e8】。文章转载请联系作者。
评论