【黑金云课堂】FPGA技术教程Linux开发:GPIO 编程/寄存器读写/以太网RJ45

Linux应用第10-12节 GPIO 编程/寄存器读写/以太网RJ45 ,选自ALINX 黑金云课堂 FPGA 免费直播课。该课程由 ALINX 资深工程师团队倾力打造,从 0 到 1 系统化教学,帮助每位工程师跨过 FPGA 开发门槛。


GPIO 概念与分类

概念

GPIO ------ General Purpose Input/Output 通用输入输出

  • 区别于串口、SPI、IIC这些专用引脚,没有内置传输协议

  • 数字信号只有高电平(1)、低电平(0)两种状态

ZYNQ 平台上 GPIO 的种类

命令行控制 GPIO

  • sysfs 方式:通过 /sys/class/gpio/ 的 export/direction/value 节点操作,已标记为 deprecated
  • libgpiod 方式:使用 gpiodetectgpiosetgpiogetgpioinfo 等命令,是推荐的新一代接口

C 语言控制 GPIO

  • libgpiod C API:通过 gpiod_chipgpiod_line 等结构体编程(gpio_libgpiod_demo.c,编译需链接 -lgpiod

寄存器读写

寄存器访问原理

  • Linux 虚拟内存机制阻止用户程序直接访问物理地址。通过 /dev/mem 设备文件和 mmap() 将物理地址映射到用户空间虚拟地址
  • 物理地址必须页对齐(4KB)
  • 需要 root 权限
  • O_SYNC 标志确保写操作直达硬件而不经过缓存

💡原理具体讲解可前往 ALINX 视频号进行直播回看。

❓为什么要在应用层访问寄存器

------ 更加方便

❓操作 /dev/mem 读写寄存器的代价?

  • 没有保护机制,写入错误的地址可能导致系统立即崩溃,多个进程同时访问同一寄存器可能导致资源冲突混乱
  • 速度慢效率低
  • 可移植性很差
  • 写入错误的值可能导致外设异常甚至硬件损坏

仅在调试阶段使用 操作时务必确认地址和值的正确性!!!

devmem 命令行工具

  • 作用

快速读写物理寄存器,适合硬件调试

  • 语法

devmem ADDRESS [WIDTH [VALUE]]

ADDRESS---物理地址;

WIDTH---访问宽度:8/16/32/64/128 位,默认32位;

VALUE---要写入的值,省略则执行读取

复制代码
devmem 0xFF0A0248 # 读取寄存器32位
devmem 0xFF0A0248 8  # 读取8位寄存器
devmem 0xFF0A0248 32 0x00004820 # 向寄存器写入32位值

C 语言 mmap 映射

  • 核心流程:open(/dev/mem) → 计算页对齐地址 → mmap 映射 → volatile 指针读写 → munmap 释放
  • 关键要点:volatile 防止编译器优化、O_SYNC 保证直写硬件、完善的错误处理

以太网 RJ45

网络配置

  • 常用命令:ifconfig/ip addr 配置 IP、route/ip route 配置网关、ethtool 查看链路状态、ping 测试连通性
  • 可选:MDIO 配置 PHY 寄存器(速率、双工模式等)

iperf3 测速

  • 测试 TCP/UDP 网络吞吐量
  • TCP 测试反映最大可靠带宽;UDP 测试额外观察丢包率和抖动
  • 服务端:iperf3 -s
  • 客户端:iperf3 -c <IP> -t 30

Socket 编程

  • TCP 服务端:socketbindlistenacceptrecv/sendclose
  • TCP 客户端:socketconnectsend/recvclose
  • UDP:使用 sendto/recvfrom,无需连接
  • 关键 API:sockaddr_inhtonsinet_ptoninet_ntop

更多细节欢迎关注我们黑金云课堂全年免费直播课黑金云课堂五月直播日历 我们将在每周二、三、四,同步推进 Verilog开发、Vitis开发、Linux开发三大系列,带你从零开始,稳扎稳打掌握 FPGA 开发全流程!

系列 内容定位
Verilog开发 硬件描述语言基础、逻辑设计、仿真调试
Vitis开发 Zynq软硬件协同、外设驱动、网络协议栈
Linux开发 嵌入式Linux系统移植、驱动编写、应用开发
相关推荐
坏孩子的诺亚方舟17 小时前
FPGA神经网络数学基础0
人工智能·神经网络·线性代数·fpga开发
熠速17 小时前
PolarBox高性能实时仿真系统
arm开发·fpga开发·嵌入式实时数据库·硬件在环半实物仿真
南檐巷上学18 小时前
基于Zynq-7020的带有正弦波发生器的8051软核设计
单片机·嵌入式硬件·fpga开发·fpga
思尔芯S2C18 小时前
FPGA原型验证中的内存模型应用:基于DDR5的Linux系统启动与测试
fpga开发·内存模型·ddr4·ddr5·memory model·hbm3·prototyping
hai3152475431 天前
RISC-V CVA6 AXI适配器+DMA桥蜂鸟E203处理器的总线接口单元(BIU)仲裁器
驱动开发·fpga开发·硬件架构·硬件工程·精益工程
高速上的乌龟1 天前
Lattice LFCPNX-100 HSB+Fpga开发详解:2.3 Hololink 顶层模块深度全解析
linux·fpga开发
ALINX技术博客1 天前
【FPGA 开发教程】基于 ALINX FPGA 开发板实现 USB3.2 高速通信(Z7-P+FL2010)
fpga开发·fpga·fmc子卡·usb3.2通信
Ricky05532 天前
搭载实时 FPGA 处理系统的航天器上用于海上监视的超分辨率YOLO目标检测技术(意大利2026年研究)
yolo·目标检测·fpga开发
kaizq2 天前
在线设计模仿平台StepFPGA应用实践
fpga开发·verilog编程·在线设计仿真·小脚丫stepfpga·图形化设计·risc-v_soc·ima-copilot-ds
cjie2212 天前
图像缩放需要哪些参数和端口
计算机视觉·fpga开发