IMX8QM开发yocto环境搭建(L4.14.98-2.0.0_ga)

2023-11-27 22:30

本文主要是介绍IMX8QM开发yocto环境搭建(L4.14.98-2.0.0_ga),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系统环境选择为考虑到编译环境的备份,方便移植等因素。我使用VirtualBox虚拟机的方式搭建ubuntu开发环境。
ubuntu版本:ubuntu-14.04.5-desktop-amd64.iso
下载地址: http://old-releases.ubuntu.com/releases/14.04.5/
硬盘预留空间推荐300G,因为IMX8QM的XWayland QT版本的yocto工程就在200G左右。

安装必须的软件包,终端输入如下指令:
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev

$ sudo apt-get install libsdl1.2-dev xterm sed cvs subversion coreutils texi2html docbook-utils python-pysqlite2 help2man make gcc g++ desktop-file-utils libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake groff curl lzop asciidoc

$ sudo apt-get install u-boot-tools

注释*其中有个别软件会提示ubuntu的源中,软件版本或者安装名称已经更换了。可以根据终端的提示安装。包口后面yocto在编译的时候,我印象中会有两个提示需要安装python的软件(具体记不清了)也同样可以根据报错的提示,进行apt-get install的安装可以解决。

设置repo下载功能:
这里如果按照i.MX_Yocto_Project_User’s_Guide文档中:
在这里插入图片描述

这样的话,是repo下载是使用Google源。在国内下载肯定会有问题。除非你有很牛的翻墙工具。

我推荐的方式是使用自己repo,将Google源改成清华源。
在这里插入图片描述

注释*我使用的repo会在附件中提供。

https://download.csdn.net/download/gxl798354000/10505161

设置git,执行如下命令:
$ git config --global user.name “Your Name”
$ git config --global user.email “Your Email”
$ git config --list
举例:
$ git config --global user.name gxlfie
$ git config --global user.email 798354000@qq.com
$ git config --list如下:
在这里插入图片描述

repo同步获取yocto工程:
创建工作目录:
mkdir ~/imx8qm/imx-4.14.98-2.0.0_ga/
进入:
cd ~/imx8qm/imx-4.14.98-2.0.0_ga/

将自己的 repo 拷贝到当前目录
cp XX(目录自己确定)/repo ~/imx8qm/imx-4.14.98-2.0.0_ga/

同步:
$ ./repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-sumo -m imx-4.14.98-2.0.0_ga.xml
$ ./repo sync

注释*如果有需要可以将imx-4.14.98-2.0.0_ga/文件夹备份成压缩包,大概300MB。(要用tar zxvf指令压缩,右键压缩会丢失文件)

编译yocto工程。
设置脚本环境,执行命令格式如下:
$ DISTRO= MACHINE= source fsl-setup-release.sh -b

   DISTRO有如下四种设置:

在这里插入图片描述

   fsl-imx-x11fsl-imx-waylandfsl-imx-xwaylandfsl-imx-fb我选择 fsl-imx-xwayland ,X11不在IMX8上支持,同时请注意nxp不再支持DirectFB。MACHINE同样有多种配置:

在这里插入图片描述
在这里插入图片描述

因为我们使用的芯片是imx8qm 板级原理设计参照NXP官方的MEK板,所以选择imx8qmmek

因此我执行的最终命令如下:
$ DISTRO=fsl-imx-xwayland MACHINE=imx8qmmek source fsl-setup-release.sh -b build-xwayland-imx8qmmek-xen
注释* " -b build-xwayland-imx8qmmek-xen" 是配置编译目录名称。

U-Boot配置

默认如果不修改,是SD的启动方式。这里我是没有修改,选择SD的。
如果想要修改启动方式可以参照下表:
在这里插入图片描述

Xen配置支持:
在这里插入图片描述

编译的linux系统如果想要Xen的支持,需要添加此项配置。
输入指令: $ echo “DISTRO_FEATURES_append = " xen”" >> conf/local.conf
或或者gedit直接打开 ~/imx8qm/imx-4.14.98-2.0.0_ga/build-xwayland-imx8qmmek-xen/con/local.conf 在最后一行添加"DISTRO_FEATURES_append = " xen" "。如图:
在这里插入图片描述

执行编译:
这里我选择的是rootfs比较全的带有QT5的版本。执行指令:
$ bitbake fsl-image-qt5-validation-imx

需要其他精简版本可以参考下表,列出当前版本yocto支持的各个rootfs级别。当然选择的rootfs更多,需要下载编译的任务也会更多,时间会久一些,消耗的硬盘内存也会更多。IMX8QM的QT5版本需要200G

在这里插入图片描述

注释*如果编译过程中无意关掉了终端,那么重新打开终端进入imx-4.14.98-2.0.0_ga目录后只需要执行以下命令就可以重新进入编译环境:
$ source setup-environment build-xwayland-imx8qmmek-xen
再次执行编译,即可继续编译:
$ bitbake fsl-image-qt5-validation-imx

编译成功后会在~/imx8qm/imx-4.14.98-2.0.0_ga/build-xwayland-imx8qmmek-xen/tmp/deploy/images/imx8qmmek/目录下生产所有需要用到的镜像包括:boot dtb Image rootfs。

镜像用法
boot烧录 boot-XX-.bin 需要dd到SD卡中。IMX8偏移是32
参考指令:
$ sudo dd if= imx-boot-imx8qmmek-sd.bin of=/dev/sdc seek=32 bs=1k && sync

Image,DTB和XEN直接拷贝到fat区即可。
在这里插入图片描述

rootfs 拷贝到SD卡的ext4分区中。
参考指令:
$ tar -jxvf fsl-image-qt5-validation-imx-imx8qmmek.tar.bz2
$ sudo cp -a * /home/user/
注释* SD卡ext4分区的挂载点
在这里插入图片描述

便捷烧录方式
直接使用DD 指令将 fsl-image-qt5-validation-imx-imx8qmmek.sdcard烧录到SD卡中(会自动分区并且将上述所有需要烧录的内容一并写入SD卡中,唯一缺点不能识别SD快坏,如果使用的SD卡存在坏块可能导致ext4分区无法挂载,需要重新格式化)参考指令:
$ sudo dd if=fsl-image-qt5-validation-imx-imx8qmmek.sdcard of=/dev/sdc bs=1M && sync

详细烧录启动方法请参考烧录手册。

代码的位置

Linux的kernel的源代码在:
~/imx8qm/imx-4.14.98-2.0.0_ga/build-xwayland-imx8qmmek-xen/tmp/work/imx8qmmek-poky-linux/linux-imx/4.14.98-r0/git
git是一个链接文件,实际的源代码在:
~/imx8qm/imx-4.14.98-2.0.0_ga/build-xwayland-imx8qmmek-xen/tmp/work-shared/imx8qmmek/kernel-source

u-boot的源代码的位置在
~/imx8qm/imx-4.14.98-2.0.0_ga/build-xwayland-imx8qmmek-xen/tmp/work/imx8qmmek-poky-linux/u-boot-imx/2018.03-r0

如何单独编译kernel和u-boot:
我们修改了kernel或者u-boot的源代码,直接运行bitbake fsl-image-qt5是不会编译我们修改的源代码的。所以就需要我们单独编译源代码。
重新打开终端需要再次运行环境变量
$ cd ~/imx8qm/imx-4.14.98-2.0.0_ga //进入工程目录
$ source setup-environment build-xwayland-imx8qmmek-xen //加载编译环境

配置menuconfig
$ bitbake -c menuconfig -v linux-imx

单独编译kernel
$ bitbake -c compile -f -v linux-imx
$ bitbake linux-imx -c compile_kernelmodules -f -v
$ bitbake -c deploy -f -v linux-imx
$ bitbake fsl-image-validation-imx

执行上面的命令将重新编译内核、设备树、模块。并且重新生成rootfs 。
实际上我们修改了内核,实际上往往不需要更新rootfs的,而我们 执行bitbake fsl-image-validation-imx时会重新生成rootfs,这个操作会耗费很长的时间。
所以我们也可以只执行
$ bitbake -c compile -f -v linux-imx
$ bitbake linux-imx -c compile_kernelmodules -f -v
$ bitbake -c deploy -f -v linux-imx

执行上面个三个命令编译出来的zImage和设备树在
~/imx8qm/imx-4.14.98-2.0.0_ga/build-xwayland-imx8qmmek-xen/tmp/deploy/images/imx8qmmek

单独编译u-boot
$bitbake -c compile -f -v u-boot-imx
$bitbake -c deploy -f -v u-boot-imx
$bitbake fsl-image-validation-imx
同样单独编译完u-boot,执行bitbake fsl-image-validation-imx时会重新生成rootfs,会耗费很长的时间。
所以我们也可以只执行
$bitbake -c compile -f -v u-boot-imx
$bitbake -c deploy -f -v u-boot-imx
然后把u-boot拷出来

