你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32MP13DK】 在Linux主机上交叉编译一个Hello Word应用

[复制链接]
短笛君 发布时间:2024-2-3 18:58

Overview

==本篇文章展示了如何在Linux系统下使用交叉编译链来为STM32MP13编译应用==

宿主机使用环境为Ubuntu22.04

开发工具包版本为stm32mp1-openstlinux-23.06.21

项目中使用了gtk3.0实现,需要先安装依赖包

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libgtk-3-dev
sudo apt-get install --reinstall pkg-config
sudo /usr/share/pkg-config-dpkghook update

#验证
pkg-config --cflags gtk+-3.0

实现步骤

1.创建代码空间

首先使用mkdir命令创建存放代码的文件夹

创建一个名为gtk_hello_world_example的文件夹用来存放工程

mkdir /home/ddj/STM32MPU_workspace/project/gtk_hello_world_example

使用cd命令切换到文件目录下

cd /home/ddj/STM32MPU_workspace/project/gtk_hello_world_example

1706957226519.png

使用gedit文本编辑器创建gtk_hello_world.c

gedit gtk_hello_world.c

gtk_hello_world.c中填写以下代码 ctrl+S保存文件

#include <gtk/gtk.h>

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

static void
activate (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_FLAGS_NONE);
  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文件 使用make编译

gedit Makefile
PROG = gtk_hello_world
SRCS = gtk_hello_world.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))

保存

bash中使用make编译

make

如果出现以下报错

G_APPLICATION_DEFAULT_FLAGS’ was not declared in this scope

在github中的描述如下

Ubuntu 22.04 has GLib-2.0 version 2.72. G_APPLICATION_DEFAULT_FLAGS is a new flag since GLib-2.0 version 2.74. So, the system issued an error.

我们需要将代码中的G_APPLICATION_DEFAULT_FLAGS 替换为G_APPLICATION_FLAGS_NONE 

该报错为版本不兼容导致就版本中的定义在新版本中删除导致

重新make

make

1706957355052.png

此时在目录下有三个文件

我们将gtk_hello_world文件拷贝到MP135开发板上

在mp1开发板中首先挂在U盘到mnt分区

查看本地 已存在 U 盘状态,查看文件路径。首先切换到超级用户使用su命令

使用fdisk命令即可查看挂载的U盘

su  #切换用户
fdisk -l

为挂载 U 盘创建一个文件夹

sudo mkdir /dev/media

通过步骤 1 可查询到 u 盘的存放路径,输入下面命令即可实现 U 盘挂载功能

sudo mount /dev/sda1  /dev/media

/dev/sdb1 为 U 盘存放路径,/dev/media 为挂载文件夹

su.jpg

fdisk.jpg

使用cp命令将可执行文件放到home目录下

7a7c8f15ea7f3d954bfe3527e006e9b.jpg

cp /dev/media/gtk_hello_world  /home/weston
ls

执行

cd /home/weston/
 su -l weston -c "/home/weston/gtk_hello_world"   

连接终端 可以看到终端中输出的串口信息

还有窗口文件

1706957821075.png

https://www.bilibili.com/video/BV15v421i7cc/

1706957385816.png
收藏 评论1 发布时间:2024-2-3 18:58

举报

1个回答
STMCU-管管 回答时间:2024-2-4 10:20:30

期待有更好的内容更新

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版