# 前沿
##1. 安装交叉编译器
* 在 开发板光盘 A- 基础资料 ->5 、开发工具 ->1 、交叉编译器 路径下找到 st-example-image-qt
wayland-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-snapshot.sh 。将它拷贝到 Ubuntu 虚拟机上。 拷贝到 Ubuntu 后,赋予 st-example-image-qtwayland-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-snapshot.sh 可执行权限。
*chmod +x st-example-image-qtwayland-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-snapshot.sh
* 执行./st*.sh脚本安装
* 安装完成后,安装的交叉编译工具链都会安装在 /opt/ 目录下。
* ls /opt/st/
* 安装完成之后,在使用之前先对交叉编译工具的环境进行设置,使用 source 执行安装目录下的
environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi 脚本文件即可,如下所示:
source /opt/st/stm32mp1/3.1-snapshot/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
注意:每个终端需要执行上面的source命令之后,才能打印出${CC}.
使用${CC} -o led led.c编译
生成的led可执行文件通过scp命令传输到开发板,./led执行。
# 1.控制led
```c
15_led.c:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#define LED_TRIGGER "/sys/class/leds/user-led/trigger"
#define LED_BRIGHTNESS "/sys/class/leds/user-led/brightness"
#define USAGE() fprintf(stderr, "usage:\n" \
" %s <on|off>\n" \
" %s <trigger> <type>\n", argv[0], argv[0])
int main ( int argc , char * argv [])
{
int fd1 , fd2 ;
/* 校验传参 */
if ( 2 > argc ) {
USAGE ();
exit (- 1 );
/* 打开文件 */
fd1 = open ( LED_TRIGGER , O_RDWR );
if ( 0 > fd1 ) {
perror ( "open error" );
exit (- 1 );
}
fd2 = open ( LED_BRIGHTNESS , O_RDWR );
if ( 0 > fd2 ) {
perror ( "open error" );
exit (- 1 );
}
/* 根据传参控制 LED */
if (! strcmp ( argv [ 1 ], "on" )) {
write ( fd1 , "none" , 4 ); // 先将触发模式设置为 none
write ( fd2 , "1" , 1 );
// 点亮 LED
}
else if (! strcmp ( argv [ 1 ], "off" )) {
write ( fd1 , "none" , 4 ); // 先将触发模式设置为 none
write ( fd2 , "0" , 1 );
//LED 灭
}
else if (! strcmp ( argv [ 1 ], "trigger" )) {
if ( 3 != argc ) {
USAGE ();
exit (- 1 );
}
if ( 0 > write ( fd1 , argv [ 2 ], strlen ( argv [ 2 ])))
perror ( "write error" );
}
else
USAGE ();
exit ( 0 );
}
```
使用${CC} -o 15_led 15_led.c编译
在虚拟机使用ifconfig ens33 192.168.137.4配置ip
开发板ifconfig eth 192.168.137.3配置ip
开发板:scp tao@192.168.137.4:~/linux/c_cpp/15_led ~/将文件传输至开发板。
./15_led on点亮ds1,./15_led off熄灭ds1,./15_led trigger heartbeat使其闪烁。
也可以使用 DS0 进行测试,将 源码中的路径修改一下即可(/sys/class/leds/user-led/ 修改为 /sys/class/leds/sys-led/ )
# 操作GPIO