我竟然在黑苹果上跑通了国产网卡 YT6801 的移植驱动
关键词:黑苹果 / Hackintosh / DriverKit / DEXT / Motorcomm YT6801 / 裕太微 / 以太网驱动 / macOS 26 Tahoe
项目地址:https://github.com/MiniYv/yt6801-for-macOS | 开发者:MiniYv(小禹)
注意:1.0.8及以下版本驱动在默认没有接入线缆的时候,有的时候DHCP存在问题,不确定是不是DHCP服务器本身问题,但网卡理论上来说修好且稳定了,因为我上学,时间比较紧。
写在前面
前阵子我刚把 RTX 50 系显卡在黑苹果上点亮,靠的是 nullmoth 那套社区驱动,当时是看b站up知阈前哨视频了解到的,折腾了两天两夜终于搞好了。在我这台蛟龙16Pro 潮玩青春版上跑起来真的不容易呀。当时以为声卡和WIFI蓝牙适配这事已经够折腾了。结果没多久,我又被另一件小事卡住。笔记本的有线网口在 macOS 下压根没被系统认出来。
原因真的很魔幻:这台机器用的不是 Realtek、不是 Intel,而是国产的 Motorcomm(裕太微)YT6801 千兆以太网控制器。
把这颗国产芯片在 macOS 上跑起来,网络上几乎没有任何先例。裕太微自己只发 Windows/Linux 版本,而且黑苹果社区对带 YT6801 的机器,标准答案一直是「换卡,或者插个 USB 网卡」。用AI全程辅助开发这个项目,运行成功了,但难以想象是全世界第一个真正意义上,让国产 PCIe 有线网卡在 macOS 上跑起来的开源方案。连我自己都觉得有点不真实。
于是我一咬牙,想把厂商 Linux 那套代码搬到苹果的 DriverKit 上。说“搬”都轻了。后来才发现,内核态和用户态之间隔着的,远不止一层 API。好在目前它确实跑起来了:1000M 满速、拔线自动识别、MAC 地址和 Windows 下一致。这篇文章写背景、痛点,以及我是怎么一步步填坑的。
一、背景:YT6801 是怎么进入笔记本的
这两年国产以太网芯片开始大规模上车,原因无非是成本和供应链:
- 裕太微的 YT6801 是大陆首款量产商用的消费级 PCIe 千兆单芯片网卡,把 MAC、PHY、OTP、PCIe 控制器全集成进一颗 32 针 QFN 封装,BOM 成本比传统方案低
- 2024 年之后,笔记本厂商在中端机型上大量切换国产料件,联想拯救者、宏碁、机械革命等品牌的部分中端机型批次都出现了 YT6801 的身影,其中机械革命的搭载比例尤其高(比如潮玩青春版、无界14X)
- 它同时以迷你主机(MLLSE 等)和 PCIe 扩展卡(TXA186 等)的形式铺货,甚至德国 TUXEDO 都给自家机型单独维护了 yt6801 适配包
厂商对 Windows/Linux 是有支持的(品牌官网能下到 LAN_Motorcomm 软件包,Linux 也有官方 GPL 代码包)。
唯独 macOS:零支持。
二、大家的痛点
如果你手里刚好是一台带 YT6801 的黑苹果,大概率经历过这些:
- 网口是死的。插上网线,
网络设置里根本没有对应的以太网服务 - 只能靠 Wi-Fi 顶着。可黑苹果的 Wi-Fi 本来就不一定好使,网速、延迟、稳定性全看运气
- 退而求其次用 USB 网卡。能顶上,但得多带一个外设、占个口子,终究没解决内置口的问题,治标不治本
- 想写 kext?门槛劝退。macOS 11 之后的 kext 必须进 Recovery 降级安全策略才能加载,等于让每个用户先关掉一半系统安全;kext 本身也是苹果明写着要淘汰的路线,苹果自己在 Tahoe 里连 WLAN 都换成了 dext
- 现成的 DriverKit 网卡方案几乎没有,
IOUserNetworkPacket这一整套苹果几乎没文档,社区里做网卡 dext 的人屈指可数
所以这个坑,当然只能自己填。
三、方案:用 DriverKit(DEXT)重写,而不是 kext
最终我选择了DriverKit 用户态方案(DEXT),打法很简单:硬件核心复用、胶水层重写。
- 可以直接搬的:寄存器表、DMA 描述符环、PHY 时序、EFUSE 读 MAC,这些是寄存器级逻辑(约占三成),跟用户态/内核态无关,照搬厂商 Linux 那套
- 必须重写的:收发路径从
IOUserNetworkPacket换成自建IODMACommand缓冲、接口注册、workloop、电源管理、定时器链路轮询……(这部分约占七成)
选 DEXT 还有个现实理由:
- 不用降安全策略,黑苹果常规配置(关 SIP + 放宽 AMFI)下静默激活、不弹窗、不重启
- 苹果自己也是这个方向。系统里有 22 个官方 dext,以太网(E1000/IXGBE/IXL/MLX5)和 WLAN(AppleSunriseWLAN/AppleBCMWLAN)全都 DriverKit 化了
四、路上踩过的几个大坑
坑 1:寄存器基地址少了一层偏移
MAC/DMA/MTL/PHY 寄存器全部相对BAR0 + 0x2000(对应 Linux 代码里的FXGMAC_MAC_REGS_OFFSET)。漏掉它的症状极具欺骗性:版本号寄存器读成0xfee00000、MDIO 永远 busy、MAC 地址变成01:00:00:00:01:00。补上偏移后立刻正常。
坑 2:打包池 IOVA 是个陷阱(最致命)
一开始图省事,把IOUserNetworkPacket::getDataIOVirtualAddress()写进描述符让硬件 DMA。结果 OWN 位正常回写、长度完全正确、计数器也在涨,唯独载荷是别的进程的内存。自环测试时发出去长 342 EtherType=0x0800的 IP 包,绕回来变成了EtherType=0x756c、内容是matrix_8x8_multiply_、br label……某段 LLVM 中间代码。
结论:收发两个方向都必须用自建的IODMACommand缓冲(每槽 2KB、128 槽),描述符指向物理地址,数据靠 memcpy 进出。只修 RX 没用,垃圾是 TX 发出去的。
坑 3:DMA 通道的两条铁律
- 环基址必须在通道“停着”的时候写,写完再置 ST/SR 启动。先启动再写基址,DMA 会按基址 0 去取描述符 → OWN 读成 0 → 卡在挂起状态。
- RX 尾指针不能在通道启动前推,必须等 SR 置位后再推一次。启动 RX 会把头和尾一起复位到环首,而“头 == 尾”在硬件语义里就是“环空”,一个描述符都不取。
排查口诀:先看 CATDR / CARDR 这两个“硬件走到哪”的指针,指针不动就是 DMA 没跑,别去翻描述符内容。
坑 4:MAC 速率不能写死 1000M
yt_set_mac_speed必须按自协商结果配置(千兆 PS=0/FES=0,百兆 PS=1/FES=1)。写死的话在百兆口上会表现为 link 灯亮、收发全废。
坑 5:MDIO 轮询要显式延时
DriverKit 的 MMIO 访问太快,原来的轮询次数等于没等。必须显式IODelay(10)× 2000。
坑 6:中断拿不到,就用定时器兜底
MSI 返回kIOReturnUnsupported,改走 MSI-X 优先 + 失败降级,但实际中断依然送不到(irqCount恒为 0)。最终方案:5ms 定时器计数 + 200ms 轮询 PHY 状态,链路变化时同步 MAC 速率再上报。实测拔线/插线都能立刻反映到系统,Wi-Fi 回落正常。
坑 7:MAC 地址要“三源兜底”
EFUSE → MACA0 寄存器 → 保底随机地址,全 0 / 全 FF / 多播位一律视为无效落下一级。我这块板子的 EFUSE 出厂地址是b0:25:aa:xx:xx:xx,读出来和 Windows/Linux 下一致。好处是 IP、DNS、服务顺序全部自动继承,升级零配置。
五、怎么用
系统要求:黑苹果,macOS 15.2 或更高;已关闭 SIP 并放宽 AMFI(黑苹果常规配置)。
- 从 Releases 下载
YT6801-Installer-x.x.dmg,双击打开 - 运行YT6801 Installer,选择语言(English / 简体中文 / 繁體中文)→ 同意协议 → 点击安装
- 系统扩展自动激活,无需重启;插上网线即可联网
命令行方式:
"/Applications/YT6801 Installer x.x.app/Contents/MacOS/YT6801Installer"--status# 查看状态"/Applications/YT6801 Installer x.x.app/Contents/MacOS/YT6801Installer"--install# 安装"/Applications/YT6801 Installer x.x.app/Contents/MacOS/YT6801Installer"--uninstall# 卸载确认你的机器是不是 YT6801:
# Linuxlspci-nn|grep-iethernet# 出现 1f0a:6801 即是# 黑苹果ioreg-l|grep-i"1f0a"# 出现 pci1f0a,6801 即是Windows 则在设备管理器 → 网络适配器里看是否有「Motorcomm YT6801」字样。
六、已知限制
- 无中断:MSI-X 拿不到(实测
irqCount恒为 0,PacketPoller队列绑定也被拒),收包改由 5 msIOTimerDispatchSource定时器 +PacketPoller周期性收割(门铃路径保留为兜底);纯接收大流量场景仍需优化 - 未覆盖所有机型:目前只在测试机型(机械革命 潮玩青春版,Ryzen 9 8940HX + RTX 5060,macOS 26.7.1)上 7×24 验证,其他机型表现取决于平台(PCIe 布线、BIOS、VTD 配置)
- Apple Silicon 机型暂不支持:dext 只编了 x86_64,也没有 M 系列 Mac 搭载 YT6801
- 主要面向黑苹果用户:白苹果等其他设备可以折腾,但不在官方支持范围;不想走开发者账号的话,放宽 AMFI、关掉 SIP 即可
- 早期自动回环调试没有移除:AI进行项目开发的时候,开始压根没考虑到正常网卡应该在线缆拔出后让接口Down,陷入了回环循复的一个过程,并且直到1.0.7的版本当中。今天下午两点在学校机房
测试有线网络却不断降回环连不了网,AI居然从不会意识到它自己把回环强行塞入到正常的生产环境了,反而说:
有意思!
七、最后
从“网口是个摆设”到“1000M 正常上网”,中间卡得最久的不是代码量,而是苹果 DriverKit 网络栈的资料空白:描述符怎么填、缓冲怎么管、通道怎么启停,全靠反复读寄存器、做自环测试验证。
项目已开源(GPL-2.0,继承上游厂商 Linux 代码许可),支持一键安装与卸载。如果你的机器也是 YT6801,欢迎试用并反馈;遇到问题请提交 issue,有建议欢迎 PR。
- 仓库:https://github.com/MiniYv/yt6801-for-macOS
- 下载:https://github.com/MiniYv/yt6801-for-macOS/releases
- 开发者:MiniYv(小禹)
八、后记:这件事到底是怎么做出来的
最后说点题外但真的很想讲的话。
整件事最让我兴奋的地方在于:我一个字都没手打。从整体架构、寄存器怎么填、七个大坑怎么排查,到这篇博客本身,全都是在 WorkBuddy 里完成的,由DeepSeek V4 Flash和GLM 5.3 Flash两个模型主导决策和写代码,我负责提需求、看结果、拍板。
一个国产网卡能在 macOS 上联网这种事,我以前觉得离自己很远,得是那种内核大佬才碰得了。结果靠着 AI 工具,真就把它从零怼出来了。这种兴奋感,我现在都讲不清楚。
九、常见问题(FAQ)
Q1:这是第一个让国产 PCIe 有线网卡在 macOS 上跑起来的开源项目吗?
是。这里特指 PCIe 网卡:USB 有线网卡走的是 macOS 内置的 CDC-NCM / ECM 通用类驱动,国产的也有,那些本来就能免驱跑,不算专门适配。公开渠道(厂商官网、GitHub、黑苹果社区)逐一查下来,在 YT6801 之前,没有任何人把国产 PCIe 有线网卡真正跑在 macOS 上。裕太微自己只发 Windows / Linux 版本,社区对带这颗芯片的机器,标准答案一直是「换卡,或者插个 USB 网卡」。这篇做的,就是把这块空白填上。
Q2:支持哪些 macOS 版本和机型?
macOS 15.2 及以上,但只面向 x86_64 平台:Intel 或 AMD 处理器的黑苹果,需要关闭 SIP 并放宽 AMFI(黑苹果常规配置)。机型表现取决于平台,已在机械革命潮玩青春版(Ryzen 9 8940HX + RTX 5060)上 7×24 验证。
Q3:是 kext 还是 DEXT?要重启吗?
DEXT(DriverKit 用户态方案),不是 kext。不用进 Recovery 降安全策略、不弹窗、不重启,系统扩展静默激活。这也是苹果自己力推的方向,系统里那 22 个官方网卡 / WLAN 那套全是 dext。
Q4:速度能跑满吗?
千兆口实测 1000M 满速。链路自动识别,拔线即断、插线即连,MAC 地址和 Windows 下一致。
Q5:怎么确认我的机器是不是 YT6801?
# Linuxlspci-nn|grep-iethernet# 出现 1f0a:6801 即是# 黑苹果ioreg-l|grep-i"1f0a"# 出现 pci1f0a,6801 即是Windows 则在设备管理器 → 网络适配器里看有没有「Motorcomm YT6801」字样。
Q6:拿到 169.254 开头的地址怎么办?
那是链路还没起来(APIPA 临时地址)。先确认网线插好、对端有信号;网卡会在链路稳定后自动拿到正常地址。机房环境如果交换机端口没立刻给信号,等十几秒再看。
Q7:开源吗?什么协议?
开源,GPL-2.0-or-later,继承上游厂商 Linux 代码许可。
Q8:源码和安装包在哪?
- 仓库:https://github.com/MiniYv/yt6801-for-macOS
- 下载:https://github.com/MiniYv/yt6801-for-macOS/releases(找
YT6801-Installer-x.x.dmg)
Q9:Apple Silicon 或白苹果能用吗?
Apple Silicon 不支持:dext 只编了 x86_64,也没有哪台 M 系列 Mac 用 YT6801 这颗芯片。
白苹果 / 正版 Mac:本项目主要面向黑苹果用户,这类设备不在官方支持范围,但愿意折腾也能用。不想走开发者账号的话,放宽 AMFI、关掉 SIP 就能折腾。上面提到的 Intel / AMD 指装了 macOS 的 PC,不是苹果出的 Intel Mac。GIthub仓库的README也提供不白苹果方法(不过个人真心不推荐,但也算提供多一个路子可以走)
声明:这个项目还在持续更新,文章里写的版本号、支持范围、那些坑的细节,过阵子都可能过时。要看最新的,直接去仓库,比看这篇准:
https://github.com/MiniYv/yt6801-for-macOS