系统环境选择为考虑到编译环境的备份,方便移植等因素。我使用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++添加