【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,这里不一样都没关系,下面我们开始!

   安装相关依赖

shell 复制代码
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工具:

shell 复制代码
sudo apt install adb

   克隆官方git

shell 复制代码
git clone https://github.com/LuckfoxTECH/luckfox-pico.git

  激活交叉工具链环境变量,第一次执行如果报错,再重新执行一遍source即可

shell 复制代码
cd tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/
source env_install_toolchain.sh

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

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

  对其进行编译

shell 复制代码
arm-rockchip830-linux-uclibcgnueabihf-gcc aaa.c aaa.o

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

shell 复制代码
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到用户空间

shell 复制代码
echo 55 > /sys/class/gpio/export

  读取 GPIO1_C7_d 引脚电平

shell 复制代码
echo 55 > /sys/class/gpio/export         
echo in > /sys/class/gpio/gpio55/direction 
cat /sys/class/gpio/gpio55/value       

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

shell 复制代码
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的控制。

c 复制代码
#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 user
    FILE *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_path
    char direction_path[50];
    snprintf(direction_path,sizeof(direction_path),"sys/class/gpio/gpio%d/value",gpio_pin);//get the format char
    //specify the pin direction
    FILE *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的闪烁。

  用到的重要的函数需要解释一下:

c 复制代码
fflush(File_ptr)//这个函数用来刷新缓冲区
snprintf()//这个函数用来把带格式控制的字符串转变成普通字符串
相关推荐
JNX_SEMI3 小时前
EG2226 全桥驱动芯片技术解析:600V/1A 耐压、SSOP16 封装,助力逆变器与无刷电机驱动设计
单片机·嵌入式硬件·物联网
大卡片3 小时前
PWM控制原理
嵌入式硬件
lolo大魔王3 小时前
Linux 文件系统超全面详解(原理、结构、挂载、分区、inode、日志、管理命令)
linux·运维·服务器
磊 子5 小时前
详细讲解一下epoll
linux·io·epoll·io多路复用
周周记笔记5 小时前
【元器件专题】用阻抗等效分析法来分析开关电路
单片机·嵌入式硬件
printfLILEI5 小时前
php中的类与对象以及反序列化
linux·开发语言·php
leoFY1235 小时前
STM32H750配置LAN PHY芯片LAN8742
网络·stm32·嵌入式硬件
iCxhust5 小时前
如何利用iret修改cs ip
汇编·单片机·嵌入式硬件·微机原理·8088单板机
叠叠乐7 小时前
redmi k90 pro max 强解BL,刷海外rom, 并刷入sukisu ultra
linux
m0_377108147 小时前
stm32平衡车
stm32·单片机·嵌入式硬件