1、安装sdk
为了执行基本的开发任务或基本的交叉编译,应安装一些额外的Ubuntu软件包:
sudo apt-get update
sudo apt-get install sed wget curl cvs subversion git-core coreutils unzip texi2html texinfo docbook-utils gawk python-pysqlite2 diffstat help2man make gcc build-essential g++ desktop-file-utils chrpath libxml2-utils xmlto docbook bsdmainutils iputils-ping cpio python-wand python-pycryptopp python-crypto
sudo apt-get install libsdl1.2-dev xterm corkscrew nfs-common nfs-kernel-server device-tree-compiler mercurial u-boot-tools libarchive-zip-perl
sudo apt-get install ncurses-dev bc linux-headers-generic gcc-multilib libncurses5-dev libncursesw5-dev lrzsz dos2unix lib32ncurses5 repo libssl-dev
sudo apt-get install default-jre
2、重新分配分区(16个,满足包要求)
echo 'options mmc_block perdev_minors=16' > /tmp/mmc_block.conf
sudo mv /tmp/mmc_block.conf /etc/modprobe.d/mmc_block.conf
3、下载sdk
cd $HOME/STM32MPU_workspace/tmp
tar xvf en.SDK-x86_64-stm32mp1-openstlinux-4.19-thud-mp1-19-10-09.tar.xz
4、运行SDK安装脚本
在主机上创建STM32MP15开发人员软件包SDK目录
mkdir $ HOME /STM32MPU_workspace/STM32MP15-Ecosystem-v1.1.0/Developer-Package
mkdir $ HOME/STM32MPU_workspace/STM32MP15-Ecosystem-v1.1.0/Developer-Package/SDK
更改SDK安装脚本的权限,使其可执行
chmod + x $ HOME / STM32MPU_workspace / tmp / stm32mp1-openstlinux-4.19-thud-mp1-19-10-09 / sdk / st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-2.6-openstlinux -4.19-thud-mp1-19-10-09.sh
5、执行SDK安装脚本
$ HOME / STM32MPU_workspace / tmp / stm32mp1-openstlinux-4.19-thud-mp1-19-10-09 / sdk / st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-2.6-openstlinux-4.19- thud-mp1-19-10-09.sh -d $ HOME / STM32MPU_workspace / STM32MP15-Ecosystem-v1.1.0 / Developer-Package / SDK
6、启动SDK
cd $HOME/STM32MPU_workspace/STM32MP15-Ecosystem-v1.1.0/Developer-Package
source SDK/environment-setup-cortexa7t2hf-neon-vfpv4-openstlinux_weston-linux-gnueabi
以下检查可确保正确设置环境:
检查目标架构
echo $ARCH
检查目标工具的工具链二进制前缀
echo $CROSS_COMPILE
检查C编译器版本
$CC --version
检查SDK版本是否为预期版本
echo $OECORE_SDK_VERSION
7、创建一个helloword应用程序
创建一个目录,该目录将托管您的源代码
mkdir STM32MPU_workspace/STM32MP15-Ecosystem-v1.1.0/Developer-Package/stm32mp1-openstlinux-4.19-thud-mp1-19-10-09
mkdir STM32MPU_workspace/STM32MP15-Ecosystem-v1.1.0/Developer-Package/stm32mp1-openstlinux-4.19-thud-mp1-19-10-09/sources
为您的用户空间示例创建目录
mkdir STM32MPU_workspace/STM32MP15-Ecosystem-v1.1.0/Developer-Package/stm32mp1-openstlinux-4.19-thud-mp1-19-10-09/sources/gtk_hello_world_example
cd $HOME/STM32MPU_workspace/STM32MP15-Ecosystem-v1.1.0/Developer-Package/stm32mp1-openstlinux-4.19-thud-mp1-19-10-09/sources/gtk_hello_world_example
为您的用户空间示例创建源代码文件:gtk_hello_world.c
#include <gtk/gtk.h>
vi
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: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))
部署并执行
make
scp gtk_hello_world root@board ip address:/usr/local