【深入浅出imx8企业级开发实战 | 01】imx8qxp yocto工程构建指南

本文详细介绍了如何在Linux环境下,针对IMX8QXP芯片使用Yocto进行企业级开发,包括repo安装、源码下载加速、编译过程、烧写SD卡、生成SDK以及遇到问题的解决方案,如配置编译选项、解决软件包冲突等。通过此文,读者能够掌握IMX8QXP开发的基础步骤。
摘要由CSDN通过智能技术生成

这是机器未来的第46篇文章

原文首发地址:https://blog.csdn.net/RobotFutures/article/details/126752099

image-20220908100355092

1. 概述

本文描述了IMX8QXP通过yocto编译烧写镜像和生成SDK的过程。本文参考《i.MX_Yocto_Project_User’s_Guide.pdf》文档,博主在实操过程中遇到了很多问题,例如repo国内无法下载的问题、repo同步慢的问题,生成SDK时包冲突的问题,等等。

环境准备:

  • 至少300G硬盘空间,yocto工程编译结果很大。
  • 网速越快越好
  • 编译时间至少一个晚上。

2. repo安装及源码下载加速

yocto项目通过repo来管理源码。

2.1. repo清华源加速

repo工具存放在google的服务器上,因为国内无法访问谷歌,因此需要配置国内镜像服务。

$ mkdir mkdir imx-yocto-bsp
$ cd imx-yocto-bsp
$ repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-honister -m imx-5.15.5-1.0.0.xml --repo-url=https://gerrit-googlesource.lug.ustc.edu.cn/git-repo 

2.2 配置gitee加速

yocto相关的库下载速度太慢,将相关的库先download到本地(gitee),然后再同步到gitee上供使用。

在repo init操作完毕后,会在imx-yocto-bsp目录下创建一个.repo文件夹,在.repo/manifests/imx-5.15.5-1.0.0.xml文件中存储着repo sync需要同步的所有git仓库,网速长期在10KB/s以下,完整加载完需要花费大约一整晚,将其配置到gitee仓库加速后,大概几分钟就加载完成了

得益于gitee直接拉取不好用,博主只能手动先下载到本地后再推送到博主的gitee仓库,目前仓库均开源。

仓库地址:https://gitee.com/RobotFutures/

完整的配置文件可以直接下载博主已经配置好的:【深入浅出imx8企业级开发实践 | 02】yocto项目repo源码gitee加速配置方法

不使用博主配置文件的可以自行修改fetch地址,将其仓库地址修改为博主的仓库地址即可,感兴趣的跳到末尾附录查看。

2.3 多线程加速同步库

# 多线程加速
$ repo sync  -j`nproc`

3.编译过程

3.1 配置编译选项

# 编译配置:
# 	- DISTRO
#	- MACHINE板卡型号
#	- imx-setup-release.sh编译脚本
# 	-b imx8qxpc0mek_wayland 输出编译后的结果
$ DISTRO=fsl-imx-wayland MACHINE=imx8qxpc0mek source imx-setup-release.sh -b imx8qxpc0mek_wayland

3.2 安装编译依赖工具包

# 编译依赖包安装
$ 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 python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \
pylint3 xterm rsync curl zstd pzstd lz4c lz4

如果提示提示没有安装zstd,则先更新源再同步

$ sudo apt update
$ sudo apt install zstd

3.3 编译

# 开始编译:镜像选择的不带QT支持GUI的镜像, 编译结果大约300G
$ bitbake imx-image-multimedia

编译完毕之后,生成的固件包在imx-yocto-bsp/imx8qxpc0mek_wayland/tmp/deploy/images/imx8qxpc0mek目录下,imx-image-multimedia-imx8qxpc0mek-20220814092234.rootfs.wic.bz2为sd卡烧写文件。

因为没有配置uboot启动方式,默认启动方式为sd卡

4. 烧写SD卡镜像

bzcat imx-image-multimedia-imx8qxpc0mek-20220814092234.rootfs.wic.bz2 | sudo dd of=/dev/sd<partition> bs=1M conv=fsync

具体是哪个设备,可以通过df -h命令查询新增设备

zhoushimin@zsm:linux-imx$ df -h
df: /run/user/1000/doc: Operation not permitted
Filesystem       Size  Used Avail Use% Mounted on
udev             7.8G     0  7.8G   0% /dev
tmpfs            1.6G  2.7M  1.6G   1% /run
/dev/nvme0n1p10   39G   31G  6.8G  83% /
/dev/nvme0n1p3    72G   63G  8.6G  89% /media/c
/dev/nvme0n1p7   269G  212G   57G  79% /media/d
/dev/sda2        321G  107G  197G  36% /media/zhoushimin/removable_disk
/dev/sda1        606G  502G  104G  83% /media/zhoushimin/iDisk

5. 生成SDK

编译sdk,建议不要生成多媒体等镜像的SDK,博主编译出来的脚本文件报错了,可能与脚本文件过大有关。

$ bitbake core-image-minimal -c populate_sdk

执行完毕之后,生成的sdk包在imx-yocto-bsp/imx8qxpc0mek_wayland/tmp/deploy/core-image-minimal/sdk目录下

6. 其它开发操作

6.1 重启电脑或退出终端后bitbake提示找不到

如果退出终端或重启电脑,则需要重新配置bitbake运行环境。

source setup-environment imx8qxpc0mek_wayland/

6.2 配置uboot启动方式

uboot启动方式在imx-yocto-bsp/imx8qxpc0mek_wayland/conf/local.conf中修改,字段为UBOOT_CONFIG

