一、飞腾派简介
作为“中国芯”的代表之一,飞腾派为开发者、学生、科研人员和爱好者提供了一个深入了解和应用国产自主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操作可以 发现其实他们是映射到下面这个路径的快捷方式:
按照这个逻辑,我们不难归纳总结出:
gpiochip0 | gpiochip1 | gpiochip2 | gpiochip3 | gpiochip4 | gpiochip5 |
gpiochip496 | gpiochip480 | gpiochip464 | gpiochip448 | gpiochip432 | gpiochip416 |
再来看它的主程序部分:
#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的密码,按照顺序输入即可,密码不会显示出来。
运行结果如下(串口工具编码问题,中文没有正常输出)

