Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Multiexcerpt
MultiExcerptNamesetting__up_enviroment

搭建编译环境

Note
title虚拟机

不推荐在虚拟机上安装/编译BSP,如果必须要在虚拟机上使用,请务必满足表格的配置要求,并且在编译时,尽量减少宿主机器这边的负载,或者说在编译时尽量不使用宿主机器。

我们推荐的编译系统为ubuntu 16.04 Desktop amd64位版本,对编译系统的最低机器要求如下:

项目要求
内存4G或更大
硬盘100G或更大
CPU4线程或更多
网络正常网络,没有限制端口

ubuntu系统的安装没有特殊要求,在安装完后,需要额外为系统安装一些软件来满足BSP的编译需求。

我们的编译环境使用的是yocto,因此编译环境的要求也是按照yocto的要求:yocto文档(老版本)yocto文档,我们这里将需要安装的软件总结如下:

yocto版本安装的软件

2.1

2.2


Code Block
languagebash
themeMidnight
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat libsdl1.2-dev xterm g++-multilib


2.3

2.4

2.5

2.6


Code Block
languagebash
themeMidnight
$ 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 g++-multilib


如果需要打开menuconfig界面,需要额外安装

Code Block
languagebash
themeMidnight
$ sudo apt-get install libncurses-dev


...

Multiexcerpt
MultiExcerptNamedownload_build_bsp_p1

下载/编译离线BSP

我们有两种BSP的下载方法

BSP下载方法优点缺点
离线编译包可直接编译镜像,默认镜像不需要额外的下载source中某些layer的git无法使用,一般这个没有什么影响。
phyLinux脚本可以方便的下载各个版本的BSP国内网络原因,这个方法需要下载很多包,很慢,且容易出错。

因此一般推荐使用离线编译包。

我们的下载地址为http://ftp.phytec.cn,你可以在这里找到以cpu名称命名的文件夹,在文件夹中,你可以看到各个版本的BSP,我们BSP版本的命名规则为:

BSP-Yocto-CPU名称-PD发布年份-大版本号-小版本号

...

Multiexcerpt
MultiExcerptNamedownload_build_bsp_p3

接下来就可以开始编译了,一般我们有两种image可以选

image名称简介
phytec-headless-image
”无头“不带图形界面(一般是QT)的镜像
phytec-qt5demo-image
带图形界面且有一个QT demo的镜像

下面就可以开始编译:

Code Block
languagebash
themeMidnight
bitbake phytec-headless-image

编译过程根据机器的不同而不同,一般是需要12小时左右,编译完成后可以在build/deploy/机器名/下看到编译的结果:

...

Multiexcerpt
MultiExcerptNameimage_names


build/deploy/images/机器名/ 下的文件名描述
barebox.binbootloader
zImage内核
zImage-[....].dtb设备树
phytec-[...]-image-[machine name].ubifsubifs格式的文件系统
phytec-[...]-image-[machine name].sdcardSD卡镜像
phytec-[...]-image-[machine name].tar.gz文件系统压缩包
zImage.config内核config文件
barebox.configbootloader config文件



Multiexcerpt
MultiExcerptNamedownload_build_bsp_p4

注意以上文件很多是符号链接,你可以用ls指令来查看真正的文件是哪一个,当然一般不需要这样做。

编译有可能会报各种错误总结如下:

问题解决方法
ERROR: xxxxx do_fetch: Network access disabled through BB_NO_NETWORK修改build/conf/site.conf,去掉BB_NO_NETWORK
binutil/cross-arm/qtwebkit 在链接/编译时报错,log文件可能会提示file trunked由于这几个软件比较大,编译时(尤其链接时)需要很多内存,如内存不够就会出错。
提示imx6-vpu没有人提供(nothing provide)按照本文之前的方法修改conf/local.conf文件
/usr/include/c++/5/string:38:28: fatal error: bits/c++config.h: No such file or directory
ERROR: glibc-locale-2.27-r0 do_package: QA Issue: glibc-locale: Files/directories were installed but not shipped in any package

检查 local.conf文件,请使用下面的方法增加qt widgets支持

为QT增加widget支持 / Add widget support for QT
其他错误
  • 再次运行编译指令
  • 按照下面描述的方法复位编译环境



Multiexcerpt
MultiExcerptNamerest_doc

Yocto 参考文档

在yocto中主要是使用bitbake,请参考以下文档

https://elinux.org/Bitbake_Cheat_Sheet

https://www.yoctoproject.org/docs/1.6/bitbake-user-manual/bitbake-user-manual.html

https://community.nxp.com/docs/DOC-94953

离线BSP包存在的问题

BSP包中有些.git文件夹中的内容是损坏的,因此不能使用git来管理,这样造成了一些麻烦。

可以先记下git的版本号,然后重新从 git.phytec.de 上clone,然后再checkout到对应的版本。

具体的git版本号可以从 https://git.phytec.de/phy2octo/ 来查找对应的BSP版本来查看。

phyLinux编译方法

使用phylinux这个脚本来安装BSP,这个方法需要从很多国外的服务器下载源代码。

但由于repo工具被限制的原因,需要对phylinux这个脚本做一些修改,请按照下面的教程来修改。

phylinux 使用指南 / phylinux guide

其中某些开发板可能会用到repo工具

repo工具使用方案 / repo guide

复位BSP编译环境

在编译环境的build目录中,有以下几个目录

目录名用途复位时删除
buildhistory
cache
confBSP的本地配置文件保留
deploy编译生成的结果,镜像/sdk等
downloads部分编译需要的源码包/git clone推荐保留
sstate-cache编译的缓存,同样的内容只编译一次,可大幅度的加快编译推荐保留
tmp编译的中间结果,如源代码,obj,等等

如果编译出现奇怪的错误,请把上面备注可删除的文件夹删除,然后再重新编译,由于已经编译了一遍,第二次会块很多。如果编译出现奇怪的错误,请把上面备注可删除的文件夹删除,然后再重新编译,由于已经编译了一遍,第二次会快很多。

去掉联网限制

如果你需要对BSP做修改,或者增加额外的软件包,你就需要让BSP联网。修改 conf/site.conf 去掉 BB_NO_NETWORK.。该选项的存在会导致在BSP需要联网下载软件包时失败。

Code Block
languagebash
themeMidnight
OURCE_MIRROR_URL = "file://${TOPDIR}/../src_mirror"
INHERIT += "own-mirrors"
BB_GENERATE_MIRROR_TARBALLS = "1"
SCONF_VERSION = "1"
BB_NO_NETWORK = "1"				<-- 去掉这一行

但有可能由于网络的限制,导致从外网下载失败,此时请使用VPN等工具来解决。

...