Intel X710/XL710 网卡数据手册实战:从寄存器到驱动开发与调优
简介Intel Ethernet Controller X710/XXV710/XL710 数据手册面向数据中心、云计算与企业网络领域的硬件工程师、网络架构师及驱动开发者用于查阅控制器规格、寄存器定义与功能实现细节。资源包共1个PDF文件大小约18.07MB内容为官方发布的完整数据表涵盖多速率以太网标准支持、PCIe Gen3接口、硬件虚拟化与TCP/IP卸载、RSS与QoS机制、节能技术及驱动兼容性等核心章节并附有寄存器映射与电气参数说明。该版本为Order No. 332464-025 Revision 4.0发布于2022年2月技术规格较新。目前已有564人学习下载适合需要深入理解控制器底层行为、进行驱动适配或硬件选型评估的读者参考可帮助快速定位关键参数与设计约束。1. 拿到一份 400 多页的网卡数据手册怎么把它变成能跑的东西很多人拿到 Intel X710/XXV710/XL710 的 datasheet 第一反应是“这玩意儿跟我写代码有什么关系”。我一开始也这么想直到有一次要在某实验室的服务器上排查一个 40GbE 链路反复 up/down 的问题驱动日志里全是寄存器状态和 NVM 版本号翻遍内核源码也找不到对应位域的定义最后是靠这份数据手册里的寄存器映射表才定位到是 PHY 配置命令的某个字段被写错了。从那以后我就养成了一个习惯凡是碰 X710 系列网卡手边一定留一份 datasheet 的本地副本。这份文档覆盖的是 X710、XXV710、XL710 三款控制器速率从 10GbE 到 40GbE接口形态包括 SFP 和 QSFP走 PCIe Gen3 通道。它面向的是需要在数据中心、企业网络或虚拟化环境里做底层网络调优、驱动二次开发、固件定制的开发者。如果你只是插上网卡跑个 iperf 测带宽那确实用不上但一旦涉及 RSS 队列调优、SR-IOV 虚拟功能分配、LLDP 代理配置、NVM 固件更新这份手册就是绕不开的参考。2. 先搞清楚这份文档到底给了什么从目录结构到寄存器地图2.1 文档的组织逻辑与查阅路径这份 datasheet 不是那种从头读到尾的技术书它的组织方式更像一张分层的地图。最前面是修订历史和法务声明这部分基本可以跳过但修订历史值得扫一眼——比如 Revision 4.0 在 2022 年 2 月把“IEEE802.3”统一改成了“IEEE Std. 802.3-2018”说明这一版对齐了较新的标准文本。如果你在对照旧版驱动代码这个改动会影响你对注释里标准引用的理解。主体内容大致分几块第 1 章是产品概述和功能特性第 2 章讲封装和引脚第 3 章是重头戏——寄存器描述和命令接口第 6 章是 NVM 映射第 7 章是管理接口和 LLDP 相关命令第 9 章涉及 NC-SI 和共享参数第 10 章是设备寄存器详表第 11 章包含序列号等只读寄存器。实际开发中最常翻的是第 3 章和第 10 章。第 3 章里的“Set PHY config command data structure”和“Set MAC Config command data structure”定义了通过管理接口配置物理层和 MAC 层的命令格式第 10 章的寄存器表则直接对应驱动代码里的宏定义。我一般会把这两章单独打印出来因为调试的时候来回翻 PDF 太费劲。2.2 核心寄存器与命令接口的对应关系数据手册里定义的寄存器地址和位域在 Linux 驱动源码里通常以宏或结构体位域的形式出现。举个例子GL_MNG_FWSM0x000B6134这个固件信号量寄存器在驱动里用来判断管理固件是否持有信号量。手册里标注它是只读RO位域定义决定了驱动能不能安全地读取固件状态。再比如“Set MAC Config”命令手册里给出了完整的命令数据结构包括命令操作码、目标 MAC 索引、配置位掩码等字段。驱动在初始化网卡时会构造这个结构体通过管理接口发送给固件。如果你在改驱动时发现 MAC 地址过滤不生效大概率是这个结构体里某个位没设对。/* 根据 datasheet 第 3 章 Set MAC Config 命令结构整理的示意代码 */ struct set_mac_config_cmd { __le16 opcode; /* 命令操作码手册中定义 */ __le16 mac_index; /* MAC 索引0 表示主 MAC */ __le32 config_bits; /* 配置位掩码控制接收/发送使能等 */ u8 mac_addr[6]; /* MAC 地址 */ u8 reserved[2]; } __packed; /* 发送命令前需要填充结构体并通过管理队列提交 */ static int issue_set_mac_config(struct adapter *adapter, u16 index, const u8 *addr, u32 bits) { struct set_mac_config_cmd cmd {0}; cmd.opcode cpu_to_le16(0x0103); /* 操作码以手册为准 */ cmd.mac_index cpu_to_le16(index); cmd.config_bits cpu_to_le32(bits); memcpy(cmd.mac_addr, addr, 6); return send_admin_cmd(adapter, cmd, sizeof(cmd)); }上面这段代码的关键在于opcode和config_bits的取值必须和手册里的定义严格一致。mac_index决定了你操作的是哪个 MAC 实例X710 系列支持多个 MAC索引错了就会配到别的端口上。send_admin_cmd是驱动里负责把命令写入管理队列并等待固件响应的函数实际实现中还要处理超时和重试。2.3 NVM 映射与固件更新流程第 6 章的 NVM 映射表是固件定制的入口。NVM 里存了 MAC 地址、PHY 配置、LLDP 配置、EMP 设置等模块每个模块有固定的偏移和长度。手册里给出了 NVM 头部映射和各个模块的摘要表比如“EMP SR settings module header section summary table”和“PHY capability data structure 0 section summary table”。做固件更新时驱动会先读取 NVM 头部确认当前版本然后按模块写入新数据最后触发校验和重载。手册里提到的“Rollback Revision Update”机制允许在更新失败时回滚到上一个版本这个功能在批量部署时特别有用——你总不想因为一次固件刷写失败就让整台服务器失联。# 常见的 NVM 更新工具调用方式以 ethtool 为例 ethtool -f eth0 flash.bin # 更新前先确认当前 NVM 版本 ethtool -i eth0 | grep firmware-version # 更新后重新加载驱动使新固件生效 modprobe -r i40e modprobe i40e这里用到的ethtool -f是标准做法但前提是驱动支持 NVM 更新接口。X710 系列在 Linux 下通常由 i40e 驱动管理更新过程中网卡会短暂下线所以生产环境里要配合冗余链路操作。手册里还提到了“Reprogramming an authenticated module mapped outside shadow RAM”这种更底层的操作一般只在恢复变砖设备时才会用到。3. 把手册变成可运行的驱动从 PCIe 枚举到数据包收发3.1 PCIe 设备识别与驱动绑定X710 系列在 PCIe 配置空间里有固定的厂商 ID 和设备 ID。Linux 内核通过lspci就能看到设备驱动通过pci_device_id表匹配后绑定。手册第 2 章的封装和引脚信息虽然不直接参与驱动开发但如果你要自己画板子或者做硬件调试这部分定义了 PCIe 通道的电气特性和引脚复用关系。# 查看网卡是否被正确识别 lspci -nn | grep -i ethernet # 输出示例03:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP [8086:1572] # 查看驱动绑定情况 lspci -k -s 03:00.08086:1572这样的 ID 对就是驱动匹配的依据。如果lspci能看到设备但ip link里没有对应网口通常是驱动没加载或者固件版本不匹配。手册里提到的“Protect, Detect and Recover”机制就是针对这种情况——固件在检测到异常后会尝试恢复驱动侧则通过读取固件信号量寄存器来判断恢复状态。3.2 管理队列与命令交互X710 系列的所有配置操作都通过管理队列Admin Queue完成。驱动初始化时会分配管理队列的内存把基地址写入寄存器然后使能队列。之后发送命令就是往队列里写描述符固件处理完后通过中断通知驱动。手册第 3 章详细定义了各种管理命令的格式包括“NVM access admin commands”、“NVM update admin command”等。每条命令都有对应的响应格式驱动需要解析响应来判断命令是否成功。比如“NVM update completion (on ARQ)”就是固件在 NVM 更新完成后通过异步事件队列上报的完成通知。/* 管理队列描述符的简化结构实际定义更复杂 */ struct admin_queue_desc { __le64 cmd_addr; /* 命令缓冲区物理地址 */ __le32 cmd_len; /* 命令长度 */ __le32 flags; /* 标志位如最后一条命令等 */ }; /* 提交命令后等待响应的典型流程 */ static int wait_for_admin_response(struct adapter *adapter, int timeout_ms) { unsigned long timeout jiffies msecs_to_jiffies(timeout_ms); while (time_before(jiffies, timeout)) { if (adapter-admin_pending 0) return 0; /* 固件已处理完 */ msleep(1); } return -ETIMEDOUT; }这里的timeout_ms要根据具体命令调整。NVM 更新这种耗时操作可能需要几秒甚至几十秒而读取寄存器状态通常几毫秒就够。超时设置太短会导致误判失败太长则会在固件异常时卡住驱动初始化。3.3 中断处理与数据包收发路径数据包收发走的是另一套队列——发送队列和接收队列。驱动为每个队列分配描述符环网卡通过 DMA 读写数据包。手册第 10 章的“Interrupt on Misbehavior of VM”提到了针对虚拟机异常行为的检测机制这是 SR-IOV 场景下的重要特性当某个虚拟功能疯狂发包或试图越权访问时硬件会触发中断通知驱动。/* 接收中断处理的核心逻辑示意 */ static irqreturn_t msix_rx_handler(int irq, void *data) { struct rx_ring *ring data; /* 读取中断原因寄存器手册第 10 章有定义 */ u32 cause readl(ring-adapter-hw_addr INT_CAUSE_REG); if (cause RX_CAUSE_MASK) { /* 处理接收描述符回收缓冲区 */ process_rx_descriptors(ring); /* 重新使能中断 */ writel(RX_CAUSE_MASK, ring-adapter-hw_addr INT_CAUSE_REG); } return IRQ_HANDLED; }中断寄存器的地址和位定义直接来自手册第 10 章。RX_CAUSE_MASK这样的宏在驱动头文件里定义值必须和手册一致。如果中断处理里忘了重新使能中断网卡收几个包后就会“哑掉”——这是新手改驱动时最容易翻车的地方之一。4. 避坑与排查那些手册上没写但一定会遇到的问题4.1 链路起不来先查 PHY 配置和模块类型现象网卡识别正常但ethtool eth0显示 Link detected: no换模块换线都不管用。原因X710 系列支持多种 PHY 模块手册第 3 章里“25 GbE SFP LESM Valid States per Module Type”定义了不同模块类型对应的合法状态。如果 NVM 里配置的模块类型和实际插入的模块不匹配PHY 就不会进入正常工作状态。解决先确认模块类型然后检查 NVM 里的 PHY 配置模块。手册里“Set PHY config command data structure”给出了配置命令格式可以通过管理接口重新下发。如果手头有厂商提供的配置工具直接用它读取当前 PHY 状态更省事。4.2 RSS 队列不生效检查固件版本和队列分配现象多队列网卡只用一个 CPU 核心收包mpstat -P ALL看到只有一个核的软中断很高。原因RSS 需要固件和驱动配合。手册第 1 章提到的“RSSReceive Side Scaling”是硬件特性但前提是固件版本支持并且驱动正确配置了哈希键和队列映射。旧版固件可能不支持某些哈希类型。解决用ethtool -x eth0查看当前 RSS 配置ethtool -X eth0可以调整队列分配。如果固件太旧参考手册第 6 章的 NVM 映射找到 RSS 配置模块更新固件后再试。注意更新固件前备份当前 NVM 内容手册里的“Rollback Revision Update”就是为这种情况准备的。4.3 SR-IOV 虚拟功能分配失败查 PCIe 配置空间现象echo 4 /sys/class/net/eth0/device/sriov_numvfs报错或者虚拟功能创建了但虚拟机里看不到网卡。原因SR-IOV 需要 BIOS 里开启 VT-d 和 SR-IOV 支持同时手册第 7 章提到的“Interrupt on Misbehavior of VM”机制要求固件正确配置虚拟功能到物理功能的映射。如果 BIOS 里 PCIe 的 ACS 设置不对虚拟功能之间会互相干扰。解决先在 BIOS 里确认 VT-d 和 SR-IOV 已启用然后检查dmesg里有没有 IOMMU 相关的报错。手册第 10 章的“MAC Link Status Register”和“MAC Control Register”可以用来确认物理功能的状态。如果虚拟功能创建了但链路不通检查虚拟功能对应的 MAC 配置是否被正确初始化。4.4 LLDP 代理配置丢失注意 NVM 写入时机现象配置好的 LLDP 邻居信息在重启后消失或者lldptool读不到对端信息。原因LLDP 配置存在 NVM 的特定模块里手册第 6 章的“LLDP configuration section summary table”定义了存储布局。如果在驱动还没完全初始化时就写入配置或者写入后没有触发 NVM 提交配置就只存在内存里重启即丢。解决参考手册第 7 章的“Start LLDP Agent Command”和“Stop LLDP Agent Command”确保在正确的时机启停代理。写入配置后调用“Restore LLDP Agent Factory Settings”可以恢复出厂设置但注意这会清掉所有自定义配置。我一般会在写入后立刻读回验证确认 NVM 里确实存进去了。4.5 固件信号量死锁看 GL_MNG_FWSM 寄存器现象驱动加载卡住dmesg里停在“waiting for firmware semaphore”之类的消息。原因手册第 10 章定义的 GL_MNG_FWSM0x000B6134是固件和管理驱动之间的信号量。如果固件异常没有释放信号量驱动就会一直等。这种情况在固件更新失败或异常断电后比较常见。解决先尝试重新加载驱动如果还是卡住可能需要通过外部工具强制复位固件。手册第 3 章的“Protect, Detect and Recover”机制描述了固件自恢复流程但有些情况下需要人工干预。最坏的情况是 NVM 损坏需要用编程器重新烧录——所以固件更新前一定要备份。5. 二次开发怎么改从寄存器位到驱动补丁的实操思路拿到这份手册做二次开发最常见的需求是定制 RSS 哈希策略、调整中断合并参数、或者给特定流量打优先级标签。这些改动最终都会落到寄存器位或管理命令上所以第一步永远是在手册里找到对应的寄存器或命令确认位域定义然后在驱动里找到操作这个寄存器的地方。以调整中断合并为例。手册第 10 章的设备寄存器表里有中断节流相关的寄存器驱动里通常通过ethtool -C暴露给用户。如果你想改默认值可以在驱动初始化代码里找到写这个寄存器的地方修改写入的值。但要注意有些寄存器在固件初始化时会被覆盖所以改驱动默认值的同时可能还需要改 NVM 里的配置模块。/* 中断合并参数调整的示意代码 */ static void configure_int_throttle(struct adapter *adapter, u16 rx_usecs, u16 tx_usecs) { u32 reg; /* 读取当前值手册第 10 章有寄存器地址和位定义 */ reg readl(adapter-hw_addr INT_THROTTLE_REG); /* 清除旧值设置新值 */ reg ~(RX_THROTTLE_MASK | TX_THROTTLE_MASK); reg | (rx_usecs RX_THROTTLE_SHIFT) RX_THROTTLE_MASK; reg | (tx_usecs TX_THROTTLE_SHIFT) TX_THROTTLE_MASK; writel(reg, adapter-hw_addr INT_THROTTLE_REG); }rx_usecs和tx_usecs的单位是微秒具体范围手册里会有说明。设得太小会导致中断过于频繁CPU 软中断开销上升设得太大则增加延迟。我一般会从默认值开始每次调整 10% 左右用perf top观察软中断占比和网络延迟的变化。另一个常见需求是定制 NVM 里的 MAC 地址分配。手册第 6 章的 NVM 头部映射表里MAC 地址存储模块有固定偏移。批量部署时你可以写一个脚本读取服务器序列号生成对应的 MAC 地址然后通过管理命令写入 NVM。注意 MAC 地址的格式和字节序——手册里通常用大端表示而 x86 是小端写代码时别忘了转换。验证改动是否生效最直接的方法是读回寄存器或 NVM 内容对比。驱动里可以用ethtool -d导出寄存器转储手册第 10 章的寄存器表就是解读转储的字典。如果改动涉及数据包处理路径用tcpdump抓包确认流量特征是否符合预期。我习惯在每次改动后跑一遍iperf3和ping -f确认吞吐和延迟没有退化。从那以后我每次改驱动涉及寄存器操作都强制走一遍“查手册确认位域 → 改代码 → 读回验证 → 压力测试”的流程少一步都可能埋雷。希望这些经验帮到你少走点弯路。本文还有配套的精品资源点击获取