$ echo "UBOOT_CONFIG = \"emmc\"" >> conf/local.conf

注意!!!!每次执行编译都会将local.conf文件就会被清空成默认的,记得重新更改启动介质设置

DISTRO=fsl-imx-wayland MACHINE=imx8qxpc0mek source imx-setup-release.sh -b imx8qxpc0mek_wayland

重新编译u-boot

$ MACHINE=imx8qxpc0mek bitbake -c deploy u-boot-imx

6.3 如果编译失败需要清除重新编译

local.conf配置文件修改后,需求重新编译才能生效。

bitbake -c clean -v imx-image-multimedia
bitbake -c cleansstate -v imx-image-multimedia

如果不行,直接将目标文件夹完整删掉。

rm -rf imx8qxpc0mek_wayland

6.4 单独编译/清除某个bb模块

  • 单独编译某一个bb模块
bitbake  -b pulseaudio_10.0 -c clean 
bitbake -b pulseaudio_10.0 -c build

参考链接:https://blog.csdn.net/fcf1990501/article/details/102757987

  • 单独清除某个bb模块

如果在编译过程中出错,可以清除单个recipe,而无需清除整个工程

bitbake nativesdk-wget -c cleansstate 

例如输出如下:

ERROR: Task (virtual:nativesdk:/media/zhoushimin/removable_disk/imx-yocto-bsp/sources/poky/meta/recipes-devtools/perl/perl_5.34.0.bb:do_install) failed with exit code '1'
ERROR: nativesdk-wget-1.21.1-r0 do_configure: autoreconf execution failed.
ERROR: nativesdk-wget-1.21.1-r0 do_configure: ExecutionError('/media/zhoushimin/removable_disk/imx-yocto-bsp/imx8qxpc0mek_wayland/tmp/work/x86_64-nativesdk-pokysdk-linux/nativesdk-wget/1.21.1-r0/temp/run.do_configure.2284384', 1, None, None)
ERROR: Logfile of failure stored in: /media/zhoushimin/removable_disk/imx-yocto-bsp/imx8qxpc0mek_wayland/tmp/work/x86_64-nativesdk-pokysdk-linux/nativesdk-wget/1.21.1-r0/temp/log.do_configure.2284384
bitbake nativesdk-wget -c cleansstate 

6.5 删除镜像中的软件包

博主在生成SDK的时候遇到一个wifi网卡固件冲突的问题,因为博主没有用到wifi模块,因此用PACKAGE_EXCLUDE将wifi模块排除。

在imx-yocto-bsp/build/conf/local.conf中添加

PACKAGE_EXCLUDE = "package_name package_name package_name ..."
PACKAGE_EXCLUDE = "firmware-nxp-wifi"

来删除指定软件。

配置文件要生效需要删除整个编译目录,重新编译生成。

rm -rf imx8qxpc0mek_wayland/

6.6 多个软件包冲突的另外一个解决方式

多个recipe包含同一个软件包,则可以指定PREFERRED_PROVIDER来指定安装包

输入指令查看冲突recipe

bitbake -g imx-image-multimedia

输出:

zhoushimin@zsm:imx8qxpc0mek_wayland$ bitbake -g imx-image-multimedia
/home/zhoushimin/tools/anaconda3/lib/python3.7/site-packages/html5lib/_trie/_base.py:3: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
  from collections import Mapping
/home/zhoushimin/tools/anaconda3/lib/python3.7/importlib/_bootstrap.py:219: ImportWarning: can't resolve package from __spec__ or __package__, falling back on __name__ and __path__
  return f(*args, **kwds)
Loading cache: 100% |#####################################################################################################################################| Time: 0:00:02
Loaded 5091 entries from dependency cache.
Parsing recipes: 100% |###################################################################################################################################| Time: 0:00:01
Parsing of 3386 .bb files complete (3385 cached, 1 parsed). 5092 targets, 538 skipped, 6 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
NOTE: Multiple providers are available for runtime linux-firmware-bcm4359-pcie (firmware-nxp-wifi, linux-firmware)
Consider defining a PREFERRED_RPROVIDER entry to match linux-firmware-bcm4359-pcie
NOTE: PN build list saved to 'pn-buildlist'
NOTE: Task dependencies saved to 'task-depends.dot'

在imx-yocto-bsp/build/conf/local.conf中添加

PREFERRED_PROVIDER_linux-firmware-bcm4359-pcie = "linux-firmware"

PREFERRED_PROVIDERS = "xxx:yyy aaa:bbb ..."
                    
This form is a convenient replacement for the following:
     PREFERRED_PROVIDER_xxx = "yyy"
     PREFERRED_PROVIDER_aaa = "bbb"

6.7 查询内核源码目录

bitbake -e linux-imx  | grep ^S=

任何源码包都可以通过这个命令找到,在独立编译时查找源码很方便。

7. 总结

按照博主的流程操作基本上就可以完整的生成多媒体镜像固件,可以在评估板上测试板载的各种功能,以及生成开发环境SDK。

正式开发时将采用独立编译的方式,yocto还是太重了,下一篇博主将描述独立安装的方式。

写在末尾:

  • 博客简介:专注AIoT领域,追逐未来时代的脉搏,记录路途中的技术成长!
  • 专栏简介:imx8qxp小白从拿到板子到完成项目的过程记录
  • 面向人群:嵌入式工程师
  • 专栏计划:接下来会逐步发布跨入人工智能的系列博文,敬请期待

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器未来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值