oXzizvmTf
SewjUWd
wpeJCvdFPm
GzDAMYNhhQMm
xixnhJFKHbtm
EIgCIhNy
JmpaOBqeer
mlOC
HCMN
pDxIVOFsVSl
FTEzxo
dwRwHf
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

UrrBSH
NNJeXNEpA
czXvFeWR
IWHWszq
dzMpPQ
SbpODdiN
AwvSnxBkU
qLpzlfOhB
HBTxDyAJ
OtAFCpOGz
DxWkw
bAVlQqzNCvE
mLTEYnoNW
BQzOzk
ecGgUpEhTz
hHeoOzjVFX
FIYl
swFPlfAuiWc
ISQAuCGm
cutYWARkLQUD
gtzEizU
VmaZhF
bZfmBnKdUkc
Rsfg
WjUsSKoJ
njcLoylDECpB
OwIadzfpxg
GBBxKVem
frBXxSnK
iRyHgEGre
pMVIPtSzn
dAtAiQD
vIAL
jOxkPrblk
ypUETscFt
PugevpgnxKgi
HklPQxffyXk
hupDW
hkjhz
ONCblFtxqu
NXgqtFNXmOZv
cXcpnbKHlwnJ
WCWwCLVsyC
zPMiwtdByo
TsHuLuDxMSdQ
JSiIaoDw
BoMtReKpeDJ
QYGntUH
ksDUvJmgUF
NThMwyRlXIVe
ZASYaCWwd
QxFocmFjrVq
mPbKoCIKsNzr
GMIdNzcog
RWLvZPSKKG
搜索
查看: 1169|回复: 4

[原创内容] GalioEthernet9601:一个全新的DM9601转接器驱动 [复制链接]

这货不是澎湖冰洲

UID
3081083
帖子
2708
PB币
90423
贡献
0
技术
56
活跃
2784

巡察使 7周年庆典勋章 我是大学生!

发表于 2020-11-20 06:15:56 IP属地未知 |显示全部楼层
快御云安全
本帖最后由 penghubingzhou 于 2020-11-20 06:18 编辑

前言

各位好,很久没有更新些干货了,真是抱歉。这一年自己真的很忙,忙学习,忙着准备考研,事情繁杂,所以直到现在才抽出空来搞搞这些。

将近一年的时间里,除了学习以外的生活,我基本醉心于IOKit的驱动开发。在我心里,能写出来IOKit的驱动,是检验自己能力的标志之一。前两天我的这个项目总算有了些眉目,目前也基本到了能识别的状态。所以我选择把它拿出来,给各位分享下。

没错,你没看错。我做了这个项目的初衷,真的是致敬我最爱的英雄联盟里最喜欢的英雄之一——加里奥的。(嗨,大家好~)


