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.安装编译所需要的一些包
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编译环境搭建的更多相关文章
- ubuntu12.04下安卓编译环境搭建总结
前言: 因为工作需要,经常要编译安卓下的动态库,公司有已经搭建好环境的服务器,但是第一自己想自己搭建一下了解一个整个过程,另外,公司的服务器也经常出现问 题,导致编译不了,所以就想自己搭建环 ...
- windows下cocos2dx3.0开发环境及Android编译环境搭建
cocos2dx更新到了3.x版本号,自己一直没有换,如今开发组要求统一换版本号,我就把搭建好开发环境的过程记录下来. 一.Windowns下开发环境搭建 1. 所需工具 1)coc ...
- Emscripten编译环境搭建--将C和C++编译成JS
Emscripten编译环境搭建--将C和C++编译成JS 需求:linux环境下用js执行c.c++文件,使用emscirpten编译器 目标:搭建好Emscripten环境 环境:Ubuntu16 ...
- openwrt(一):openwrt源码下载及编译环境搭建
声明:从网上各位大神的博客学习,整理后记录,非原创. 注:请用非root用户来下载源码 导航: 1. openwrt编译环境搭建 2. openwrt源码下载 3. feeds更新 1. openwr ...
- IoT设备程序开发及编译环境搭建初体验
引言 Mirai事件一经曝出,立即引领了一轮研究IoT设备的热潮.目前,对Mirai的报告大多只是在对其功能实现上的介绍,却很少提及如何实现IoT设备程序开发的测试环境.本文在对Mirai的源码研究的 ...
- Tiny4412 开发板 编译环境搭建【转】
本文转载自:http://blog.csdn.net/beijiwei/article/details/51055369 版权声明:本文为博主原创文章,未经博主允许不得转载. /*********** ...
- C语言编程入门之--第二章编译环境搭建
第二章 编译环境搭建 导读:C语言程序如何工作,首先需要编译链接成可执行文件,然后就可以运行在不同的环境中,这个“环境”的意思就是比如说,电脑,手机,路由器,蓝牙音箱等等智能设备中,其中编译器启到了关 ...
- u-boot 移植(一)编译环境搭建
u-boot 移植(一)编译环境搭建 soc:s3c2440 board:jz2440 uboot:u-boot-2016.11 toolchain:gcc-linaro-7.4.1-2019.02- ...
- imx6 yocto移植 环境搭建
系统:ubuntu14.04 LTS 切换软件下载源,确保下载资源是最快. 安装必要软件工具: ~$ apt-get install vim ~$ apt-get install openssh-se ...
随机推荐
- github下载大文件太慢/失败
场景 github下载大文件,使用浏览器下载zip包到本地在下载到1G时失败, 使用 git clone ssh下载速度20k/s以下,已fq. 解决方法(亲测) 1.下载Github Desktop ...
- 测试如何区分前后端bug
当我们测试到前后端分离的项目时,可能就会想这个bug我到底应该指给谁,是前端的问题还是后端的呢,为了让自己更专业,分清前后端问题还是很重要的. 1.如图商品详情中显示[件装:1,中包装:2 ]但是在后 ...
- linux下安装docker容器
1.安装环境 此处在Centos7进行安装,可以使用以下命令查看CentOS版本 lsb_release -a 在 CentOS 7安装docker要求系统为64位.系统内核版本为 3.10 以上,可 ...
- 简单TCP服务器和TCP客户端源码(Golang)
以下代码为服务端,非最终版代码,服务端可以接受多个客户端的请求,且所有消息会显示在服务端上,服务端无法发送消息: package main import ( "fmt" " ...
- Server 2012 R2 Standard 安装运行PCS7时出现“无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll”解决方法
网上看到了这篇文章https://www.jianshu.com/p/21f4bb8b5502,根据思路自己尝试,解决了丢失的问题.提示[计算机中丢失api-ms-win-crt-runtime-l1 ...
- LeetCode145 二叉树的后序遍历
给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? /** * Defin ...
- LeetCode200 岛屿的个数
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 1: 输入: ...
- Java API 操作HBase Shell
HBase Shell API 操作 创建工程 本实验的环境实在ubuntu18.04下完成,首先在改虚拟机中安装开发工具eclipse. 然后创建Java项目名字叫hbase-test 配置运行环境 ...
- Lambda表达式你会用吗?
函数式编程 在正式学习Lambda之前,我们先来了解一下什么是函数式编程 我们先看看什么是函数.函数是一种最基本的任务,一个大型程序就是一个顶层函数调用若干底层函数,这些被调用的函数又可以调用其他函数 ...
- AmoebaNet:经费在燃烧,谷歌提出基于aging evolution的神经网络搜索 | AAAI 2019
论文提出aging evolution,一个锦标赛选择的变种来优化进化算法,在NASNet搜索空间上,对比强化学习和随机搜索,该算法足够简洁,而且能够更快地搜索到更高质量的模型,论文搜索出的Amoeb ...