【正点原子FPGA连载】第十四章Linux基础外设的使用 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

news2025/1/19 3:40:17

1)实验平台:正点原子MPSoC开发板
2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html

第十四章Linux基础外设的使用

上一章我们成功使用Petalinux搭建了Linux系统,有了系统就可以在系统上使用相应外设以及运行应用程序。本章我们学习如何通过Linux系统控制DFZU2EG_4EV MPSoC开发板上的基础外设,如LED、按键、EEPROM、以太网等。这些外设都可以在终端通过Shell来控制,非常方便。

7.1GPIO之LED的使用
GPIO驱动程序通过sysfs文件系统提供了用户空间对GPIO的访问,因而通过终端控制LED极其方便。我们启动DFZU2EG_4EV MPSoC开发板,进入第六章定制的Linux系统后在串口终端中输入如下命令进入到sysfs文件系统的leds接口处:
cd /sys/class/leds
ls
通过ls命令可以看到我们在设备树中配置的led,如下图所示:
在这里插入图片描述

图 7.1.1 查看led
这4个LED对应开发板上的4个LED灯,名字的命名跟板子上对应LED丝印上的名字是一样的。我们先来看下led下的内容,以ps_led1为例,输入“ls ps_led1”,执行结果如下图所示:
在这里插入图片描述

图 7.1.2 led下的内容
可以看到有brightness和trigger。Brightness可以控制led灯的亮灭,trigger可以选择触发方式。我们向ps_led1的brightness写入0,即输入“echo 0 > ps_led1/brightness”命令,如下图所示:
在这里插入图片描述

图 7.1.3 输入“echo 0 > ps_led1/brightness”命令
可以看到开发板上的PS_LED1被熄灭,现在输入“echo 1 > ps_led1/brightness”命令,如下图所示:
在这里插入图片描述

图 7.1.4 输入“echo 1 > ps_led1/brightness”命令
可以看到开发板上的PS_LED1灯亮,这就是通过brightness 来控制led灯的亮灭,其他led灯也可以以此种方式控制。
现在我们来看下如何通过trigger来控制led。首先输入“cat ps_led1/trigger”命令看下有多少种触发方式,如下图所示:
图 7.1.5 查看触发方式
可以看到触发方式非常多,其中“[]”中的内容表示当前触发方式。可知当前触发方式为none,也就是表示无任何触发反应。
现在试一下timer触发,输入命令“echo timer > ps_led1/trigger”,如下图所示:
在这里插入图片描述

图 7.1.6 timer触发
可以看到开发板上PS_LED1灯以定时器的方式每秒闪烁一次,这就是timer触发方式的效果,与我们在设备树中配置的效果一样。现在来看下heartbeat方式的效果,输入命令“echo heartbeat > ps_led1/trigger”,如下图所示:
在这里插入图片描述

图 7.1.7 heartbeat方式
此时可以看到开发板上的PS_LED1灯像心跳一样的闪烁这就是heartbeat触发方式的效果。其它触发方式,这里就不一一列举了,有兴趣的读者可以自行探索,需要提醒的是并不是所有的触发方式都能有反应,必须满足触发条件才行。
7.2GPIO之按键的使用
GPIO按键的使用非常简单,通过读取文件/dev/input/event0可以获取由GPIO按键生成的按键事件。在串口终端中输入“cat /dev/input/event0 | hexdump”命令,然后按下一个按键,输入事件将打印到控制台;如下图所示:
在这里插入图片描述

图 7.2.1 获取按键事件
可以通过这种方式快速测试按键。
7.3EEPROM的使用
在6.3.7小节配置设备树的时候,我们在设备树文件中配置了一个EEPROM的I2C外设,我们来看下如何读写EEPROM。
在/sys/class/i2c-adapter目录下有五个I2C总线控制器,如下图所示:
在这里插入图片描述

图 7.3.1 I2C总线控制器
开发板上的EEPROM挂载在i2c-2总线下。我们进入到/sys/class/i2c-adapter/i2c-2/目录下,查看该目录下的内容,命令如下:
cd /sys/class/i2c-adapter/i2c-2/
ls -l
结果如下图所示:
在这里插入图片描述

图 7.3.2 i2c-2总线下挂载的器件
可以看到器件地址50对应的文件夹2-0050,对应eeprom。
进入到2-0050/目录下,可以看到该目录有一个eeprom文件,如下图所示:
在这里插入图片描述

图 7.3.3 eeprom文件
可以通过eeprom文件对EEPROM设备进行读写操作,譬如向eeprom设备中写入“hello world”,然后读取出来,输入命令如下:
echo “hello world” > eeprom
head -1 eeprom
执行结果如下图所示:
在这里插入图片描述

