【Luckfox pico入门记录(一)】开发环境与工具链

2023-10-06 21:26

本文主要是介绍【Luckfox pico入门记录(一)】开发环境与工具链,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面

  最近刷bilibili发现微雪电子关于luckyfox pico的介绍视频,感叹linux开发板居然可以把价格缩到100RMB以内,也正巧结束了复旦微比赛,受够了FM33LC046N的低性能,来玩点便宜又高性能的板子。
  开发板型号:luckfox pico max
  开发环境:Ubuntu 22.04
  参考:luckyfox pico官方WIKI、微雪bilibili视频


一、环境搭建,输出hello world

  开发环境的搭建主要是根据官方WIKI的上手教程来进行,
在这里插入图片描述

  因为max是新出的,这里暂时只有标准版和plus的教程,我们按照plus的来就可以。因为SPI NAND FLASH中已经有出厂镜像了,因此这里无需再进行烧录。
  我们直接接上type-c USB进行ADB连接。WIKI中已经介绍过windows系统下ADB的使用了,因为开发都是在linux中的,所以这里直接介绍linux下的adb连接。
  初学者可以按照教程用他给的镜像,但是这里我们头铁,我们要学会嵌入式的通用开发方式。打开我的虚拟机Vimware,系统是ubuntu22.04,这里不一样都没关系,下面我们开始!

   安装相关依赖

sudo apt-get install repo git ssh make gcc gcc-multilib g++-multilib module-assistant expect g++ gawk texinfo libssl-dev bison flex fakeroot cmake unzip gperf autoconf device-tree-compiler libncurses5-dev pkg-config

   安装adb工具:

sudo apt install adb

   克隆官方git

git clone https://github.com/LuckfoxTECH/luckfox-pico.git

在这里插入图片描述
  激活交叉工具链环境变量,第一次执行如果报错,再重新执行一遍source即可

cd tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/
source env_install_toolchain.sh

  激活之后我们就可以写一个简单的C程序,

#include<stdio.h>
int main(){printf("hello world\n");return 0;
}

  对其进行编译

arm-rockchip830-linux-uclibcgnueabihf-gcc aaa.c aaa.o

  编译好后的文件我们使用adb发送到开发板上,首先输入

adb connect 172.32.0.93 

完成adb连接,这里需要注意,在windows下adb工具可以不指定端口号,这里需要指定端口号,这和具体的adb工具有关。
在这里插入图片描述

  然后登陆到开发板。
在这里插入图片描述

  接着另外启动一个窗口,通过adb把交叉编译好的文件发送过去,语法如下
在这里插入图片描述
在这里插入图片描述

  然后我们再查看开发板上的文件,发现多了一个aaa.o,并运行它
在这里插入图片描述

二、GPIO使用

  使用gpio之前需要提一下gpio的编号,因为在开发板的linux系统中,gpio通过编号进行索引

GPIO有5个bank,每个bank32个pin;
每个bank又可以分为ABCD四组,每组8个pin

  因此,对于GPIO1_C7_d,编号=1*32+8*2+7=55. 后面那个小d是后缀
  根据引脚示意图,我们可以查到gpio55的位置,我们接上LED灯和电阻
在这里插入图片描述
在这里插入图片描述

2.1 shell控制GPIO

  我们首先尝试使用在shell内直接更改GPIO设备文件的方法
  导出gpio55到用户空间

echo 55 > /sys/class/gpio/export

  读取 GPIO1_C7_d 引脚电平

echo 55 > /sys/class/gpio/export         
echo in > /sys/class/gpio/gpio55/direction 
cat /sys/class/gpio/gpio55/value       

  输出 GPIO1_C7_d 引脚电平,可以观测到led的变化

echo out > /sys/class/gpio/gpio55/direction 
echo 1 > /sys/class/gpio/gpio55/value       
echo 0 > /sys/class/gpio/gpio55/value    

2.2 C语言系统调用控制GPIO

  当然,更常用的办法是使用C语言通过系统调用的方式修改设备文件,实现对GPIO的控制。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>int main(){int gpio_pin;printf("Enter GPIO pin number:");scanf("%d",&gpio_pin);//export gpio to userFILE *export_file = fopen("/sys/class/gpio/export","w");if(export_file == NULL){perror("Failed to open GPIO export file");return -1;}fprintf(export_file,"%d",gpio_pin);fclose(export_file);//get the direction_pathchar direction_path[50];snprintf(direction_path,sizeof(direction_path),"sys/class/gpio/gpio%d/value",gpio_pin);//get the format char//specify the pin directionFILE *direction_file = fopen(direction_path,"w");if (direction_file == NULL){perror("Failed to open GPUI direction file");return -1;}fprintf(direction_file,"out");fclose(direction_file);char value_path[50];snprintf(value_path,sizeof(value_path),"sys/class/gpio/gpio%d/value",gpio_pin);FILE *value_file = fopen(value_path,"w");if(value_file == NULL){perror("Failed to open GPIO value file");return -1;}for(int i=0; i<300; i++){fprintf(value_file,"1");fflush(value_file);sleep(1);fprintf(value_file,"0");fflush(value_file);sleep(1);}fclose(value_file);return 0;
}

  使用交叉编译工具链进行编译,然后通过adb传输到开发板上运行即可,可以观察到LED的闪烁。
  用到的重要的函数需要解释一下:

fflush(File_ptr)//这个函数用来刷新缓冲区
snprintf()//这个函数用来把带格式控制的字符串转变成普通字符串

这篇关于【Luckfox pico入门记录(一)】开发环境与工具链的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/154045

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Java中基于注解的代码生成工具MapStruct映射使用详解

《Java中基于注解的代码生成工具MapStruct映射使用详解》MapStruct作为一个基于注解的代码生成工具,为我们提供了一种更加优雅、高效的解决方案,本文主要为大家介绍了它的具体使用,感兴趣... 目录介绍优缺点优点缺点核心注解及详细使用语法说明@Mapper@Mapping@Mappings@Co

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

使用Python实现图片和base64转换工具

《使用Python实现图片和base64转换工具》这篇文章主要为大家详细介绍了如何使用Python中的base64模块编写一个工具,可以实现图片和Base64编码之间的转换,感兴趣的小伙伴可以了解下... 简介使用python的base64模块来实现图片和Base64编码之间的转换。可以将图片转换为Bas

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

Rsnapshot怎么用? 基于Rsync的强大Linux备份工具使用指南

《Rsnapshot怎么用?基于Rsync的强大Linux备份工具使用指南》Rsnapshot不仅可以备份本地文件,还能通过SSH备份远程文件,接下来详细介绍如何安装、配置和使用Rsnaps... Rsnapshot 是一款开源的文件系统快照工具。它结合了 Rsync 和 SSH 的能力,可以帮助你在 li