VMWare Player+Fedroa24 部署DPDK运行报错问题解决方法

本文介绍了解决 DPDK 16.11 版本中 helloworld 示例持续输出错误信息的问题。通过修改 igb_uio.c 中的 pci_intx_mask_supported 函数调用,使程序能够正常启动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dpdk-16.11 运行 helloworld,持续输出报错信息:

EAL: Error reading from file descriptor 23: Input/output error

EAL: Error reading from file descriptor 23: Input/output error

EAL: Error reading from file descriptor 23: Input/output error

EAL: Error reading from file descriptor 23: Input/output error

EAL: Error reading from file descriptor 23: Input/output error

EAL: Error reading from file descriptor 23: Input/output error

EAL: Error reading from file descriptor 23: Input/output error

EAL: Error reading from file descriptor 23: Input/output error

EAL: Error reading from file descriptor 23: Input/output error

...

网上找到的解决办法

详见:http://blog.youkuaiyun.com/bestboyxie/article/details/52694596

简述:

修改代码行

lib/librte_eal/linuxapp/igb_uio/igb_uio.c

找到

pci_intx_mask_supported(dev)

这行代码

然后修改为

pci_intx_mask_supported(dev)||true


修改后可以正常启动但根因待确认,不确认修改后是否会产生其他问题