图 7.3.4 读写eeprom
至此我们eeprom设备的读写就完成了。
7.4RTC的使用
对于RTC,linux有一个专用的命令:hwclock。
在Linux中有硬件时钟与系统时钟两种时钟。硬件时钟是指电路板上的时钟设备(包括主控芯片内的时钟模块),也就是通常可在BIOS 画面设定的时钟。系统时钟则是指kernel中的时钟。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。所有Linux相关指令与函数都是读取系统时钟的设定。
使用date和hwclock命令可分别查看和设定系统时钟和硬件时钟。
在串口终端中输入下面的指令查看系统时间:
date
串口终端如下图所示:
在这里插入图片描述

图 7.4.1 date查看系统时钟
上图中箭头所指示的位置就是当前的系统时间。
在串口终端中输入下面的指令查看硬件(RTC)时钟:
hwclock
串口终端如下图所示:
在这里插入图片描述

图 7.4.2 查看RTC时钟
上图中显示的便是当前RTC时钟芯片中的时间。
在串口终端中输入下面的指令将系统时间设置为当前日期和时间(2021/11/11,15:15:00),然后使用 date 指令查看所设置的系统时间:
date -s “2021-11-11 15:15:00”
date
执行结果如下图所示:
在这里插入图片描述

图 7.4.3 系统时间设置
在串口终端中输入下面的命令将系统时间写入RTC时钟芯片中,然后使用hwclock命令查看硬件时钟。
hwclock -w // 将系统时钟同步至硬件时钟
hwclock // 查看硬件时钟
执行结果如下图所示:
在这里插入图片描述

图 7.4.4 写入RTC时钟
7.5miniDP接口的使用
开发板带有一个miniDP接口,可以接显示器显示。一般显示使用的是DP接口或者HDMI接口,与开发板的miniDP接口不同,所以还需要一根miniDP转DP线或者miniDP转HDMI线。下面分别展示不同接口显示器的线材接口。

  1. DP接口显示器:使用公对公的mini DP转DP线连接开发板和DP显示器即可,线材接口如下:
    在这里插入图片描述

图 7.5.1 mini DP转DP线
2. HDMI接口显示器:需要使用主动式miniDP转HDMI线来连接开发板和HDMI显示器。需要注意的是并不是市面上所有的miniDP转HDMI线都可以使用,至于原因,Xilinx官方也只是说由于历史原因,但并未透露更多细节。笔者在购买市面上大量的miniDP转HDMI线并进行测试后发现,有些线linux系统下能显示,但是裸机Vitis下不能显示或显示有问题,有些线无法使用,最终测试发现有一根线linux和Vitis下都能正常显示,点击该线的购买链接即可跳转到购买页面,线材图片如下图所示:
在这里插入图片描述

图 7.5.2 测试可用的主动式miniDP转HDMI线
使用转接线将开发板的miniDP与显示器连接后,按PS的复位按键重启开发板,重启后会在显示器显示控制台终端的登录界面,如下图所示:
在这里插入图片描述

图 7.5.3 显示器显示
7.6USB的使用
USB外设的使用很简单,一些常用的USB外设如鼠标、键盘、U盘可以直接插到开发的USB接口上,像插入电脑的USB接口一样。此处笔者以USB接口的键盘为例,演示USB的使用。将USB接口的键盘接到开发板的USB接口,在串口中断中会打印如下信息:
在这里插入图片描述

图 7.6.1 检测到USB键盘
显示的“Product: CASUE USB KB”表明检测到插入的设备是USB键盘。如何使用USB键盘呢?
上一节我们演示了开发板miniDP接口的使用,最终在显示器上显示了控制台终端的登录界面,现在我们用USB键盘登录该终端。输入用户名“root”和密码“root”,按回车键即可进入该终端,如下图所示:
在这里插入图片描述

图 7.6.2 登录终端
登录后就可以用USB键盘像使用串口终端那样使用控制台终端。

7.7以太网的使用
DFZU2EG_4EV MPSoC开发板有两路千兆以太网接口,PL_ETH和PS_ETH;由于PL_ETH网口使用了PL端IO资源,而PS_ETH使用了PS端IO资源,所以这里也把PL_ETH网口称为PL网口、而把PS_ETH网口称为PS网口,如下所示:
在这里插入图片描述

图 7.7.1 开发板上的网口示例图
注:连接网口的网线要使用千兆网线,譬如CAT-5E类网线或CAT-6类网线,笔者在实际测试当中,发现 CAT-5E 类网线并不稳定,所以这里推荐使用CAT-6类网线进行测试。
7.7.1查看网络设备
在串口终端执行下面这条命令可以查看系统中的所有网络设备,如下所示:
ip -s a
#或者
ifconfig -a
在这里插入图片描述

