【米尔 NXP i.MX93 开发板评测】应用软件的开发
# 【米尔 NXP i.MX93 开发板评测】应用软件的开发## 软件介绍
MYD-LMX9X 搭载基于Linux 6.1.55 版本内核的操作系统,提供了丰富的系统资源和其他软件资源。开发板出厂附带嵌入式Linux 系统开发所需要的交叉编译工具链,ATF源代码,U-boot 源代码,Linux 内核和各驱动模块的源代码,以及适用于Windows 桌面环境和Linux 桌面环境的各种开发调试工具,应用开发样例等。
MYD-LMX9X 系列开发平台上,使用Yocto 部署开发环境、构建系统、Linux 应用程序集成、镜像的更新等
> 嵌入式Linux 系统软件有许多开源的构建框架,目前比较常见的有Buildroot, Yocto,Busybox 等等。其中Yocto 使用强大的资源整合手段和高定制化的架构,可以很方便的构建出适合嵌入式产品的Linux 系统。同时Yocto 不仅是一个制作文件系统工具,同时提供整套的基于Linux 的开发和维护工作流程,使底层嵌入式开发者和上层应用开发者在统一的框架下开发。
### 搭建开发环境
安装 Ubuntu20.04 64bit 版本 Linux系统
安装SSH
配置samba
配置git
安装 SDK 必要工具
```shell
powershell
myir@server:~$ sudo apt-get update
myir@server:~$ sudo apt-get -f -y install git build-essential \
diffstat texinfo gawk chrpath socat doxygen dos2unix python3 bison \
flex libssl-dev u-boot-tools mono-devel mono-complete curl lrzsz lzop \
python3-distutils pseudo python3-sphinx g++-multilib bc python3-pip \
libc6-dev-i386 jq git-lfs pigz zstd liblz4-tool cpio file autoconf automake \
xinetd tftpd nfs-kernel-server minicom libncurses5-dev dos2unix screen \
zstd lz4 python3-pyelftools python3-setuptools swig
myir@server:~$ sudo pip3 install jsonschema pyelftools
```
安装交叉编译工具链
使用 TF 卡和 Win32DiskImager 软件烧录系统镜像
板级支持包的单独编译和更新
更新Bootloader和Kernel
### 搭建 Yocto 环境
> Yocto 是一个开源的“umbrella”项目,意指它下面有很多个子项目,Yocto 只是把所有的项目整合在一起,同时提供一个参考构建项目Poky,来指导开发人员如何应用这些项目,构建出嵌入式Linux 系统。它包含Bitbake、OpenEmbedded-Core, 板级支持包,各种软件包的配置文件。
MYD-LMX9X 提供了符合Yocto 的配置文件,帮助开发者构建出可烧写在MYD-LMX9X 板上的Linux 系统镜像。Yocto 还提供了丰富的开发文档资源,让开发者学习并定制自己的系统。
### 设备树的创建
设备树是一种数据结构,它通过特有的语法格式描述片上片外的设备信息。如将部分设备信息结构存放到device tree 文件中。uboot 或内核最终将其device tree 编译成 dtb 文件,使用过程中通过解析该dtb 来获取板级设备信息。uboot 的dtb 和 kernel 中的 dtb 是一致的。
### 应用开发
Linux 应用的移植通常分为两个阶段,开发调试阶段和生产部署阶段。开发调试阶段我们可以使用米尔构建好的SDK 对我们编写好的应用进行交叉编译然后远程拷贝到目标主机进行测试。生产部署阶段需要为应用编写配方文件,并使用Bitbake 构建生产镜像。
#### 基于Makefile 的应用
#### 基于Qt 的应用
Qt 是一个跨平台的图形应用开发框架,被应用在不同尺寸设备和平台上,同时提供不同版权版本供用户选择。MYD-LMX9X 使用Qt 6.5 版本进行应用开发。在Qt 应用开发中,推荐使用QtCreator 集成开发环境,可以在Linux PC 下开发Qt 应用,自动化地交叉编译为开发板的ARM 架构程序。
### 参考资料
(https://www.kernel.org/)
(https://www.yoctoproject.org/docs/3.1.1/bsp-guide/bsp-guide.html)
(https://www.yoctoproject.org/docs/3.1.1/kernel-dev/kernel-dev.html)
(https://www.yoctoproject.org/)
## QT 图形应用开发
使用Yocto 构建的SDK 工具作为交叉编译系统,配合QtCreator 快速开发图形类应用程序。
### 环境配置
开发环境为 Ubuntu 20.04 64bit 版本 Linux 系统,从 (https://download.qt.io/archive/online_installers/4.5/) 下载 `qt-unified-linux-x64-4.5.2-online.run` 安装包。
安装QTcreator 之前需要对主机的环境进行配置,请安装下列资源包
```powershell
sudo apt-get update
sudo apt install --reinstall libxcb-xinerama0
sudo apt install cmake build-essential libgl1-mesa-dev libglu1-mesa-dev freegl
ut3-dev cmake
```
将安装包放到 Ubuntu 中运行
```
sudo chmod 777 qt-unified-linux-x64-4.5.2-online.run
./qt-unified-linux-x64-4.5.2-online.run --mirror https://mirrors.tuna.tsinghua.edu.
cn/qt
```
勾选配置
### 配置交叉编译环境
1 打开QTCreator,从终端执行 `qtcreator.sh` 启动 QtCreator
如运行失败则需要安装插件
2 运行成功,出现选项对话框 - 点击Edit - 点击 Preferences - 在 Kits 栏选择
Compilers 标签。
3 点击右侧 Add - 下拉列表 - 选择 GCC->C++,填写Name为LMX9XG++,Compiler path 选择 `aarch64-poky-linux-g++` 的路径。
4 选择 Debuggers 标签,点击 Add,在name 处输入 93-gdb,选择路径
为 `/opt/fsl-imx-xwayland/6.1-mickledore/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-pok
y-linux/aarch64-poky-linux-gdb`,填写完成后 Apply。
5 选择 Qt Version 标签,点击Add,弹出qmake 路径选择对话框,这里 `/opt/fsl-imx-xwayland/6.1-mickledore/sysroots/x86_64-pokysdk-linux/usr/bin/qmake` 选择 qmake 文件后,点击 Open - Version name 改为 `Qt %{Qt:Version}(LM93-sytem)`,点击应用。
6 选择左侧 Device,点击 Add,Name 为 `MYIR-LM93-Board`,Host name 为开发板的 IP 地址,Username为root,点击应用。
7 点击左侧 Build & Run 回到 Kits 标签下,Name 设置为 `LM93-dev-kit`,Device 选
择 `MYD-LM93-Board` 选项。Sysroot 选择目标设备的系统目录。Compiler 选择
之前配置的名称 93-GCC,Qt version 选择之前配置的名称 Qt6.5.0 (LM93-System),
Qtmkspec 填写为 linux-oe-g++,其他默认。
8 将MXAPP-Qt6.tar.gz 拷贝到Ubuntu 下的一个工作目录中并解压出源代码。配置为相应的编译工具套件,就可以编译此例程。File - Open File or Project,mxcpp 例程目录下,选择 mxcpp.pro 文件,Open。Projects 图标,右侧界面切换为 manage kits 管理界面,Build & Run 标签下,选择 LM93 选项的kit,项目使用 LM93的相关配置 kit 构建应用,右键选择 mxapp2 并 Build。
QtCreator 构建 mxapp 项目后,编译好的二进制文件存放在指定的目录下。然后将 mxapp 文件拷贝到开发板下运行即可
### 参考资料
[桌面版Ubuntu](https://ubuntu.com/download/desktop)
(https://www.qt.io/)
页:
[1]