初级丨中级丨专业级
嵌入式技术专业人才认证
嵌入式人才中级认证根据工程师职业发展方向分为嵌入式硬件、嵌入式裸机编程、嵌入式 RTOS 及嵌入式 Linux。由中国电子学会培训基地与知睿教育联合推出的《嵌入式Linux》课程是嵌入式人才中级课程的四个方向之一。
本文将详细介绍《嵌入式Linux》课程专属学习平台知睿MP135-HMI教学开发平台的软件开发工具包(SDK,Software Development Kit)。
《嵌入式Linux》课程专属学习平台知睿MP135-HMI教学开发板采用的 SDK 是 OpenSTLinux SDK,由意法半导体公司提供。
交叉开发工具链:此工具链包含编译器、链接器、调试器和各种杂项工具
库、标头和符号(目标和本机 sysroot):库、标头和符号特定于映像(即,它们与映像匹配)
交叉编译器:用于将源代码编译为目标体系结构上的可执行代码的编译器。由于目标体系结构与开发主机的体系结构不同,因此需要使用交叉编译器来生成针对目标体系结构的代码。
交叉链接器:用于将编译后的目标文件链接成可执行文件或库文件的链接器。交叉链接器能够理解目标体系结构的可执行文件格式,并将生成的代码转换为适合在目标设备上执行的格式。
调试器:用于在目标设备上调试应用程序和驱动程序的工具。交叉调试器能够与目标设备上的调试接口进行通信,允许开发者在目标设备上进行源代码级的调试。
跨平台开发:交叉编译工具链可以在一种架构上编译运行另一种架构的代码,这使得开发人员可以在自己的主机环境上进行开发,而无需直接在目标嵌入式系统上进行编译,从而提高了开发效率和便利性。
性能优化:交叉编译工具链可以针对目标嵌入式系统的特定架构和处理器进行优化,生成更高效的机器码,从而提高程序的性能和响应速度。
环境隔离:通过使用交叉编译工具链,开发人员可以在熟悉的开发环境中进行开发,而无需直接在目标嵌入式系统上进行编译。这种环境隔离可以降低开发过程中出现的不可预测因素,并且可以更好地管理开发环境。
节约资源:由于交叉编译工具链是在主机机器上运行的,因此可以充分利用主机机器的计算资源,加快编译速度,节约开发时间。
开发调试:使用交叉编译工具链可以将编译后的程序直接部署到目标嵌入式系统上进行调试和测试,从而简化了开发调试的流程。
总的来说,使用交叉编译工具链可以方便地进行跨平台开发,提高开发效率,并节约资源。它是在不同体系结构或操作系统之间开发和构建应用程序的重要工具。如果开发者想要在Ubuntu中编译出能够在开发板上运行的可执行文件,就需要使用交叉编译工具链来编译源程序。
sudo apt-get update
sudo apt-get install gawk wget git diffstat unzip texinfo gcc-multilib chrpath socat cpio python3 python3-pip python3-pexpect
sudo apt-get install libssl-dev libgmp-dev libmpc-dev zstd
sudo apt-get install build-essential libncurses-dev libyaml-dev libssl-dev
sudo apt-get install coreutils bsdmainutils sed curl bc lrzsz corkscrew cvs subversion mercurial nfs-common nfs-kernel-server libarchive-zip-perl dos2unix texi2html libxml2-utils
echo 'options mmc_block perdev_minors=16' > /tmp/mmc_block.conf
sudo mv /tmp/mmc_block.conf /etc/modprobe.d/mmc_block.conf
第6-7:MMC配置。必须安装MMC配置才能支持每个 MMC 最多 16 个分区。默认情况下,在 Linux 系统上,MMC 上最多允许 8 个分区。所有软件包(入门软件包等)都需要 10 个以上的分区供存储设备使用。为了将每个设备的分区数扩展到 16,必须将6、7行两个选项添加到 modprobe。
mkdir -p $HOME/STM32MPU_workspace/tmp
cd $HOME/STM32MPU_workspace/tmp
tar xvf en.SDK-x86_64-stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24.tar
cd stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sdk/
第1行 :创建一个临时文件夹 tmp,用来存放 SDK 的压缩包。
第2行:进入到临时文件夹 tmp 中。
第3行:解压SDK的压缩包获取SDK安装脚本。
mkdir -p $HOME/STM32MPU_workspace/STM32MP1-Ecosystem-v5.0.0/Developer-Package/SDK
chmod +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安装脚本权限,使其可执行
cd $HOME/STM32MPU_workspace/STM32MP1-Ecosystem-v5.0.0/Developer-Package
source SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
echo $ARCH
正确结果:arm
echo $CROSS_COMPILE
$CC --version
echo $OECORE_SDK_VERSION
sudo apt-get install minicom
1、使用 sudo minicom -s 命令打开minicom的配置页面;
2、选择 Serial port setup 选项;
5、保存好后选择 Exit from Minicom 退出配置界面,之后用 sudo minicom 打开 minicom 即可。
此时可以看到,Ubuntu 与开发板处于同一个网段中,此时两个系统可以进行局域网网络通讯。下文介绍使用 scp 命令,利用局域网网络通讯,进行两个系统之间的文件传输。
C
#include <stdio.h>
int main(void)
{
printf('Hello, this is my first ARM program\n');
return 0;
}
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
scp first_arm root@192.168.7.1:/home/root/test
scp 命令:安全复制协议,这是一个用于在网络间传输文件的命令行工具,基于SSH协议进行加密传输,可以安全地在本地主机和远程主机之间复制文件和目录;
first_arm:需要拷贝的文件名;
root:开发板的用户名;
192.168.7.1:开发板的ip地址,每台开发板可能不同,可以使用 ifconfig 查看;
cd /home/root/test
./first_arm
联系客服