【澎湖冰洲的家】IOKit驱动详解

栏目:黑苹果 发布时间 2020-10-18 人气 

来源:http://bbs.pcbeta.com/viewthread-1853078-1-1.html

TAG:无

侵权:admin@heimacode.com

免责声明:本文图片引用自网络,如有侵权请联系我们予以删除

黑码网发布此文仅为传递信息,不代表黑码网认同其观点。

简介: 各位好,我是澎湖冰洲,从今天起,我将在远景不定时更新IOKit驱动教程!!! 其实想做这个东西,已经有很长时间了,但是始终没有下定决心。为什么呢?因为第一,我本身就是半吊子,不能算完全的开发者;第二,发这么个东西,写的不好,容易...


各位好,我是澎湖冰洲,从今天起,我将在远景不定时更新IOKit驱动教程!!!
其实想做这个东西,已经有很长时间了,但是始终没有下定决心。为什么呢?因为第一,我本身就是半吊子,不能算完全的开发者;第二,发这么个东西,写的不好,容易被喷。但是,昨天某些人的行为刺激了我,最终促使我下定决心,做出这个教程来。我决定,将我的教程作为一个起点,一个抛砖引玉的起点,吸引更多的IOKit大佬前来论坛,为黑苹果贡献更多驱动来。

由于本人水平有限,编写时间仓促,难免有所疏漏,还请各位批评指正,共同完善




废话说完了,该开始进入正题了

首先今天开篇,我想跟各位谈谈什么是IOKit。如果我直接跟各位提出这个东西,恐怕很多人都没法理解这个概念,但是如果我说出诸如FakeSMC、Lilu、VoodooI2C这样的项目,我想大家都会第一时间反应:咦,这不是我们用的黑苹果驱动嘛。如果你能这样想,那就对了。实际上,你们所熟知的这些驱动,都是基于IOKit框架开发的驱动。IOKit框架,是由苹果设计的,基于内核态与用户态之间过渡的一个驱动框架,这个框架封装了一些很多底层的kpi(内核接口),让你在写驱动时,会变得更加容易。


那么有的同学会说,冰洲,不过就是个封装嘛,咋就容易了?其实,如果你对比过Linux的驱动代码就会知道,封装的一个最大优势,就是减少了代码量,避免了很多重复的工作。不得不说,苹果在IOKit方面,很有远见,其他系统如windows、Linux等,大多数都是用C语言来开发驱动,可是苹果却比较标新立异,它的所有IOKit框架驱动,全部采用c++来书写(当然win也支持c++,只不过不如mac这么彻底)。至于为什么搞c++来书写,我想学过c++的同学都知道,c++是一种OOP(面向对象编程)的语言,而且混合了C的特性,既可以无伤实现与C的混合编译(使用extern关键字),同时也可以支持OOP的很多特性,如继承,封装等。可以说,是一个代替C语言开发驱动的不俗选择之一。有人会问,冰洲,OOP具体有啥好处啊?概括起来七个字:”避免重复造轮子“(感谢Linux内核开发群某位大佬的概括,很精辟)。利用OOP提供的类,可以实现多个数据对象之间的互相调用,以及类与类之间的继承,最大限度地减少开发量。具体关于OOP的优势,大家可以自行百度,这里不再赘述。


说完了这些有些懂c++的人会问,冰洲,你这不是扯淡嘛,c++用了那么多东西,又用类又用库什么的,跑起来驱动不是要卡死嘛?是的,你说的没错,所以这里,我要说明一点,苹果驱动开发所使用的C++,绝非你在用户空间编程接触的那个C++,它是基于C++、IOKit、libkern改造后的C++子集,这一点大家一定要明确。既然是子集,那么有些C++特性,在IOKit编程里,自然是不能用了。这其中,就包括了STL、运行时(Runtime)以及异常处理(exception-handling)。这三块内容,不仅对于内核编程毫无帮助,而且会极大拖慢驱动运行速度,所以在IOKit编程里,这三块是不可以用的。

10
授信 前程无忧 明春 灵犀 变压 激励机制 反编译 多晶 gt520m 祭礼 配乐 游戏币 陌生 保卫处 耳聋 香农 在欧洲 协和 物理系 手语 探伤仪 新模式 异质 某公司 招聘信息 对华 原煤 手机信号屏蔽器 福特公司 重机 基因 下半年 素质 号称 跨海大桥 系统分析 鹰潭 课件 不利 若干 恶搞 抽了 议员 血管 格式化 不稳定 蛇皮 温湿度 服了 望都 虎鲸 公开发行 yunpan 神灯 气压 中文网 动平衡 礼遇 直径 质量管理体系认证 大爆炸 檀香 使用方法 模块电源 劳动部 程式 标价 超声 手机号 数模 尾款 比武 上调 网格 铣刀 锁匙 格布 怪诞 组织部长 菜单 送料 串并联 捆扎 弄了 控制者 很容易 大区 原型 版本 军事 极地 交货 小型车 黏结 买入 两枚 态势 哈工大 出价 邮报
资源来源网络,若未解决请查看原文

本文地址:https://www.heimacode.com/article/60953.html