图 7.7.2 查看所有网络设备
图 7.7.2中显示了当前系统中所有的网络设备,其中 eth0表示开发板上的PL_ETH网口、而eth1则表示开发板上的PS_ETH 网口。还可以直接使用ifconfig命令不加任何选项查看当前系统已经激活(打开)的网络设备(等同于命令ip link show up),如下图所示:
在这里插入图片描述

图 7.7.3 查看当前打开的网络设备
系统默认只激活了eth0,而eth1并没有激活,上图中的eth0就是开发板上的PL网口,可以通过ifconfig命令或者ip命令来关闭或激活对应的网口。
ifconfig命令打开或关闭PL网口的命令如下所示:
ifconfig eth0 down //关闭 eth0(PL 网口)
ifconfig eth0 up //打开 eth0(PL 网口)
ifconfig命令打开或关闭PS网口的命令如下所示:
ifconfig eth1 down //关闭 eth1(PS 网口)
ifconfig eth1 up //打开 eth1(PS 网口)
如果是用ip命令,则对应命令如下:
ip link set eth1 down //关闭 eth1(PS 网口)
ip link set eth1 up //打开 eth1(PS 网口)
下面我们在使用PS网口的时候,需要先把PL网口给关闭,只打开PS网口;同理使用PL网口的时候,需要把PS网口给关闭,只打开PL网口;在后面的使用当中,笔者以PL网口为例进行介绍,PS网口使用方式相同。
7.7.2外网连接测试(有路由器)
在测试之前,我们先使用网线将开发板PL网口连接到能够上网的路由器设备上,如果没有能够上网的路由器设备的请跳过该小节,进入下一小节,因为访问外网需要联网的路由器。
执行下面的命令打开开发板的 PL网口,并且关闭PS网口:
ip link set eth1 down //关闭 PS 网口
ip link set eth0 up //打开 PL 网口
ip link show up
结果如下图所示:
在这里插入图片描述

图 7.7.4 打开 PL网口关闭 PS网口
接下来我们需要给 PL网口分配一个 IP 地址,使用udhcpc命令从 DHCP 服务器中动态获取一个 IP 地址,如下所示:
udhcpc -i eth0 //eth0动态获取IP地址
在这里插入图片描述

图 7.7.5 动态获取 IP 地址
从图 7.7.5中可以看到,笔者这里 PL网口动态获取得到的 IP 地址为 192.168.2.219。获取到 IP 地址之后,接下来我们需要测试下开发板是不是能够上网,也就是测试开发板 PL网口是否工作正常、是否能够连接外网。当然首先确定开发板PL网口连接到的路由器是能够连接外网的,我们可以使用 ping命令来测试开发板与另一台主机的网络连接是否通畅。
ping命令是基于ICMP(Internet Control Message Protocol)协议来工作的,执行ping命令本地主机会向目标主机发送一份ICMP回显请求报文,并等待目标主机返回ICMP应答;因为ICMP协议会要求目标主机收到消息之后,必须返回ICMP应答消息给本地主机,如果本地主机收到了目标主机的应答,则表示两台主机之间的网络运行、网络连接是正常的。
例如在串口终端执行ping命令来测试开发板(本地主机)与百度www.baidu.com服务器(目标主机)之间的网络连接是否通畅,如下所示:
ping -c 10 www.baidu.com //测试开发板与百度服务器之间网络连接情况
在这里插入图片描述

图 7.7.6 执行ping命令
从上图可以知道,我们通过开发板对百度服务器主机(IP地址:14.215.177.39)发送了10次应答请求,并且每次都收到了它的应答消息(64字节数据),并且没有数据丢失,说明开发板与百度服务器主机之间的网络运行、网络连接是OK的,也就意味着我们的开发板与外网是连通的。
PS网口的外网连接测试同理。
7.7.3电脑直连测试(无路由器)
在开发过程中,电脑和开发板互相访问是经常需要的,这可以通过路由器来实现,连接到同一路由器的设备是可以互相访问的,如果没有路由器,也可以使用网线将开发板PS网口或者PL网口直接连接到电脑的以太网接口上,也就是电脑直连,不过这种方式不能访问外网。笔者以PL网口为例,用网线将开发板的PL网口和电脑的以太网接口相连接。
连接好网线之后,需要设置电脑以太网的IP地址(设置方法可以参考该视频链接:Linux 开发板网络直连电脑的设置方法)。笔者设置电脑的IP地址如下图所示:
在这里插入图片描述