<think>好的,用户现在想在Fedora下开发PLC,我需要仔细分析他的需求。首先,用户之前询问过SDCC,这是一个用于嵌入式开发的编译器,可能他现在想转向工业控制领域,比如PLC编程。PLC通常使用梯形图或特定语言,如ST(结构化文本),但Fedora作为Linux发行版,可能没有直接支持传统PLC开发的工具。 首先,我需要明确PLC开发在Linux下的可能性。传统上,PLC开发环境如西门子的TIA Portal或罗克韦尔的Studio 5000都是Windows专属,但用户可能是在寻找开源或跨平台解决方案。可能他是指软PLC,比如基于IEC 61131-3标准的开源实现,如Beremiz或OpenPLC。 接下来,用户提到Fedora,所以需要检查这些工具是否支持Fedora。Beremiz和OpenPLC都支持Linux,但可能需要安装依赖库。需要指导用户如何安装这些工具,比如通过包管理器或源码编译。 另外,用户可能对软PLC的运行时环境感兴趣,比如使用MatPLC或OpenPLC Runtime。需要解释如何配置这些环境,以及如何与硬件通信,比如通过Modbus、EtherCAT等协议。 还需要考虑硬件连接的问题。用户可能需要使用特定的通信模块或适配器,比如USB转串口、EtherCAT主站等。需要推荐Fedora下支持的硬件和驱动安装方法,例如使用libusb或安装专门的驱动程序。 此外,用户可能需要编写控制逻辑,使用ST或梯形图,但开源工具可能更倾向于ST或指令列表(IL)。需要提供示例代码,比如一个简单的Beremiz项目,并说明如何编译下载到目标设备,如果目标设备是软PLC的话。 用户可能遇到的挑战包括工具链的配置、实时性要求的满足(Fedora默认不是实时系统,可能需要RT内核)、硬件兼容性等。需要提醒用户这些潜在问题,并提供解决方案,如安装RT内核或使用专用硬件。 最后,总结在Fedora下开发PLC的可行性和步骤,确保用户有清晰的路线图。可能需要分步骤说明安装工具、配置环境、编写程序、连接硬件和测试流程。</think>以下是关于在 **Fedora 系统下开发 PLC(可编程逻辑控制器)** 的详细指南,涵盖工具链、开发框架、硬件连接及核心步骤。由于 PLC 开发通常依赖特定厂商的闭源工具,本文重点聚焦 **开源解决方案** 和 **软 PLC(SoftPLC)** 实现。 --- ### **1. 核心概念:PLC 开发与开源工具** - **传统 PLC 开发**:依赖厂商专用软件(如西门子 TIA Portal、罗克韦尔 Studio 5000),**仅支持 Windows**。 - **开源替代方案**: - **软 PLC**:基于 IEC 61131-3 标准,在通用操作系统(如 Linux)上运行 PLC 逻辑。 - **常见框架**: - **Beremiz**(支持 ST、梯形图) - **OpenPLC**(支持 Modbus、CAN 通信) - **MatPLC**(模块化设计) --- ### **2. Fedora 下的开发环境搭建** #### **(1) 安装依赖库** ```bash sudo dnf install python3 git gcc glibc-devel automake libtool ``` #### **(2) 安装 Beremiz(IEC 61131-3 开发环境)** ```bash # 安装运行时依赖 sudo dnf install python3-pyqt5 python3-lxml python3-serial # 克隆仓库并安装 git clone https://github.com/beremiz/beremiz.git cd beremiz sudo python3 setup.py install ``` #### **(3) 安装 OpenPLC Runtime** ```bash git clone https://github.com/thiagoralves/OpenPLC_v3.git cd OpenPLC_v3 ./install.sh linux ``` --- ### **3. 开发流程与示例** #### **(1) 使用 Beremiz 编写逻辑** 1. **创建项目**: - 打开 Beremiz,选择 **“File → New Project”**。 - 定义变量(如 `Input1`, `Output1`)并编写 **结构化文本(ST)** 代码: ```iecst PROGRAM Main VAR Input1: BOOL; Output1: BOOL; END_VAR Output1 := Input1; // 简单直连逻辑 END_PROGRAM ``` 2. **编译与部署**: - 通过 **“Build → Generate Code”** 生成 C 代码。 - 导出为共享库(`.so` 文件)并加载到软 PLC 运行时(如 MatPLC)。 #### **(2) 硬件连接(以 Modbus TCP 为例)** 1. **配置 OpenPLC 作为 Modbus 从站**: - 编辑 `OpenPLC_v3/webserver/st_files/modbus_slave.st`,定义寄存器映射。 - 启动 OpenPLC 服务: ```bash ./start_openplc.sh ``` 2. **通过 Python 脚本读写数据**: ```python from pymodbus.client import ModbusTcpClient client = ModbusTcpClient('127.0.0.1', port=502) client.write_coil(0, True) # 写入线圈(开关量) response = client.read_coils(0, 1) # 读取状态 print(response.bits[0]) ``` --- ### **4. 实时性优化(针对软 PLC)** 软 PLC 需依赖 Linux 实时内核以提升控制周期精度: #### **(1) 安装 RT 内核** ```bash sudo dnf install kernel-rt sudo grub2-set-default 0 # 设置为默认启动项 sudo reboot ``` #### **(2) 验证实时性** ```bash sudo cyclictest -t1 -p80 -n -i 1000 -l 10000 # 输出最大延迟应低于 50μs(理想工业场景) ``` --- ### **5. 硬件兼容性解决方案** #### **(1) 支持的总线协议** | **协议** | **Fedora 工具** | **用途** | |----------|-------------------------------|------------------------| | Modbus | `libmodbus` | 传统设备通信 | | CAN | `can-utils`, `SocketCAN` | 工业现场总线 | | EtherCAT | `IgH EtherCAT Master`(需编译)| 高性能实时控制 | #### **(2) CAN 总线配置示例** ```bash # 加载 CAN 模块 sudo modprobe can sudo modprobe can_raw sudo ip link set can0 type can bitrate 500000 sudo ip link set up can0 # 测试收发(需两个终端) cansend can0 123#DEADBEEF # 终端1发送 candump can0 # 终端2接收 ``` --- ### **6. 开发注意事项** - **实时性限制**:软 PLC 的循环周期通常为 1~10 ms,**不适用于超高速控制**(如伺服电机)。 - **硬件驱动**:部分工业接口卡(如 PCIe 数字 I/O 卡)需自行编译内核模块。 - **调试工具**: - 使用 `Wireshark` 分析 Modbus/CAN 通信。 - 通过 `GDB` 调试 PLC 运行时进程。 --- ### **7. 开源工具链总结** | **工具** | **用途** | **安装方式** | |---------------|------------------------------|------------------------| | Beremiz | IEC 61131-3 编程环境 | 源码编译 | | OpenPLC | 软 PLC 运行时与 Web 配置 | Git 仓库 + 脚本安装 | | IgH EtherCAT | EtherCAT 主站实现 | 手动编译 | | Node-RED | 可视化逻辑编排(可选) | `sudo dnf install node-red` | --- ### **附:开发流程图解** 1. **逻辑设计**(Beremiz) → 2. **编译为 C 代码** → 3. **加载到 OpenPLC 运行时** → 4. **硬件通信配置** → 5. **联调测试** --- 通过上述步骤,你可以在 Fedora 下实现基本的 PLC 逻辑开发与硬件控制。对于复杂场景,建议结合实时内核、专用通信协议栈及工业级硬件模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值