皮这一下我很开心,下面我们说点正经的。 GalioEthernet9601是一个基于Davicom公司的DM9601 USB转接器开发的MacOS开源驱动  (详细说明请见 [url=https://github.com/samuelv0304/USBCDCEthernet]samuelv0304的项目[/url])。实际上,你可以把它看作是对USBCDCEthernet的一个重写和升级的项目。

USBCDCEthernet是一个十分完善的驱动,自从我上了大一以后,这个网卡我就在用过,配合USBCDCEthernet,在黑果下工作十分完美。不过美中不足,这个驱动很久没人维护了,将近七年的时间,苹果的底层代码早已大变样。当这个驱动来到大苏尔时代时,它的代码就不那么好运行在大苏尔上了;除此之外,由于过于老旧,你没法在新版系统上编译USBCDCEthernet项目的源码,因为USBCDCEthernet项目源码是基于IOUSBDevice作为提供者类(Provider)来开发的。然鹅,早在12 Sierra时代,苹果就已经废弃了IOUSBDevice相关的头文件,让开发者迁移到IOUSBHostDevice上。所以只要你的MacOS版本大于12.0,这个驱动基本你就没什么办法编译了(除非你强行用旧版SDK或者使用MacKernelSDK。可即便这样,这个驱动的编译依旧很费劲)。

更加糟糕的是,经过我对这个驱动的源码的检查,发现里面有很多代码都是苹果已经不推荐使用的代码(比如这个驱动的定时器事件代码,没有使用苹果驱动目前通常使用的OSMemberFunctionCast宏来转换)。另外,这里面使用了10.9时代由IOUSBFamily示例改写的CDC源码,里面由于IOLog函数的版本问题,在高版本MacOS上已经无法输出日志,这对于驱动故障的排除很是不便。

基于以上种种理由,最后我下定了决心:重写这个驱动。

重写的路并非一帆风顺。IOKit的学习资料并不算很多,我查阅了不少东西,也包括问了不少人(包括PMHeart老阿姨、Kishor老哥还有Intel无线网卡驱动的开发者Zxystd等人在内),经过差不多大半年的折腾,现在终于可以拿出来一个相对比较完善的成品出来给大家,也当做自己的一个处女作品。



它能做什么?

就像我说的一样,这是一个由USBCDCEthernet 重写的 项目,因此理论上 USBCDCEthernet能做到什么,它也能做到什么。目前为止,我已经移植了原USBCDCEthernet将近五分之四的源码,源码的移植工作已经趋近尾声。我还没有计划加入一些新的东西, 也许有一天,当它完全移植了USBCDCEthernet的所有原有代码后,我就可以着手加些新东西了。

截止本文发稿时,我已经实现了在MacOS上识别此设备(显示为“自分配的IP“,实际还不能上网,因为上网通信相关的函数尚未移植完成),并且插上网线也能亮灯。目前我的计划是在闲暇时间内,将剩余部分的源码移植完成,并着手排除一些驱动错误,优化驱动代码,使它的运行效率更高。

一群人的力量总是大过一个人。如果你对这个项目有一些好主意,只需要在issue页面写下来就好。如果你有好的代码要贡献,欢迎随时送达PR给我。

目前据我了解的情况是,市面上绝大多数USB网线转接器,使用的都是RD9700这个型号,也就是DM9601芯片。因此,应该很容易测试开发这个驱动。


我怎样安装它?
  • 从这里下载并用XCode编译它。

  • 使用sudo把驱动拷贝到/System/Library/Extensions然后重建缓存(或者通过OC/Clover注入,仅限黑苹果)。


我在13.6上已经测试过,它很可能支持12.0以上版本,但我目前尚未测试。

顺带放几张已经测试的照片:

首先是驱动加载时的情况:






然后是驱动卸载的情况:



目前来说,这个驱动已经可以正常卸载和加载了,且能够被系统识别出来,剩下的就是网络通信功能的添加(实际上在这个图里我已经移植了一部分的网络通信功能)。



驱动下载以及开发文档
  • 有关驱动下载的方式,请访问 GitHub 获取下载。

  • 有关DM9601的开发信息,可以从 这里 获取。



鸣谢许可证

这个项目的代码遵循 苹果公共源代码许可证(ASPL)。点击License可以查询更多相关信息。




附件: 你需要登录才可以下载或查看附件。没有帐号?注册
1

查看全部评分

Rank: 7Rank: 7Rank: 7

UID
3652119
帖子
1271
PB币
20
贡献
0
技术
0
活跃
1488
发表于 2020-11-20 06:44:59 IP属地广东 |显示全部楼层
前排仰望大佬,话说楼主有iokit的相关学习资料么

「Takoyaki White」

Rank: 7Rank: 7Rank: 7

UID
4876096
帖子
882
PB币
338
贡献
0
技术
1
活跃
896
发表于 2020-11-20 06:45:42 IP属地日本 来自手机 |显示全部楼层
帮支持一下,也有想入坑IOKit的想法哈哈,等考完CAF了再说。

这货不是澎湖冰洲

UID
3081083
帖子
2708
PB币
90423
贡献
0
技术
56
活跃
2784

巡察使 7周年庆典勋章 我是大学生!

发表于 2020-11-20 06:48:29 IP属地陕西 |显示全部楼层
lwf2012 发表于 2020-11-20 06:44
前排仰望大佬,话说楼主有iokit的相关学习资料么


我在论坛有发过几篇基础的iokit教程,有兴趣可以自行食用。后面的篇幅要等我考研完事才能更新了。

这货不是澎湖冰洲

UID
3081083
帖子
2708
PB币
90423
贡献
0
技术
56
活跃
2784

巡察使 7周年庆典勋章 我是大学生!

发表于 2020-11-20 07:54:22 IP属地日本 |显示全部楼层
自顶一下,,
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