图 7.7.7 设置IPv4地址
配置完成后,在串口终端中执行下面这些命令打开开发板的PL网口,并且关闭PS网口:
ip link set eth1 down //关闭 PS 网口
ip link set eth0 up //打开 PL 网口
ip link show up
执行下面的命令设置开发板eth0网口的静态IP地址为192.168.2.88:
ip addr add 192.168.2.88/24 dev eth0
将开发板的静态IP地址设置为192.168.2.88,这样开发板的IP地址和电脑的IP就在同一网段。设置完开发板的静态IP地址后,进行Ping测试,看开发板和电脑能不能相互Ping通。
首先开发板ping电脑,命令如下:
ping -c4 192.168.2.89
结果如下图所示:
在这里插入图片描述

图 7.7.8 开发板ping电脑结果
如果Ping不通电脑,请关闭电脑的防火墙后再尝试。
电脑ping开发板。首先打开电脑的cmd命令提示符,然后输入如下命令:
ping 192.168.2.88
结果如下:
在这里插入图片描述

图 7.7.9 电脑ping开发板结果
开发板和电脑相互Ping通,说明双方的通信基本上没啥问题了。
如果想测试Ubuntu虚拟机与开发板的网络连接,可以设置Ubuntu虚拟机的网络,设置方法可以继续参考该视频链接:Linux 开发板网络直连电脑的设置方法。笔者设置Ubuntu虚拟机的IP地址如下图所示:
在这里插入图片描述

图 7.7.10 Ubuntu虚拟机静态IP地址
首先开发板ping Ubuntu虚拟机,命令如下:
ping -c4 192.168.2.134
结果如下图所示:
在这里插入图片描述

图 7.7.11 开发板ping Ubuntu虚拟机结果
Ubuntu虚拟机ping开发板。首先打开Ubuntu虚拟机的终端,然后输入如下命令:
ping -c4 192.168.2.88
结果如下:
在这里插入图片描述

图 7.7.12 Ubuntu虚拟机ping开发板结果
开发板和Ubuntu虚拟机相互Ping通,说明双方的通信基本上没啥问题了。
PS网口的电脑直连测试同理,此处就不赘述了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/161690.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

百趣代谢组学文献分享:间歇性禁食调节糖尿病脑损伤多组学研究

百趣代谢组学文献分享,糖尿病已经成为一个全球问题,国际糖尿病联盟(IDF)发布的全球糖尿病地图(第9版)[1]显示,全球糖尿病患者人数不断上升,全球平均增长率为51%,目前有4.…

C#,图像二值化(23)——局部阈值的绍沃拉算法(Sauvola Thresholding)及源程序

1、局部阈值的绍沃拉算法(Sauvola Thresholding)Niblack和Sauvola阈值算法Niblack和Sauvola阈值是局部阈值技术,对于背景不均匀的图像非常有用,尤其是对于文本识别1、2。代替为整个图像计算单个全局阈值,通过使用考虑到…

【5】K8S_Deployment

目录 1、Deployment作用 2、deployment的冗余能力 3、deployment的多副本部署 4、deployment的扩缩容 5、deployment的自愈能力 6、滚动更新 7、版本回退 1、Deployment作用 控制Pod,使Pod拥有多副本,自愈,扩缩容等能力 2、deployme…

【正点原子FPGA连载】第十五章开发环境搭建 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十五章开发环境…

uniapp 窗口小工具、桌面小部件、微件(日历、时间) Ba-AwCalendarS

简介(下载地址) Ba-AwCalendarS 是一款窗口小工具(桌面小部件、微件)插件,默认为简单的时间样式,有其他界面需要,可联系作者定制。 支持定时更新(本插件为每分钟)支持点…

基于springboot,vue二手交易平台

开发工具:IDEA服务器:Tomcat9.0, jdk1.8项目构建:maven数据库:mysql5.7系统用户前台和管理后台两部分,项目采用前后端分离前端技术:vue elementUI服务端技术:springbootmybatis项目功…

【数据结构】开端序幕

写在前面,感同身受初学数据结构,是不是一脸懵,下面你中招了几条?😭怎么全是指针!指针都不会啊!怎么变量名那么长,好难理解啊!什么p,什么next,pp->next究竟…

LeetCode[1753]移除石头的最大得分

难度:中等题目:你正在玩一个单人游戏,面前放置着大小分别为 a、b和 c的 三堆 石子。每回合你都要从两个 不同的非空堆 中取出一颗石子,并在得分上加 1分。当存在 两个或更多 的空堆时,游戏停止。给你三个整数 a、b和 c…

