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
使用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
此时在目录下有三个文件
我们将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
为挂载文件夹
使用cp命令将可执行文件放到home目录下
cp /dev/media/gtk_hello_world /home/weston
ls
执行
cd /home/weston/
su -l weston -c "/home/weston/gtk_hello_world"
连接终端 可以看到终端中输出的串口信息
还有窗口文件
https://www.bilibili.com/video/BV15v421i7cc/
期待有更好的内容更新