【小白向】萤火工场飞腾派Ubuntu系统镜像下载及与环境配置,以及初学GPIO的使用
分享作者:Chiando
作者昵称:chiando
评测品牌:萤火工场
评测型号:CEK8903-PIQ-S
发布时间:2025-07-08 10:18:13
0
前言
在接触单板计算机之前,相信很多人都和我一样只接触过单片机。经过一番深度体验之后 ,可以体会到单板机相对于单片机,操作更方便、更灵活,而且在数据处理和计算方面拥有更高的性能。
开源口碑分享内容

一、飞腾派简介

  作为“中国芯”的代表之一,飞腾派为开发者、学生、科研人员和爱好者提供了一个深入了解和应用国产自主CPU架构的实体平台。在领取到飞腾派之后,我主要对它烧录了Ubuntu系统,并且使用了一段时间。因为之前只学习过单片机,单板机和Linux对于我来说是很新鲜的事物,感谢iCEasy让我拥有了体验它的机会。


板卡上搭载了非常丰富的芯片和接口,能够满足日常生活的运用,也可以在工业、学习中方便使用。

下面是板子的特写实拍:

散热风扇

以太网口及USB口特写

板载4颗cxmt的内存芯片,按照说明书每颗应为1GB

底部40+12pin的排针,其中40pin兼容树莓派的接口定义,12pin作为调试接口,包含了UART接口和CAN总线等接口。

二、飞腾派Ubuntu系统的烧录

  Ubuntu系统是学习LINUX的首选,有丰富的软件生态,配套的应用比较完善,所以我主要选择了Ubuntu作为学习飞腾派的主要系统工具。

烧录过程可以参考详细的软件说明,在飞腾派软件开发手册中也有详细的说明,下面是我操作的步骤详解:

  • 首先在iCeasy下载专区/飞腾派下载专区/5-系统镜像下载Ubuntu镜像文件,或者到官方百度网盘下载:

https://www.iceasy.com/cloud/Phytium?pid=1877647197231063042      
 https://pan.baidu.com/s/1pStiyqohrB3SxHAFFk8R6Q 提取码: dzdv

其中百度网盘的系统版本比较多,并且常有更新和维护,建议直接到度盘上获取最新版的系统镜像。

  • 在常用软件工具包中下载Hash和balenaEtcher两个文件,用于镜像的哈希值校验以及烧录;也可以直接使用度盘里的Win32DiskImager,和官方文档的操作一致。

https://www.iceasy.com/cloud/Phytium?pid=1877646801158742021
  • 下载完成后,我们可以在Ubuntu-xfce文件夹中找到xfce_4GB_250327.zip的文件,将他解压后就得到了一个14GB的镜像文件。在烧录之前,我们需要使用Hash.exe这个软件对他进行一次哈希值校验,确保镜像文件在使用之前没有被修改过。

在这个软件下点击浏览,输入镜像文件的路径,选中后即开始哈希值校验。校验完成后自己比对每一位是否和压缩包中的图片的值一致,一致则说明镜像没有问题。这个时候打开balenaEtcher-Setup-1.14.3.exe安装烧录软件。

安装后先把要使用的SD卡插入电脑,打开balenaEtcher,选择镜像文件,选择刚刚插入的SD卡,确认无误后可以开始烧录。一定要确保没有选成其他U盘或者移动硬盘,否则会覆盖你其他盘上的所有文件!

等待烧录完成后即可将SD卡取下,插到飞腾派的卡槽中。

三、基础使用

在主界面,可以打开终端模拟器执行操作:

终端模拟器的界面和命令行差不多

首先可以查看CPU的信息,输入以下代码:

lscpu

输出结果如下:

可以清楚了解到飞腾派的CPU的基本信息,架构为aarch64(即arm64指令集架构),CPU为4核单线程,主频为1.8GHz,可以说配置完全是堆满了。因为CPU是 arm64架构的,所以后续安装的软件也必须对应下载arm64架构的软件。

四、winSCP的使用

为了我们的PC可以和飞腾派快速传输文件,我们可以利用wifi传输内容。在windows系统上,先安装winSCP,安装后的界面如下:

我们需要输入主机名(IP地址)、用户名和密码,主机名在飞腾派的终端中,输入ifconfig查看。如果你是WiFi,则看wlan0的IP地址;如果用以太网线连接,则看eth0和eth1。我这里用的是WiFi,可以看到我的IP地址是10.192.18.139。

登录成功后,WinSCP左边是电脑端的文件夹,右边是飞腾派的用户目录,可以直接在电脑上复制文件夹到右边,执行文件传输,十分方便。

如图,我在飞腾派终端输入了mkdir code ,在/home/user/文件夹下新建了一个/code文件夹,在winSCP刷新之后即可看到code文件夹。

我们可以把需要用到的代码文件复制到这个文件夹之下。


五、C语言编写的主要指令

要灵活使用Ubuntu,则文件系统的操作非常重要。cd指令用于切换操作的目录。

cd /   这条指令用于退回目录根部

cd ~    这条指令可以快速定位到user目录

cd ./    前面的.是省略的地址,表示当前的目录

cd../    退回上一级目录

mkdir用于新建目录。