相关新闻

packages.xml深度解析:嵌入式系统元数据语义还原指南

packages.xml深度解析:嵌入式系统元数据语义还原指南

1. 项目概述:为什么一份 packages.xml 文件值得花一整天去拆解?“packages.xml分析”——这五个字看起来平平无奇,像极了某次日常运维日志里随手记下的一个待办事项,又或是某次代码审计报告中被折叠在附录末尾的一行小字。但如果你…

2026/10/16 22:34:56 阅读更多 →
本地部署AI绘画环境:ComfyUI安装配置与实战指南

本地部署AI绘画环境:ComfyUI安装配置与实战指南

1. 项目概述与方案选型1.1 核心需求解析这几年AI出图工具一个接一个冒出来,在线网站确实方便,但用久了谁都逃不过那几个痛点:排队等半天、免费额度用光、生成内容受平台审核限制、想微调模型又没权限。更不用说一旦断网,手里一个能…

2026/10/16 22:34:56 阅读更多 →
Vivado避坑指南:约束文件、IP集成与仿真实现的隐性规则

Vivado避坑指南:约束文件、IP集成与仿真实现的隐性规则

1. 这不是教程汇编,而是一份“Vivado老手才敢写的避坑地图”你打开Vivado,新建一个工程,点几下向导,生成Block Design,跑个仿真——表面看一切顺利。但当你第一次把bitstream烧进板子,发现LED不亮、UART收不…

2026/10/16 22:34:56 阅读更多 →

最新新闻

ROS Melodic 离线安装方案:Ubuntu 18.04 下 rosdep 本地化与依赖处理

ROS Melodic 离线安装方案:Ubuntu 18.04 下 rosdep 本地化与依赖处理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 1:04:15 阅读更多 →
多段图最短路径:动态规划状态设计与Python实现

多段图最短路径:动态规划状态设计与Python实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 1:04:15 阅读更多 →
双串锂电池主动均衡方案:MP2642GR-Z与STM32G070RB实战

双串锂电池主动均衡方案:MP2642GR-Z与STM32G070RB实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 1:04:15 阅读更多 →
RabbitMQ分布式事务实战:本地消息表实现最终一致性

RabbitMQ分布式事务实战:本地消息表实现最终一致性

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 1:04:15 阅读更多 →
基于MP2642GR-Z与STM32F410RB的两串电池主动均衡方案设计与实现

基于MP2642GR-Z与STM32F410RB的两串电池主动均衡方案设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 1:04:15 阅读更多 →
基于MP2642GR-Z与MSP432的两串电芯被动均衡方案设计与实现

基于MP2642GR-Z与MSP432的两串电芯被动均衡方案设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 1:03:14 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →