Phytec中国的wiki
support@phytec.cn
热线:0755-61802110-803
本文适用于 am335x,i.MX6,i.MX6ul,RK3288这些soc的核心板。
本文基于核心板的BSP Manual来写成,请点击左边核心板名称来查看该文档。 虚拟机 不推荐在虚拟机上安装/编译BSP,如果必须要在虚拟机上使用,请务必满足表格的配置要求,并且在编译时,尽量减少宿主机器这边的负载,或者说在编译时尽量不使用宿主机器。 我们推荐的编译系统为ubuntu 16.04 Desktop amd64位版本,对编译系统的最低机器要求如下: ubuntu系统的安装没有特殊要求,在安装完后,需要额外为系统安装一些软件来满足BSP的编译需求。 我们的编译环境使用的是yocto,因此编译环境的要求也是按照yocto的要求:yocto文档(老版本), yocto文档,我们这里将需要安装的软件总结如下: 2.1 2.2 2.3 2.4 2.5 2.6 如果需要打开menuconfig界面,需要额外安装搭建编译环境
项目 要求 内存 4G或更大 硬盘 100G或更大 CPU 4线程或更多 网络 正常网络,没有限制端口 yocto版本 安装的软件 $ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat libsdl1.2-dev xterm g++-multilib
$ 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
$ sudo apt-get install libncurses-dev
也可以在我们BSP的releasenotes中查找,如 http://ftp.phytec.cn/AM335x/BSP-Yocto-AM335x-PD17.2.2/ReleaseNotes。
我们有两种BSP的下载方法 因此一般推荐使用离线编译包。 我们的下载地址为http://ftp.phytec.cn,你可以在这里找到以cpu名称命名的文件夹,在文件夹中,你可以看到各个版本的BSP,我们BSP版本的命名规则为: BSP-Yocto-CPU名称-PD发布年份-大版本号-小版本号下载/编译离线BSP
BSP下载方法 优点 缺点 离线编译包 可直接编译镜像,默认镜像不需要额外的下载 source中某些layer的git无法使用,一般这个没有什么影响。 phyLinux脚本 可以方便的下载各个版本的BSP 国内网络原因,这个方法需要下载很多包,很慢,且容易出错。
而哪个版本对应的是哪个内核,还是在 BSP版本、设备树、config文件对照表 / BSP version, device tree, config file cross reference table 这里可以查到。 在选择了想要编译的BSP版本后,可以下载对应的BSP包,这个包一般在3GB左右,命名为: BSP-Yocto-CPU名称-PD版本号.src.mirror.tar.xz 推荐直接在ubuntu系统中用wget或其他下载工具如uget等下载。 请注意在所有以下操作都不要在root用户下操作,请使用普通用户来执行这些指令。 下载完成后将解压到一个目录中,推荐放在当前用户的home(~)下的文件夹中
xxx@debian8:~/bsp/BSP-Yocto-AM335x-PD16.2.0$ tree -L 2 . ├── build <-- 编译目录 │ └── conf <-- BSP的个人配置文件在这里 ├── HOWTO ├── sources <-- 所有的yocto layer在这里 │ ├── meta-openembedded <-- openembedded目录,包含很多软件 │ ├── meta-phytec <-- 我司硬件适配layer │ ├── meta-qt5 │ ├── meta-yogurt <-- 我司的参考镜像配置 │ └── poky <-- yocto核心代码 ├── src_mirror <-- 所有要编译的源码压缩包位置 │ ├── acl-2.2.52.src.tar.gz │ ├── acl-2.2.52.src.tar.gz.done ..............................此处省略 └── tools ├── init └── templateconf 12 directories, 532 files
然后初始化环境变量,请在BSP解压缩后的文件夹中执行该指令,执行后目录会自动切换到build文件夹下:
xxx@debian8:~/bsp/temp/BSP-Yocto-AM335x-PD16.2.0$ source sources/poky/oe-init-build-env ### Shell environment set up for builds. ### You can now run 'bitbake <target>' ██████╗ ██╗ ██╗██╗ ██╗████████╗███████╗ ██████╗ ██╔══██╗██║ ██║╚██╗ ██╔╝╚══██╔══╝██╔════╝██╔════╝ ██████╔╝███████║ ╚████╔╝ ██║ █████╗ ██║ ██╔═══╝ ██╔══██║ ╚██╔╝ ██║ ██╔══╝ ██║ ██║ ██║ ██║ ██║ ██║ ███████╗╚██████╗ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚═════╝ Welcome to the PHYTEC BSP-Yocto buildsystem. Before building for the first time, you should take a look in the main configuration file 'conf/local.conf'. There you can tweak the build system settings and license configuration. For example you may have to accept the Freescale/NXP GPU and VPU licence for an i.MX6 board. Tested build targets for the yocto bsp are: bitbake phytec-headless-image bitbake phytec-qt5demo-image xxx@debian8:~/bsp/temp/BSP-Yocto-AM335x-PD16.2.0/build$
然后编辑 conf/local.conf 文件的第一行的 MACHINE 变量,它的值可以通过查看下载网站中这个压缩包位置的machines.txt来查看,如AM335x是
http://ftp.phytec.cn/AM335x/BSP-Yocto-AM335x-PD17.2.2/machines.txt
Supported HW ============ 在local.conf中填写的机器名 产品的订货号 配置 machines article numbers description ======== =============== =========== phyboard-regor-am335x-1 PB-01802-001.A2 PHYTEC phyBOARD-REGOR AM335x 512MiB RAM, 512MiB NAND, 8MiB SPI flash phyboard-wega-am335x-1 PB-00802-0101C, PB-00802-0200C PHYTEC phyBOARD-WEGA AM335x 256MiB RAM, 128MiB NAND flash, PEB-AV-01
比如AM335x的RDK开发板配的核心板是:
MACHINE ?= "phycore-am335x-1" DISTRO ?= "yogurt" ......
对于i.MX6平台需要在conf/local.conf文件中要取消原来的license注释(因为这些bin文件是nxp的私有程序,因此如果使用它们意味着同意nxp的相关协议。)
# License Handling # - Uncomment for i.MX6 proprietary GPU libraries LICENSE_FLAGS_WHITELIST += "license-nxp_v14-june-2016_imx-gpu-viv" (前面的#号去掉) # - Uncomment for Freescale i.MX6 legacy VPU firmware blobs LICENSE_FLAGS_WHITELIST += "license-freescale_v6-february-2015_firmware-imx" (前面的#号去掉)
接下来就可以开始编译了,一般我们有两种image可以选 下面就可以开始编译: 编译过程根据机器的不同而不同,一般是需要12小时左右,编译完成后可以在build/deploy/机器名/下看到编译的结果:image名称 简介 phytec-headless-image
”无头“不带图形界面(一般是QT)的镜像 phytec-qt5demo-image
带图形界面且有一个QT demo的镜像 bitbake phytec-headless-image
build/deploy/images/机器名/ 下的文件名 | 描述 |
---|---|
barebox.bin | bootloader |
zImage | 内核 |
zImage-[....].dtb | 设备树 |
phytec-[...]-image-[machine name].ubifs | ubifs格式的文件系统 |
phytec-[...]-image-[machine name].sdcard | SD卡镜像 |
phytec-[...]-image-[machine name].tar.gz | 文件系统压缩包 |
zImage.config | 内核config文件 |
barebox.config | bootloader config文件 |
注意以上文件很多是符号链接,你可以用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 | sudo apt-get install g++-multilib |
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 |
其他错误 |
|
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工具
复位BSP编译环境
1,使用bitbake命令清理
bitbake world -c cleanall -k
清理所有recipe中的编译产物,恢复到初次编译时的状态。
2,直接删除文件夹
在编译环境的build目录中,有以下几个目录
目录名 | 用途 | 复位时删除 |
---|---|---|
buildhistory | 是 | |
cache | 是 | |
conf | BSP的本地配置文件 | 保留 |
deploy | 编译生成的结果,镜像/sdk等 | 是 |
downloads | 部分编译需要的源码包/git clone | 推荐保留 |
sstate-cache | 编译的缓存,同样的内容只编译一次,可大幅度的加快编译 | 推荐保留 |
tmp | 编译的中间结果,如源代码,obj,等等 | 是 |
如果编译出现奇怪的错误,请把上面备注可删除的文件夹删除,然后再重新编译,由于已经编译了一遍,第二次会快很多。
去掉联网限制
如果你需要对BSP做修改,或者增加额外的软件包,你就需要让BSP联网。修改 conf/site.conf 去掉 BB_NO_NETWORK.。该选项的存在会导致在BSP需要联网下载软件包时失败。
OURCE_MIRROR_URL = "file://${TOPDIR}/../src_mirror" INHERIT += "own-mirrors" BB_GENERATE_MIRROR_TARBALLS = "1" SCONF_VERSION = "1" BB_NO_NETWORK = "1" <-- 去掉这一行
但有可能由于网络的限制,导致从外网下载失败,此时请使用VPN等工具来解决。