分享

《嵌入式Linux》课程学习平台知睿MP135-HMI开发板SDK

 新用户0118F7lQ 2023-12-18 发布于山东

初级丨中级丨专业级

嵌入式技术专业人才认证



嵌入式人才中级认证根据工程师职业发展方向分为嵌入式硬件、嵌入式裸机编程、嵌入式 RTOS 及嵌入式 Linux。由中国电子学会培训基地与知睿教育联合推出的《嵌入式Linux》课程是嵌入式人才中级课程的四个方向之一。

本文将详细介绍《嵌入式Linux》课程专属学习平台知睿MP135-HMI教学开发平台的软件开发工具包(SDK,Software Development Kit)



一、SDK:软件开发工具包
SDK(Software Development Kit)是一套软件开发工具包,旨在帮助开发者创建特定类型的应用程序、框架或平台。SDK通常由一组工具、库、示例代码、文档和其他支持材料组成,为开发者提供了在特定平台上进行软件开发的必要资源和工具。

《嵌入式Linux》课程专属学习平台知睿MP135-HMI教学开发板采用的 SDK 是  OpenSTLinux SDK,由意法半导体公司提供。

1 ST OpenSTLinux SDK 的组成
OpenSTLinux SDK 基于标准的 Yocto 项目 SDK,由以下部分组成:
  • 交叉开发工具链:此工具链包含编译器、链接器、调试器和各种杂项工具

  • 库、标头和符号(目标和本机 sysroot):库、标头和符号特定于映像(即,它们与映像匹配)

  • 环境设置脚本:此 *.sh 文件一旦运行,就会通过定义变量并准备 SDK 使用来设置交叉开发环境
2 交叉开发工具链
交叉开发工具链是一套用于在一种计算机体系结构(通常是一种处理器架构)上生成能在另一种计算机体系结构上运行的代码工具集合。在嵌入式系统的开发中,通常会使用交叉开发工具链来编译、链接和调试针对目标嵌入式设备的应用程序和驱动程序。
一个典型的交叉开发工具链通常包括以下组件:
  1. 交叉编译器:用于将源代码编译为目标体系结构上的可执行代码的编译器。由于目标体系结构与开发主机的体系结构不同,因此需要使用交叉编译器来生成针对目标体系结构的代码。

  2. 交叉链接器:用于将编译后的目标文件链接成可执行文件或库文件的链接器。交叉链接器能够理解目标体系结构的可执行文件格式,并将生成的代码转换为适合在目标设备上执行的格式。

  3. 调试器:用于在目标设备上调试应用程序和驱动程序的工具。交叉调试器能够与目标设备上的调试接口进行通信,允许开发者在目标设备上进行源代码级的调试。

  4. 标准库和头文件:针对目标体系结构的标准C库和头文件。这些库和头文件使开发者能够在目标设备上访问标准的C库函数和系统调用。
使用交叉编译工具链编译程序的优点有:
  • 跨平台开发:交叉编译工具链可以在一种架构上编译运行另一种架构的代码,这使得开发人员可以在自己的主机环境上进行开发,而无需直接在目标嵌入式系统上进行编译,从而提高了开发效率和便利性。

  • 性能优化:交叉编译工具链可以针对目标嵌入式系统的特定架构和处理器进行优化,生成更高效的机器码,从而提高程序的性能和响应速度。

  • 环境隔离:通过使用交叉编译工具链,开发人员可以在熟悉的开发环境中进行开发,而无需直接在目标嵌入式系统上进行编译。这种环境隔离可以降低开发过程中出现的不可预测因素,并且可以更好地管理开发环境。

  • 节约资源:由于交叉编译工具链是在主机机器上运行的,因此可以充分利用主机机器的计算资源,加快编译速度,节约开发时间。

  • 开发调试:使用交叉编译工具链可以将编译后的程序直接部署到目标嵌入式系统上进行调试和测试,从而简化了开发调试的流程。

总的来说,使用交叉编译工具链可以方便地进行跨平台开发,提高开发效率,并节约资源。它是在不同体系结构或操作系统之间开发和构建应用程序的重要工具。如果开发者想要在Ubuntu中编译出能够在开发板上运行的可执行文件,就需要使用交叉编译工具链来编译源程序。

3 SDK安装步骤

1. 主机配置

必须安装必要的 Ubuntu 软件包才能执行基本开发任务、基本交叉编译(通过开发人员包)或更复杂的交叉编译(如 OpenEmbedded,通过分发包执行),请在 Ubuntu 终端中依次运行以下命令:
sudo apt-get updatesudo apt-get install gawk wget git diffstat unzip texinfo gcc-multilib chrpath socat cpio python3 python3-pip python3-pexpectsudo apt-get install libssl-dev libgmp-dev libmpc-dev zstdsudo apt-get install build-essential libncurses-dev libyaml-dev libssl-devsudo apt-get install coreutils bsdmainutils sed curl bc lrzsz corkscrew cvs subversion mercurial nfs-common nfs-kernel-server libarchive-zip-perl dos2unix texi2html libxml2-utilsecho 'options mmc_block perdev_minors=16' > /tmp/mmc_block.confsudo mv /tmp/mmc_block.conf /etc/modprobe.d/mmc_block.conf
  • 第1-3行:安装OpenEmbedded/Yocto 所需的软件包。
  • 第4行:安装“开发人员包”用例所需的包。
  • 第5行:安装SDK相关的工具。
  • 第6-7:MMC配置。必须安装MMC配置才能支持每个 MMC 最多 16 个分区。默认情况下,在 Linux 系统上,MMC 上最多允许 8 个分区。所有软件包(入门软件包等)都需要 10 个以上的分区供存储设备使用。为了将每个设备的分区数扩展到 16,必须将6、7行两个选项添加到 modprobe。


2. 安装SDK

>>下载并解压SDK的安装文件
安装文件名为:en.SDK-x86_64-stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24.tar,大小约800M。
ST官网下载地址:https://www./en/embedded-software/stm32mp1dev.html#get-software
图片
下载好之后,在 Ubuntu 终端中依次执行如下操作:(如果已经有下载好的SDK安装文件,直接操作即可)
mkdir -p $HOME/STM32MPU_workspace/tmpcd $HOME/STM32MPU_workspace/tmptar xvf en.SDK-x86_64-stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24.tarcd stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sdk/
  • 第1行 :创建一个临时文件夹 tmp,用来存放 SDK 的压缩包。

  • 第2行:进入到临时文件夹 tmp 中。

  • 第3行:解压SDK的压缩包获取SDK安装脚本。

  • 第4行:进入到解压出来的文件夹中。
>>运行SDK安装脚本
在 Ubuntu 终端中依次执行以下命令,安装交叉编译工具链、图像文件、驱动程序以及相关工具。
mkdir -p $HOME/STM32MPU_workspace/STM32MP1-Ecosystem-v5.0.0/Developer-Package/SDKchmod +x st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh./st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-openstlinux-5.4-dunfell-mp1-20-06-24.sh -d $HOME/STM32MPU_workspace/STM32MP1-Ecosystem-v5.0.0/Developer-Package/SDK
  • 第1行:在主机上创建STM32MP1开发包SDK目录

  • 第2行:更改SDK安装脚本权限,使其可执行

  • 第3行:执行开发工具包安装脚本
安装成功后会输出以下目录:

图片


3. 启动SDK

SDK 安装完成之后,在 Ubuntu 终端中,输入以下命令运行 SDK,从而配置ARM开发环境。注意: 每次打开新终端,都需要重新配置ARM开发环境,即打开SDK。
cd $HOME/STM32MPU_workspace/STM32MP1-Ecosystem-v5.0.0/Developer-Packagesource SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

4. 检查SDK安装状态

SDK启动之后,可以通过以下四个命令检查 SDK 的状态是否正确:
  • 检查目标体系结构
echo $ARCH

正确结果:arm

  • 检查目标工具的工具链二进制前缀
echo $CROSS_COMPILE
正确结果:arm-ostl-linux-gnueabi-
  • 检查c编译器版本菜单
$CC --version
正确结果:
图片
  • 检查SDK版本是否为预期版本
echo $OECORE_SDK_VERSION
正确结果:

图片



二、安装minicom
minicom是一个用于串行通信的开源程序,通常用于在Linux系统上进行串口通信。它提供了一个简单的终端仿真程序,可以用于连接到其他设备,如嵌入式系统、路由器、交换机等,通过串口进行控制和数据传输。
我们在 Ubuntu 上运行 minicom,通过 USB 模拟串口与ARM开发板进行通信,此时 minicom 作为 ARM开发板上运行的嵌入式Linux系统的终端,可以对板上的嵌入式Linux进行shell命令交互以及其他的命令操作。
minicom的安装与配置过程
安装命令:
sudo apt-get install minicom
配置minicom:

1、使用 sudo minicom -s 命令打开minicom的配置页面;

2、选择 Serial port setup 选项;

图片
3、按下 A 键,将 Serial Device 的内容修改为 /dev/ttyUSB0;
图片
4、修改完成后按两下回车键,然后选择 Save setup as dfl,保存刚才修改的配置;
图片

5、保存好后选择 Exit from Minicom 退出配置界面,之后用 sudo minicom 打开 minicom 即可。



三、开发板与PC端接线
1 串口控制台
ARM-Linux开发板上的USB_TTL接口用做开发板的串口控制台,因 ARM-Linux 系统通常不带键盘和显示器,而是通过开发板上特定的 UART 作为控制台:开发板Linux系统通过UART发送系统打印信息,并接收 UART 传过来的命令。
与 PC 端连接后,PC端的VMware的虚拟机->可移动设备处会出现一个 QinHeng USB Serial 设备,点击连接即可。连接成功后会在 Ubuntu 的 /dev 目录下出现一个 ttyUSB0 设备。这个设备主要用于开发板与 minicom 进行连接通信和调试。USB_TTL 与 PC 端连接好后,将电源开关拨到 ON 即可启动开发板。
ARM-Linux 开发板将 UART 作为标准输入输出并与 PC 连接进行系统控制的过程如下图所示。

图片

2 USB虚拟网卡
ARM-Linux 开发板 USB_OTG 接口会在 ARM-Linux 开发板上产生一个 USB 虚拟网卡,可以用作与开发板与 PC 间进行文件传输等功能。
与 PC 端连接后,需要等开发板成功启动后才会在 VMWare 的虚拟机->可移动设备中出现一个 Linux Foundation STM32MP1 设备,点击连接即可。连接后开发板的 usb0 网卡的 ip 被设置成 192.168.7.1,PC端会出现一个与开发板在同一个网段的网卡:
在 minicom 虚拟控制台中,运行 ifconfig 命令, 可以获取开发板的 IP 地址信息:
图片
在 PC Ubuntu 终端中,运行 ifconfig 命令,可以获取 Ubuntu 的 IP 地址信息:
图片

此时可以看到,Ubuntu 与开发板处于同一个网段中,此时两个系统可以进行局域网网络通讯。下文介绍使用 scp 命令,利用局域网网络通讯,进行两个系统之间的文件传输。



四、运行板载程序
1、在 Ubuntu 中编写一个hello word程序first_arm.c。
C#include <stdio.h>
int main(void){ printf('Hello, this is my first ARM program\n'); return 0;}
2、在 Ubuntu 中打开终端,运行以下命令启动 SDK,配置 arm 的开发环境。
source $HOME/STM32MPU_workspace/STM32MP1-Ecosystem-v5.0.0/Developer-Package/SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

3、在 Ubuntu 中使用交叉编译器编译 first_arm.c,生成可执行文件first_arm。

$CC first_arm.c -o first_arm
4、通过网线连接网卡,在 Ubuntu 终端中执行如下命令,将可执行文件拷贝到ARM 开发板上。
scp first_arm root@192.168.7.1:/home/root/test
  • scp 命令:安全复制协议,这是一个用于在网络间传输文件的命令行工具,基于SSH协议进行加密传输,可以安全地在本地主机和远程主机之间复制文件和目录;

  • first_arm:需要拷贝的文件名;

  • root:开发板的用户名;

  • 192.168.7.1:开发板的ip地址,每台开发板可能不同,可以使用 ifconfig 查看;

  • /home/root/test:表示要将文件拷贝到 ARM开发板 的哪个路径下。
5、在 Ubuntu 通过 minicom 虚拟终端与 ARM开发板 的 USB-TTL 连接,并输入如下命令,在 ARM开发板 运行程序。
cd /home/root/test./first_arm
6、此时在 Ubuntu minicom 中,可以看到 ARM开发板 上所运行的 first_arm 程序的执行结果。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多