当前位置: 首页 > news >正文

Linux网络驱动之Fixed-Link(35)

接前一篇文章:Linux网络驱动之Fixed-Link(34)

本文内容参考:

RK3588+TRL8367s 四网口千兆交换机配置与性能优化实战-CSDN博客

嵌入式Linux驱动开发指南 —— 设备树语法与编译工具 —— 读懂这张“藏宝图“(3)-CSDN博客

特此致谢!

上一回开始对瑞芯微RK3588 SDK的dts文件和全志T113 SDK的dts文件中涉及到RTL8367交换机芯片的内容进行详细解析。先讲解RK3588的dts文件,没有讲完,本回继续。

  • RK3588的dts
// 这是假设你的RK3588 GMAC0控制器对应的MDIO总线节点是 &mdio0 &mdio0 { status = "okay"; // 删除可能自动生成的PHY节点,因为我们接的是交换机,不是直接PHY /delete-node/ phy@0; // 定义我们的交换机节点 switch: switch@0 { compatible = "realtek,rtl8367s"; // 驱动匹配的关键字 reg = <0>; // 在MDIO总线上的地址,通常是0 reset-gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>; // 复位引脚,低电平有效 // ldo-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_HIGH>; // 如果芯片有外部LDO控制,则启用 realtek,disable-leds; // 可选,禁用交换机的LED指示,如果硬件没接LED可以加上避免报错 // DSA相关,表明这是交换机成员 dsa,member = <0 0>; // 中断控制器(可选但推荐) switch_intc: interrupt-controller { interrupt-parent = <&gpio3>; interrupts = <16 IRQ_TYPE_LEVEL_LOW>; // 连接的中断GPIO interrupt-controller; #interrupt-cells = <1>; }; // 端口定义:这是核心! ports { #address-cells = <1>; #size-cells = <0>; // 定义连接到内部PHY的4个LAN口 port@1 { reg = <1>; // 端口号,对应芯片物理端口 label = "lan1"; // 系统内显示的接口名,如 sw0p1 phy-handle = <&phy1>; // 指向下面MDIO总线定义的PHY // interrupt-parent = <&switch_intc>; // 如果需要端口中断则关联 // interrupts = <1>; }; port@2 { reg = <2>; label = "lan2"; phy-handle = <&phy2>; }; port@3 { reg = <3>; label = "lan3"; phy-handle = <&phy3>; }; port@4 { reg = <4>; label = "lan4"; phy-handle = <&phy4>; }; // 定义CPU口,连接RK3588的GMAC port@6 { // 注意:RTL8367S的扩展口1通常映射为端口6 reg = <6>; label = "cpu"; ethernet = <&gmac0>; // 指向RK3588的以太网控制器节点 phy-mode = "rgmii"; // 连接模式,必须与硬件一致 fixed-link { // 因为直连MAC,所以是固定链接,无需协商 speed = <1000>; // 强制千兆,也可设为<100>测试 full-duplex; pause; // 启用流控,推荐 }; }; }; // 定义交换机内部的MDIO总线,用于管理其内部的PHY mdio { compatible = "realtek,smi-mdio"; #address-cells = <1>; #size-cells = <0>; phy1: phy@1 { reg = <1>; // 可以关联中断 interrupt-parent = <&switch_intc>; interrupts = <1>; }; phy2: phy@2 { reg = <2>; interrupt-parent = <&switch_intc>; interrupts = <2>; }; phy3: phy@3 { reg = <3>; interrupt-parent = <&switch_intc>; interrupts = <3>; }; phy4: phy@4 { reg = <4>; interrupt-parent = <&switch_intc>; interrupts = <4>; }; }; }; };

10)第10段

// DSA相关,表明这是交换机成员 dsa,member = <0 0>;

DSA多交换机级联标识,格式如下:

dsa,member = <switch-id device-id>;

单交换机场景固定为<0 0>,告诉内核DSA子系统这是第0组、第0台交换机。

DSA的全称是Distributed Switch Architecture,中文译为分布式交换机架构。DSA的目标是让连接到交换机芯片上的每一个物理端口,在Linux系统中都能像一个独立的、标准的网络接口(比如LAN0、LAN1、WAN)那样被识别、配置和管理,同时又能充分利用交换机芯片的硬件转发能力,让数据包在端口间“直通”,无需CPU干预。

11)第11段

// 中断控制器(可选但推荐) switch_intc: interrupt-controller { …… };

在设备树语法中,节点的命名格式通常如下:

node-name@unit-address
  • node-name:节点名字,ASCII字符串,比如uart1i2c0
  • unit-address:设备的寄存器首地址,可省略。

在实际文件中,经常看到带标签的写法,比如:

cpu0: cpu@0 intc: interrupt-controller@00a01000

格式是:label: node-name@unit-address。冒号前面的cpu0intc节点标签,方便后面通过&label引用,不用每次敲那长长的一串名字。

这里的switch_intc就是标签,代表冒号后边的interrupt-controller(省略首地址)。

// 中断控制器(可选但推荐) switch_intc: interrupt-controller { interrupt-parent = <&gpio3>; interrupts = <16 IRQ_TYPE_LEVEL_LOW>; // 连接的中断GPIO interrupt-controller; #interrupt-cells = <1>; };

12)第12段

interrupt-parent = <&gpio3>;

interrupt-parent是Linux设备树中用来指定设备的中断信号连接到哪个中断控制器的属性‌,简单说就是告诉系统"这个设备的中断要交给谁来处理"。‌‌‌

这里,指定设备的中断信号(Switch的INT引脚)连接到RK3588的GPIO3。

13)第13段

interrupts = <16 IRQ_TYPE_LEVEL_LOW>; // 连接的中断GPIO

在Linux设备树(DTS)语法中,interrupts属性用于描述硬件外设的中断请求信号,其具体格式和含义由所连接的‌中断控制器‌决定。

这里,指定连接的中断GPIO为PC16,低电平触发。

14)第14段

interrupt-controller;

在 Linux 设备树(DTS)中,interrupt-controller是一个‌空属性‌,用于声明某个节点为‌中断控制器‌,使其能够接收、管理和路由来自其它外设的中断信号 。‌‌

15)第15段

#interrupt-cells = <1>;

Linux设备树(DTS)中‌,#interrupt-cells中断控制器节点‌的必选属性,用于声明引用该控制器时,子节点在interrupts属性中描述一个中断源需要占用多少个32位单元(cell)‌。‌‌

更多内容请看下回。

http://www.jsqmd.com/news/1060023/

相关文章:

  • 干货指南:中量泰和计量团队实力怎么样,价格贵吗? - 工业推荐榜
  • Deepseek V4架构解析:MoE与昇腾NPU协同实现推理效率跃迁
  • 本地AI部署失败根因:CUDA驱动与PyTorch版本兼容性详解
  • Ubuntu 18.04下用APT安装PostgreSQL实战指南
  • Nmap端口扫描原理与实战:从主机发现到服务识别
  • 微信聊天记录永久备份终极指南:WeChatExporter完全使用教程
  • 快速找回遗忘压缩包密码的终极免费工具:3分钟破解加密文件指南
  • 无服务器架构性能演进:从容器化到边缘计算的实战对比与调优
  • JSCPC2026划水记
  • Kali Linux渗透测试实战:从工具解析到完整攻击链实现
  • OpenClaw:可编程AI工作流中枢与大模型配置架构指南
  • React Wrapper组件:逻辑边界封装与高阶复用实践
  • BallonTranslator:5分钟完成漫画翻译的终极AI工具完整指南
  • 停车位划线施工,辽宁拜而口碑怎么样? - mypinpai
  • 2026公众号排版素材大全:这5款新手编辑器必看|实测推荐 - 椰子椰子水
  • 从零实现DES加密算法:Feistel网络与C语言实战详解
  • SQL注入攻防实战:从手工注入到sqlmap自动化利用
  • AI对话平台5大核心故障诊断与系统优化完全指南
  • 电机控制系统5V到3.3V迁移:接口与电源设计实战指南
  • 郑州猎头公司名单推荐!推荐南方新华猎头公司(联系电话19922876369) - 榜单推荐
  • Steam游戏自动破解器:让正版游戏真正属于你的3步解决方案
  • 性价比高的集中供料系统,靠谱厂家选购指南 - 工业品牌热点
  • Qwen3.7-Max登顶Arena:自主编程能力与工程落地真相
  • Appium Desktop 1.13:移动自动化测试的图形化利器与避坑指南
  • 停车位划线如何选择?辽宁拜而工艺规范,口碑出众 - mypinpai
  • AI Agent性能测试框架:三层模型设计与工程实践
  • 大模型本地部署的三层结构:平台、代码、权重
  • Java面试全流程解析:从简历筛选到Offer谈判
  • Gemini 3.1 Pro:可编程逻辑引擎与可审计AI工作流
  • Linux 内核漏洞预警机制的缺失:当“静默修补”成为发行版的噩梦