动手深度学习-多层感知机

目录感知机多层感知机激活函数sigmoid函数tanh函数ReLU函数多层感知机的简洁实现参考教程:https://courses.d2l.ai/zh-v2/ 感知机 模型: 感知机模型就是一个简单的人工神经网络。 感知机是二分类的线性模型,其输入是实例的特征向量&#x…

智慧管廊智能化运维管理平台详情

运维管理平台 ​ 平台主界面完成各分系统情况的全局性展现,用图形界面的方法提升视觉效果感染力,根据图色区分正常、异常情况。 1、自然环境及设备监控 ​ 选用全景分层三维可视化地理信息系统及其多元化的二维在线地图从温度、风速、电力、排水、安防…

windows检测远程主机是否连通或者某个端口是否开启

文章目录一、检测主机是否连通步骤二、测试端口是否打开步骤telnet安装一、检测主机是否连通 ping命令是个使用频率极高的网络诊断工具,在Windows、Unix和Linux系统下均适用。它是TCP/IP协议的一部分,用于确定本地主机是否能与另一台主机交换数据报。根…

2022年度总结 EXI-小洲

文章目录一、第一次自我介绍二、2022我都干了些什么(我的收获)1.大专顺利毕业2.后端开发辞职3.第二次代表学校参加江西省职业院校大数据技能大赛4.专升本考试5.参加泰迪杯第五届"数据分析技能赛"6.在csdn开始写博文7.在本科阶段,我又认识了几个会喝点酒的…

【2022年度总结】总结过去,展望未来

文章目录前言回顾过去一、刷题道路两眼黑二、助人为乐本身便是一种快乐展望未来兔年Flag博客文章竞赛目标学习目标志同道合前言 注册CSDN一年了,新年伊始,正好趁着这个时间复盘一下逝去的2022! 很幸运,在对计算机知识懵懂无知的时…

分布式调度XXL-JOB急速入门

文章目录1.业界分布式定时任务框架简介2.分布式调度XXL-JOB核心特性3.Docker部署MySQL8.04.XXL-JOB数据库脚本介绍5.Docker部署XXL-JOB服务端6.XXL-JOB UI菜单模块介绍7.SpringBoot整合XXL-JOB8.分布式调度参数传递9.分布式调度日志埋点10.自定义返回执行成功或失败11.XXL-Job高…

C#上位机基础学习_基于SOCKET实现与PLC服务器的TCP通信(二)

C#上位机基础学习_基于SOCKET实现与PLC服务器的TCP通信(二) 测试软件: TIA PORTAL V15.1 S7-PLCSIM ADVANCED V3.0 Visual Studio 2019 在上次的分享中,我们了解了TIA博途一侧的具体组态配置,具体内容可参考以下链接中的内容: C#上位机基础学习_基于SOCKET实现与PLC服务…

【ROS】—— 机器人系统仿真 —URDF优化_xacro (十四)

文章目录前言1. URDF优化_xacro2. Xacro_快速体验3. Xacro_语法详解3.1 属性与算数运算3.2 宏3.3 文件包含4. Xacro_完整使用流程示例4.1 编写 Xacro 文件4.2 集成launch文件5. Xacro_实操前言 📢本系列将依托赵虚左老师的ROS课程,写下自己的一些心得与笔…

SpringBoot自动配置原理

1、自动配置原理 1、我们编写的SpringBoot启动类上有一个SpringBootApplication注解,表示当前类是springboot的启动类(入口类)。 package com.baidou;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBo…

微信小程序2.9.0基础库canvas2D新API,生成海报保存到手机功能实现

canvasToTempFilePath的官方文档写着在 draw()回调里调用该方法才能保证图片导出成功。文档地址:wx.canvasToTempFilePath(Object object, Object this) | 微信开放文档 我在这里面使用的canva 获取canvas实例,使用的官方的代码。用一个变量canvas保存实…

聊聊 AI 平台存储方案和选型

最近火爆全网的 ChatGPT 再次带来一股 AI 热潮。 过去的五年,AI 快速发展并应用到很多领域中。作为一家存储企业,我们也感受到了 AI 行业的活力,和我们交流团队中,AI 企业越来越多,有自动驾驶、蛋白质结构预测、量化投…

【HTML】【消失的花木兰】花木兰:三兔蹦迪走,安能辨我是兔子?

前言 (改编)  某日,参军后的花木兰刚回到家乡,却不料遇上抓拿自己的官兵… 因此,花木兰变成兔子躲了起来,你能否找到躲起来的花木兰呢?一起来拭目以待… 一、游戏名称与游戏规则&#xff08…