作者:良知犹存

转载授权以及围观:欢迎添加微信公众号: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交叉工具链的编译设置等的操作介绍给大家,如果大家有什么更好的思路,欢迎分享交流哈

更多分享,扫码关注我

rockchip的yocto编译环境搭建的更多相关文章

  1. ubuntu12.04下安卓编译环境搭建总结

    前言:      因为工作需要,经常要编译安卓下的动态库,公司有已经搭建好环境的服务器,但是第一自己想自己搭建一下了解一个整个过程,另外,公司的服务器也经常出现问 题,导致编译不了,所以就想自己搭建环 ...

  2. windows下cocos2dx3.0开发环境及Android编译环境搭建

    cocos2dx更新到了3.x版本号,自己一直没有换,如今开发组要求统一换版本号,我就把搭建好开发环境的过程记录下来. 一.Windowns下开发环境搭建 1.  所需工具         1)coc ...

  3. Emscripten编译环境搭建--将C和C++编译成JS

    Emscripten编译环境搭建--将C和C++编译成JS 需求:linux环境下用js执行c.c++文件,使用emscirpten编译器 目标:搭建好Emscripten环境 环境:Ubuntu16 ...

  4. openwrt(一):openwrt源码下载及编译环境搭建

    声明:从网上各位大神的博客学习,整理后记录,非原创. 注:请用非root用户来下载源码 导航: 1. openwrt编译环境搭建 2. openwrt源码下载 3. feeds更新 1. openwr ...

  5. IoT设备程序开发及编译环境搭建初体验

    引言 Mirai事件一经曝出,立即引领了一轮研究IoT设备的热潮.目前,对Mirai的报告大多只是在对其功能实现上的介绍,却很少提及如何实现IoT设备程序开发的测试环境.本文在对Mirai的源码研究的 ...

  6. Tiny4412 开发板 编译环境搭建【转】

    本文转载自:http://blog.csdn.net/beijiwei/article/details/51055369 版权声明:本文为博主原创文章,未经博主允许不得转载. /*********** ...

  7. C语言编程入门之--第二章编译环境搭建

    第二章 编译环境搭建 导读:C语言程序如何工作,首先需要编译链接成可执行文件,然后就可以运行在不同的环境中,这个“环境”的意思就是比如说,电脑,手机,路由器,蓝牙音箱等等智能设备中,其中编译器启到了关 ...

  8. u-boot 移植(一)编译环境搭建

    u-boot 移植(一)编译环境搭建 soc:s3c2440 board:jz2440 uboot:u-boot-2016.11 toolchain:gcc-linaro-7.4.1-2019.02- ...

  9. imx6 yocto移植 环境搭建

    系统:ubuntu14.04 LTS 切换软件下载源,确保下载资源是最快. 安装必要软件工具: ~$ apt-get install vim ~$ apt-get install openssh-se ...

随机推荐

  1. vue-cli3 创建项目路由缺失问题

    1.在项目中新建一个router.js router.js import Vue from 'vue' import Router from 'vue-router' import Home from ...

  2. 【函数分享】每日PHP函数分享(2021-1-7)

    ltrim() 删除字符串开头的空白字符(或其他字符). string ltrim ( string $str[, string $character_mask]) 参数描述str 输入的字符串. c ...

  3. centos 安装 部署 gitlab github

    https://www.cnblogs.com/wenwei-blog/p/5861450.html 我这里使用的是centos 7 64bit,我试过centos 6也是可以的! 1. 安装依赖软件 ...

  4. Typora笔记上传到播客时图片不显示问题解决(已解决)

    前言: ​ 相信我们都遇到过,使用Typora做笔记是一件非常令人舒服的事,然而,它却有一个非常难受的地方,那就是我们在做完笔记想要将其上传到自己的博客时,复制粘贴的图片无法显示.因为Typora复制 ...

  5. Python——绘制埃菲尔铁塔

    from turtle import * import turtle colormode(255) #设置turtle颜色模式 speed(0) #速度 setup(800,800,720,0) #画 ...

  6. 你都用过SpringCloud的哪些组件,它们的原理是什么?

    前言 看到文章的题目了吗?就是这么抽象和笼统的一个问题,确实是我面试中真实被问到的,某共享货车平台的真实面试问题. SpringCloud确实是用过,但是那是三四年前了,那个时候SpringCloud ...

  7. 【七天搞定Python】day01.Python环境配置、pip、IDE、注释、变量,数据类型、标识符/关键字、输出、输入

    什么是Python? 动态解释型语言,1982年由荷兰人Guido von Rossum发明. 更多细节可以google,这里不做展开. Python解释器: CPython(官方版本C语言实现) I ...

  8. Eclipse中的可视化图形界面设计插件windowbuilder

    对于eclipse平台上的可视化开发工具插件,有windowbuilder.visual editor等,今天就对windowbuilder说明: WindowBuilder功能特性等介绍,参考如下网 ...

  9. web dynpro配置注意事项

    如果你想使用web dynpro 开发的应用,但是发现浏览器报错,那么你按照下面的步骤逐一进行检查吧.特别是返回的500错误,或者是你发现浏览器的地址栏中以http://<hostname> ...

  10. JDBC代码的优化

    JDBC代码简化以及PreparedStatement和Statement接口 抽取 JDBC的Bug sql语句可以拼接导致登录功能中如果用户名或者密码中出现'or'2'='2则一定可以登录的bug ...