yuyy1989 发表于 2025-9-8 12:44

【STM32MP257学习笔记】2.搭建嵌入式Linux程序开发环境并实现一个HelloWorld

开发需要Linux环境,在上一篇帖子里已经在虚拟机中安装了Ubuntu24.04
先安装必要的工具包,在linux终端中执行下面的命令
sudo apt-get update
sudo apt-get install gawk wget git git-lfs diffstat unzip texinfo gcc-multilibchrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libsdl1.2-dev pylint xterm bsdmainutils libusb-1.0-0
sudo apt-get install libssl-dev libgmp-dev libmpc-dev lz4 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下载SDK,地址https://www.st.com.cn/zh/embedded-software/stm32mp2dev.html,这里有适用于不同架构类型的SDK,根据自己的开发环境选择,注意需要保持SDK版本和烧录的Starter Package版本一致

解压后打开SDK文件夹,这里有个.sh的文件

执行下面的命令开始安装SDK,可以将-d后面的路径替换为你想安装SDK的位置,必须是绝对路径
./st-image-weston-openstlinux-weston-stm32mp2.rootfs-x86_64-toolchain-5.0.8-openstlinux-6.6-yocto-scarthgap-mpu-v25.06.11.sh -d /home/yuyy/Workspace/STM32/STM32MP257/SDK当显示这个表示安装成功

打开SDK目录,执行命令
source environment-setup-cortexa35-ostl-linux这条命令每次打开终端都要执行一次才能让开发环境生效

正确执行后在终端内依次执行下面的命令可以看到如图的结果
echo $ARCH
echo $CROSS_COMPILE
$CC --version
echo $OECORE_SDK_VERSION
如果你和我一样使用VSCode进行开发,为了避免每次打开终端都要手动输入建立开发环境的命令,可以按照下面的方法操作
用VSCode打开工程文件夹,按快捷键Ctrl+Shift+P,找到工作区设置

添加下面的代码后保存
{
    "terminal.integrated.profiles.linux": {
      "BashSTM32A35ENV": {
      "path": "bash",
      "args": [
            "--init-file",
            "/home/yuyy/Workspace/STM32/STM32MP257/SDK/environment-setup-cortexa35-ostl-linux"
      ]
      }
    },
    "terminal.integrated.defaultProfile.linux": "BashSTM32A35ENV"
}现在在VSCode中打开这个文件夹后打开终端会自动执行建立开发环境的命令
接下来写个简单地Hello World程序,新建helloworld.c,输入以下代码
#include <stdio.h>

int main(int argc,char **argv)
{
    printf("STM32MP257 Hello World");
    if(argc == 2)
    {
      printf(" %s",argv);
    }
    printf("\n");
    return 0;
}在VSCode中打开终端,执行下面的命令
$CC -o helloworld helloworld.c将生成的helloworld文件上传到开发板,可以用NFS文件共享或SCP命令,我这里用FileZilla通过SFTP上传

如果不方便连接网线,板子上USB右侧的Type-C接口会虚拟成为一个USB网卡,连接电脑后在串口终端里执行下面的命令来查看IP地址
ip addr show usb0
刚上传上去的文件是不可执行的

用下面的命令增加可执行权限
chmod u+x helloworld再次查看

这时就能执行命令了

接下来给HelloWorld做个窗口UI,将代码改为(这段代码来自https://wiki.stmicroelectronics.cn/stm32mpu/wiki/Getting_started/STM32MP2_boards/STM32MP257x-DK/Develop_on_Arm_Cortex-A35/Create_a_simple_hello-world_application)
#include <gtk/gtk.h>

static void print_hello(GtkWidget *widget,gpointer data)
{
g_print ("Hello World\n");
}

static voidactivate (GtkApplication *app,gpointer user_data)
{
GtkWidget *window;
GtkWidget *button;
GtkWidget *button_box;

window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "Window");
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);

button_box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
gtk_container_add (GTK_CONTAINER (window), button_box);

button = gtk_button_new_with_label ("Hello World");
g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_destroy), window);
gtk_container_add (GTK_CONTAINER (button_box), button);

gtk_widget_show_all (window);
}

int main (int argc, char **argv)
{
GtkApplication *app;
int status;

app = gtk_application_new ("org.gtk.example", G_APPLICATION_DEFAULT_FLAGS);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);

return status;
}新建makefile,添加下面的代码后保存
PROG = helloworld
SRCS = helloworld.c

CLEANFILES = $(PROG)

# Add / change option in CFLAGS and LDFLAGS
CFLAGS += -Wall $(shell pkg-config --cflags gtk+-3.0)
LDFLAGS += $(shell pkg-config --libs gtk+-3.0)

all: $(PROG)

$(PROG): $(SRCS)
    $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)

clean:
    rm -f $(CLEANFILES) $(patsubst %.c,%.o, $(SRCS))
在VSCode中打开终端,执行make
将生成的helloworld文件上传到开发板并执行,屏幕上会打开这样一个窗口

点击Hello World按钮后窗口关闭,同时串口终端中有输出




地瓜patch 发表于 2025-10-14 16:46

双核CPU,建议先跑个分,看看性能,跑分还是比较直观的

星辰大海不退缩 发表于 2025-10-14 22:03

Linux程序开发环境UBANTU首选
页: [1]
查看完整版本: 【STM32MP257学习笔记】2.搭建嵌入式Linux程序开发环境并实现一个HelloWorld