gcc 用于编译.c或者.cpp文件,常用格式为

gcc yourfile.c -o yourfile

则GCC编译器会将yourfile.c的c语言程序编译成名为yourfile的二进制程序。

六、GPIO操作入门

①在官方例程GPIO里,关于GPIO的操作使用了两种办法:分别使用了两种不同的方法来操作GPIO:一种是通过system函数调用shell命令(system-gpio.c),另一种是通过直接操作sysfs文件系统的文件(sysfs-gpio.c)。

  • system-gpio.c:

例如代码system("echo 1 > /sys/class/gpio/gpio492/value");每次调用启动完整shell进程 (/bin/sh),调用方式为Shell解析命令 → 打开文件 → 写入数据 → 关闭文件,属于间接操作,即程序 → shell → 内核的操作路径;

  • sysfs-gpio.c: 例如使用代码

int fd = open("/sys/class/gpio/gpio474/value", O_WRONLY);

write(fd, "1", 1);

close(fd);

直接通过系统调用操作文件描述符,属于直接操作,从程序直接控制内核,从而影响GPIO的输出。

下面针对官方例程中system-gpio.c这个最简单的例子展开介绍。

②GPIO端口以及其映射的端口号的辨别

在开始介绍飞腾派的GPIO之前,我们先来看下面这张表:是官方手册给出的40PIN排针的定义表:

接着来看官方例程中的代码:

首先是前面的注释,我们细读一下:

/*

以下以操作GPIO3_1作为输入和GPIO1_12作为输出的为例 ,说明GPIO的使用方法。

GPIO1_12归属于gpiochip1 ,gpiochip1对应的编号从480到495 ,GPIO1_12偏移12 ,所以对应的编号为 480+12=492。

同理 ,GPIO3_1的编号归属于gpiochip3 ,gpiochip3对应的编号从480到495,GPIO3_1偏移1,所以对应编号为 448+1=449

以下程序将GPIO1_12每2秒翻转一次电平,然后从GPIO3_1读回,执行5次后退出程序。

*/

会发现它提及了gpiochip1对应编号480到495,也就是gpio1_0对应的是gpio480,gpio1_12对应的是gpio492。也就是说明,在操作GPIO的时候,我们并不是输入GPIOx_i的形式对某一个端口进行操作,而是首先要查出他们的“真名”是什么;

这部分怎么查看呢?

我们可以进入目录:sys/class/gpio/,看到有gpiochip416等一系列文件夹,这里点进gpiochip480,里面有gpiochip1这一文件夹,也就代表gpiochip1对应的是gpio480。

如果你通过winSCP操作可以 发现其实他们是映射到下面这个路径的快捷方式:

按照这个逻辑,我们不难归纳总结出:

gpiochip0gpiochip1gpiochip2gpiochip3gpiochip4gpiochip5
gpiochip496gpiochip480gpiochip464gpiochip448gpiochip432gpiochip416

再来看它的主程序部分:

#include<stdio.h>

#include<stdlib.h>

#include<unistd.h>

#include<time.h>

int main()

{

       int nCnt = 5;

       system("echo 492 > /sys/class/gpio/export");  这里设置gpio1_12为输出

       system("echo out > /sys/class/gpio/gpio492/direction");

       system("echo 449 > /sys/class/gpio/export");  这里设置gpio3_1为输入

       system("echo in > /sys/class/gpio/gpio449/direction");

       do

       {

               system("echo 0 > /sys/class/gpio/gpio492/value");这里设置gpio1_12为0(低电平)

               sleep(1);//延时1s

               system("cat /sys/class/gpio/gpio449/value");这里通过gpio3_1读取高低电平信号

               system("echo 1 > /sys/class/gpio/gpio492/value");这里设置gpio1_12为1(高电平)

               sleep(1);//延时1s

               system("cat /sys/class/gpio/gpio449/value");              这里通过gpio3_1读取高低电平信号

               nCnt--;计数值自减,五次之后为0

       }while(nCnt);nCnt=0时循环结束

       system("echo 492 > /sys/class/gpio/unexport");gpio1_12关闭

       system("echo 449 > /sys/class/gpio/unexport");gpio3_1关闭

       printf("执行完毕!\n");

       return 0;

}

这份代码可以在gpio1_12上外接一个LED,也可以用一根杜邦线从gpio1_12接到gpio3_1。

我实际接LED的方法如下

③代码的编译和运行

首先应转到我们存放该代码的路径下,我这里的路径是放在/home/user/code/gpio下,

其中/home/user经常表示为~$,看到这个符号,代表你已经在/home/user目录下了。这个时候我们输入cd  ./code/gpio即可切换到我们存放代码的目录下

此时输入gcc system-gpio.c -o system即可将以上代码编译成名为system的二进制文件。

在winSCP和串口工具中也可以执行上述操作。

确保二进制文件成功生成后,我们将尝试运行它:

sudo ./system

sudo 是super do 的意思,可以理解为给飞腾派更加进阶的操作权限。首次执行时需要提供user的密码,按照顺序输入即可,密码不会显示出来。

运行结果如下(串口工具编码问题,中文没有正常输出)

全部评论
暂无评论
0/144