1.1.3.2.2 Create a simple hello-world application

The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Applicable for STM32MP13x lines

STM32MP135x-DK.png
Develop on Arm® Cortex®-A7 What's next
Step category in.png Install the SDK Step.png Create a simple hello-world application Step.png Modify, rebuild and reload the Linux® kernel Step category out.png


Overview[edit source]

This stage explains how to create, build and execute a simple C code application using the freshly installed SDK.

Code[edit source]

  • Create a directory that will host your source codes
 mkdir $HOME/STM32MPU_workspace/STM32MP1-Ecosystem-v5.0.0/Developer-Package/stm32mp1-openstlinux-23.06.21
 mkdir $HOME/STM32MPU_workspace/STM32MP1-Ecosystem-v5.0.0/Developer-Package/stm32mp1-openstlinux-23.06.21/sources
  • Create a directory for your user space example
 mkdir $HOME/STM32MPU_workspace/STM32MP1-Ecosystem-v5.0.0/Developer-Package/stm32mp1-openstlinux-23.06.21/sources/gtk_hello_world_example
 cd $HOME/STM32MPU_workspace/STM32MP1-Ecosystem-v5.0.0/Developer-Package/stm32mp1-openstlinux-23.06.21/sources/gtk_hello_world_example

  • Create the source code file for your user space example: gtk_hello_world.c
#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_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;
}

Build[edit source]

  • Create the makefile for your user space example: Makefile
Info white.png Information
All the indentations in a makefile are tabulations
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))
  • Cross-compile the project
 make

Deploy and execute[edit source]

  • Push this binary onto the board (Ethernet connection needed)
 scp gtk_hello_world root@<board ip address>:/usr/local
  • Execute your user space example by using the user "weston"
 cd /usr/local/
 su -l weston -c "/usr/local/gtk_hello_world"                                                                                                                                              
  • A GTK window is displayed
GTK Hello world window
  • Click the "Hello world" button to close the window. Hello world is displayed on the console:
Hello world



Back button.png Overview button.png Next button.png