
1.第一步按照官网要求在开发主机安装下面的库 PC $> sudo apt-get update PC $> 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 PC $> sudo apt-get install libsdl1.2-dev xterm corkscrew nfs-common nfs-kernel-server device-tree-compiler mercurial u-boot-tools libarchive-zip-perl PC $> sudo apt-get install ncurses-dev bc linux-headers-generic gcc-multilib libncurses5-dev libncursesw5-dev lrzsz dos2unix lib32ncurses5 repo libssl-dev PC $> sudo apt-get install default-jre 2.添加 conf文件 PC $> echo 'options mmc_block perdev_minors=16' > /tmp/mmc_block.conf PC $> sudo mv /tmp/mmc_block.conf /etc/modprobe.d/mmc_block.conf 3解压gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf文件。,添加bashrc即可 bin文件下 安装sh文件,输入安装的路径 ![]() 上图表示安装成功 4.按官网指示,在sdk同级目录下创建source 编写 代码 #include <gtk/gtk.h> #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/ioctl.h> #include <unistd.h> #include<linux/gpio.h> struct gpiohandle_request req; struct gpiohandle_data data; char chrdev_name[20]; int fd, ret; static void led_control(GtkWidget *widget, gpointer data1) { data.values[0] = !(data.values[0]); ret = ioctl(req.fd, GPIOHANDLE_SET_LINE_VALUES_IOCTL, &data); if (ret == -1) { ret = -errno; fprintf(stderr, "Failed to issue %s (%d)\n", "GPIOHANDLE_SET_LINE_VALUES_IOCTL", ret); } if(data.values[0]) { g_print("close led \n"); } else { g_print("open led \n"); } } static void activate (GtkApplication *app, gpointer user_data) { GtkWidget *window; GtkWidget *button_led; GtkWidget *led_label; window = gtk_application_window_new (app); gtk_window_set_title (GTK_WINDOW (window), "led test"); gtk_window_set_default_size (GTK_WINDOW (window), 200, 200); button_led = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); gtk_container_add(GTK_CONTAINER (window), button_led); led_label = gtk_button_new_with_label ("LED"); g_signal_connect (led_label, "clicked", G_CALLBACK (led_control), NULL); gtk_container_add(GTK_CONTAINER (button_led), led_label); 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); strcpy(chrdev_name, "/dev/gpiochip0"); /* Open device: gpiochip0 for GPIO bank A */ fd = open(chrdev_name, 0); if (fd == -1) { ret = -errno; fprintf(stderr, "Failed to open %s\n", chrdev_name); return ret; } /* request GPIO line: GPIO_A_14 */ req.lineoffsets[0] = 14; req.flags = GPIOHANDLE_REQUEST_OUTPUT; memcpy(req.default_values, &data, sizeof(req.default_values)); strcpy(req.consumer_label, "led_gpio_a_14"); req.lines = 1; ret = ioctl(fd, GPIO_GET_LINEHANDLE_IOCTL, &req); if (ret == -1) { ret = -errno; fprintf(stderr, "Failed to issue GET LINEHANDLE IOCTL (%d)\n", ret); } if (close(fd) == -1){ perror("Failed to close GPIO character device file"); } status = g_application_run (G_APPLICATION (app), argc, argv); g_object_unref (app); return status; } 4编写Makefile PROG = gek_led SRCS = 3.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)) 5 source 下 sdk目录下的env开头文件,检查$CC --version 是否有输出 6. 在 source 目录下 make 产生gek_led ,通过scp 或者 filezilla 传到目标板上运行 7. 界面点击led button 同时log 和灯会跟着控制 ![]() |
基于STM32MP1和STM32MP2在嵌入式Linux平台上部署有效的安全保护机制
利用STM32MP1和STM32MP2为嵌入式Linux提供有效的安全措施:供当今决策者参考的3条宝贵经验
STM32MP1 WiFi连接
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【STM32MPU 安全启动】 TF-A BL2 TrustedBoot原理学习
《STM32MPU安全启动》学**结
《STM32MPU安全启动》学习笔记之optee 如何加载CORTEX-M核和使能校验
《STM32MPU安全启动》学习笔记之TF-A BL2校验optee和uboot的流程以及如何使能
《STM32MPU 安全启动》课程学习心得+开启一扇通往嵌入式系统安全领域深处的大门。
《STM32MPU安全启动》 课程学习心得
界面就是一个按钮