【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()//这个函数用来把带格式控制的字符串转变成普通字符串
相关推荐
智购科技自动售卖机厂家36 分钟前
从STM32到RK3588——自动售货机嵌入式主控方案的架构演进~YH
stm32·嵌入式硬件·物联网·架构·lua·零售·symfony
振南的单片机世界1 小时前
2MHz/50MHz玄机:GPIO速度档选错,信号直接“烂尾”
arm开发·stm32·单片机·嵌入式硬件
Run_Teenage2 小时前
嵌入式:理解STM32文档和社区生态,工具链的选择与安装
stm32·单片机·嵌入式硬件
ACP广源盛139246256732 小时前
DeepSeek‑V4‑Flash 公测@ACP#昇腾 950 国产算力组合落地,国产 PCIe 交换芯片 IX9104 有哪些硬件机会
大数据·数据库·人工智能·分布式·单片机·嵌入式硬件·microsoft
铅笔小新z2 小时前
【stm32】RCC 与时钟树
stm32·单片机·嵌入式硬件
深爱水瓶 血影S狂风2 小时前
函数调用过程探究
linux·运维·服务器
酷可达拉斯3 小时前
Linux操作系统-磁盘空间使用率100%如何处理?
linux·运维·服务器·云计算·bash
时空自由民.3 小时前
STM32 IIC HAL库,LL库
stm32·单片机·嵌入式硬件
txh05073 小时前
不用变压器也能把220V交流电变为5V直流电?
单片机·嵌入式硬件
AIgorithmGEEK3 小时前
Linux 权限管理:从「Permission Denied」到「畅行无阻」
linux·权限·chmod·粘滞位·umask·文件权限的构成