SCFW编译:
需要准备SCFW编译源码 : imx-scfw-porting-kit-1.2.tar.gz
M4单片机核交叉编译器:gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux(GNU Arm Embedded Toolchain).tar.bz2
两部分可以在NXP文档中提供的链接网址去下载,我所使用的也会在附件中提供。
备SCFW编译源码 :https://download.csdn.net/download/gxl798354000/12840263

安装并配置M4核交叉编译器:
解压安装gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux(GNU Arm Embedded Toolchain)
$ mkdir ~/imx8qm/M4
$ cd ~/imx8qm/M4
$ tar -zxvf gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux(GNU Arm Embedded Toolchain).tar.bz2
配置交叉编译工具
$ export TOOLS=/home/ss/imx8qm/M4

解压SFCW源码指令如下:
$ tar zxvf imx-scfw-porting-kit-1.2.tar.gz
$ chmod 777 packages/imx-scfw-porting-kit-1.2.bin
$ ./packages/imx-scfw-porting-kit-1.2.bin
imx-scfw-porting-kit-1.2/src/ scfw_export_mx8qm_b0.tar.gz 是IMX8qm b0版本的SCFW的源码可以拷贝到其他目录使用.
imx-scfw-porting-kit-1.2/doc目录下是SCFW对应的文档。

SCFW imx8qm版本编译:
指令如下:
$ cd scfw_export_mx8qm_b0/ //进入源码工程目录
$ export TOOLS=/home/ss/imx8qm/M4 //M4 gcc导入环境变量
$ make qm R=B0 //编译
make命令行上指定几个选项:
在这里插入图片描述

生产的bin固件在 scfw_export_mx8qm_b0/build_mx8qm_b0/scfw_tcm.bin

imx-mkimage打包固件

如何使用自己生成的scfw_tcm.bin boot 和M4单片机程序打包生成flash.bin

注释* fiash.bin 就是前文提到的imx-boot-imx8qmmek-sd.bin,需要通过imx-mkimage工具打包后才能让imx8执行,imx8烧录的boot其实与imx6的boot内容上有很多差别。组成部分如下。
在这里插入图片描述

imx-mkimage工具可以在NXP文档链接中下载,我使用的可以在附件中提供(我使用的已经把必要内容放到固定目录了)。
imx-mkimage下载地址:https://download.csdn.net/download/gxl798354000/12840269

解压并进入工程目录略:
在这里插入图片描述

添加打包的boot 单片机bin 和SWFC固件需要放入IMX8QM文件夹内
在这里插入图片描述

imx-mkimage执行打包执行指令如下:
make SOC=iMX8QM flash
IMX8QM目录下生成 flash.bin, 可用于DD指令烧录到SD卡中启动。
Make详细配置可以参考:
在这里插入图片描述

编译qt5的交叉编译工具链:
指令如下:
$ cd ~/imx8qm/imx-4.14.98-2.0.0_ga //进入工程目录
$ source setup-environment build-xwayland-imx8qmmek-xen //加载编译环境
$ bitbake meta-toolchain-qt5 // 生成带有qt5的交叉编译工具链
编译完成后会在~/imx8qm/imx-4.14.98-2.0.0_ga/build-xwayland-imx8qmmek-xen/tmp/deploy/sdk目录下生成文件fsl-imx-xwayland-glibc-x86_64-meta-toolchain-qt5-aarch64-toolchain-4.14-sumo.sh。执行如下命令安装qt5的交叉编译工具链:
$ cd ~/imx8qm/imx-4.14.98-2.0.0_ga/build-xwayland-imx8qmmek-xen/tmp/deploy/sdk
$ ./ fsl-imx-xwayland-glibc-x86_64-meta-toolchain-qt5-aarch64-toolchain-4.14-sumo.sh
一般选择默认设置,最终将在/opt/fsl-imx-xwayland/4.14-sumo目录下生成我们所需要的工具链。

如果编译普通linux程序 source environment-setup-aarch64-poky-linux 即可加载交叉编译器需要用的环境,$(CC) 便可以使用交叉编译器编译。详细请参考environment-setup-aarch64-poky-linux脚本原文:
在这里插入图片描述

需要编译QT5程序,可根据自己需求安装qt-creator,并在creator中配置qmake跟gcc即可。
QT Create 构建和运行配置如下:
qmake添加:
在这里插入图片描述

GCC 和G++添加

在这里插入图片描述

在这里插入图片描述

这篇关于IMX8QM开发yocto环境搭建(L4.14.98-2.0.0_ga)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/428569

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife