1. 环境准备:从零开始的Ubuntu工作站
如果你之前主要玩单片机,现在想用STM32MP157这种能跑Linux的“大号单片机”来做带界面的产品,那第一步就是得有个趁手的开发环境。这就像你要做木工活,得先有个工作台和一套好用的工具。对于嵌入式Linux开发,这个“工作台”就是一台安装了Ubuntu的电脑或虚拟机。
我强烈建议你直接在电脑上安装Ubuntu系统,而不是用虚拟机。虽然虚拟机方便,但编译像Linux内核、QT这样的大型项目时,速度会慢不少,而且有时会遇到一些莫名其妙的权限和路径问题。我自己的主力开发机就是一台装了Ubuntu 20.04 LTS的台式机,实测下来编译速度比虚拟机快至少30%。如果你的电脑是Windows系统,可以试试Windows Subsystem for Linux (WSL2),它现在已经能很好地支持图形界面和USB设备了,是个不错的折中方案。
安装好Ubuntu后,第一件事不是急着下载代码,而是先把系统“喂饱”。我们需要安装一大堆编译所需的工具和库。打开终端,执行下面这条命令,它会更新软件源并安装必备的包:
sudo apt-get update
sudo apt-get install -y git build-essential cmake libncurses5-dev libssl-dev \
bison flex libelf-dev u-boot-tools device-tree-compiler gcc-aarch64-linux-gnu \
g++-aarch64-linux-gnu gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf \
lib32z1 lib32stdc++6 python3-distutils sshpass rsync
这条命令看起来有点长,我解释一下关键部分:build-essential 包含了GCC、Make等基础编译工具;gcc-arm-linux-gnueabihf 是我们后面会用到的ARM交叉编译器;u-boot-tools 和 device-tree-compiler 是编译U-Boot和设备树必需的。安装过程可能需要一点时间,泡杯茶等着就好。
接下来,我们需要获取STM32MP157的板级支持包(BSP)。这里以常见的“100ask_stm32mp157_pro”开发板为例。我们需要先配置一下Git用户信息,然后使用repo工具来同步代码,这是管理大型嵌入式Linux源码的常见方式。
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
git clone https://e.coding.net/weidongshan/DevelopmentEnvConf.git
cd DevelopmentEnvConf
sudo ./Configuring_ubuntu.sh
cd ..
git clone https://e.coding.net/codebug8/repo.git
mkdir -p 100ask_stm32mp157_pro-sdk && cd 100ask_stm32mp157_pro-sdk
../repo/repo init -u https://gitee.com/weidongshan/manifests.git -b linux-sdk -m stm32mp1/100ask_stm32mp157_pro_release-v2.0.xml --no-repo-verify
../repo/repo sync -j4
repo sync -j4 中的 -j4 表示用4个线程并行下载,你可以根据你的网络和CPU核心数调整这个数字。同步代码库是个漫长的过程,因为它包含了Linux内核、U-Boot、Buildroot根文件系统等所有源码,加起来有好几个G。我建议在晚上睡觉前开始同步,第二天早上就能用了。
2. 交叉编译工具链的设置与验证
代码下载好了,我们手里有一堆源代码,但你的电脑(通常是x86_64架构)无法直接编译出能在ARM架构的STM32MP157上运行的程序。这就需要“交叉编译工具链”——一套在你电脑上运行,但生成ARM指令集程序的编译器。你可以把它想象成一个翻译官,他住在A国(你的电脑),精通A国语言(x86指令),但他的工作是专门把A国语言写的稿子翻译成B国语言(ARM指令)给B国人(开发板)看。
我们下载的BSP包里已经包含了编译好的工具链,通常位于 <


1万+

被折叠的 条评论
为什么被折叠?



