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

[复制链接]
404|0
yuyy1989 发表于 2025-9-8 12:44 | 显示全部楼层 |阅读模式
开发需要Linux环境,在上一篇帖子里已经在虚拟机中安装了Ubuntu24.04
先安装必要的工具包,在linux终端中执行下面的命令
  1. sudo apt-get update
  2. sudo apt-get install gawk wget git git-lfs diffstat unzip texinfo gcc-multilib  chrpath 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
  3. sudo apt-get install libssl-dev libgmp-dev libmpc-dev lz4 zstd
  4. sudo apt-get install build-essential libncurses-dev libyaml-dev libssl-dev
  5. 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版本一致
屏幕截图 2025-09-07 200212.png
解压后打开SDK文件夹,这里有个.sh的文件
屏幕截图 2025-09-07 215450.png
执行下面的命令开始安装SDK,可以将-d后面的路径替换为你想安装SDK的位置,必须是绝对路径
  1. ./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
当显示这个表示安装成功
屏幕截图 2025-09-07 220300.png
打开SDK目录,执行命令
  1. source environment-setup-cortexa35-ostl-linux
这条命令每次打开终端都要执行一次才能让开发环境生效

正确执行后在终端内依次执行下面的命令可以看到如图的结果
  1. echo $ARCH
  2. echo $CROSS_COMPILE
  3. $CC --version
  4. echo $OECORE_SDK_VERSION
屏幕截图 2025-09-07 221535.png
如果你和我一样使用VSCode进行开发,为了避免每次打开终端都要手动输入建立开发环境的命令,可以按照下面的方法操作
用VSCode打开工程文件夹,按快捷键Ctrl+Shift+P,找到工作区设置
屏幕截图 2025-09-07 222331.png
添加下面的代码后保存
  1. {
  2.     "terminal.integrated.profiles.linux": {
  3.         "BashSTM32A35ENV": {
  4.         "path": "bash",
  5.         "args": [
  6.             "--init-file",
  7.             "/home/yuyy/Workspace/STM32/STM32MP257/SDK/environment-setup-cortexa35-ostl-linux"
  8.         ]
  9.         }
  10.     },
  11.     "terminal.integrated.defaultProfile.linux": "BashSTM32A35ENV"
  12. }
现在在VSCode中打开这个文件夹后打开终端会自动执行建立开发环境的命令
接下来写个简单地Hello World程序,新建helloworld.c,输入以下代码
  1. #include <stdio.h>

  2. int main(int argc,char **argv)
  3. {
  4.     printf("STM32MP257 Hello World");
  5.     if(argc == 2)
  6.     {
  7.         printf(" %s",argv[1]);
  8.     }
  9.     printf("\n");
  10.     return 0;
  11. }
在VSCode中打开终端,执行下面的命令
  1. $CC -o helloworld helloworld.c
将生成的helloworld文件上传到开发板,可以用NFS文件共享或SCP命令,我这里用FileZilla通过SFTP上传
屏幕截图 2025-09-07 233836.png
如果不方便连接网线,板子上USB右侧的Type-C接口会虚拟成为一个USB网卡,连接电脑后在串口终端里执行下面的命令来查看IP地址
  1. ip addr show usb0
屏幕截图 2025-09-08 092404.png
刚上传上去的文件是不可执行的
屏幕截图 2025-09-07 233908.png
用下面的命令增加可执行权限
  1. chmod u+x helloworld
再次查看
屏幕截图 2025-09-07 233945.png
这时就能执行命令了
屏幕截图 2025-09-07 234015.png
接下来给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)
  1. #include <gtk/gtk.h>

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

  6. static void  activate (GtkApplication *app,gpointer user_data)
  7. {
  8.   GtkWidget *window;
  9.   GtkWidget *button;
  10.   GtkWidget *button_box;

  11.   window = gtk_application_window_new (app);
  12.   gtk_window_set_title (GTK_WINDOW (window), "Window");
  13.   gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);

  14.   button_box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
  15.   gtk_container_add (GTK_CONTAINER (window), button_box);

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

  20.   gtk_widget_show_all (window);
  21. }

  22. int main (int argc, char **argv)
  23. {
  24.   GtkApplication *app;
  25.   int status;

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

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

  3. CLEANFILES = $(PROG)

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

  7. all: $(PROG)

  8. $(PROG): $(SRCS)
  9.     $(CC) -o $[url=/u/]@[/url] $^ $(CFLAGS) $(LDFLAGS)

  10. clean:
  11.     rm -f $(CLEANFILES) $(patsubst %.c,%.o, $(SRCS))
在VSCode中打开终端,执行make
将生成的helloworld文件上传到开发板并执行,屏幕上会打开这样一个窗口
Screenshot 2025-09-08 09-49-12.png
点击Hello World按钮后窗口关闭,同时串口终端中有输出
屏幕截图 2025-09-08 095002.png



您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:同飞软件研发工程师
简介:制冷系统单片机软件开发,使用PID控制温度

168

主题

826

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部