驱动程序用于我拥有的Sbus图形加速器。即ZX aka Leo是早期3d加速器之一。我可以反汇编它,但不确定输出内容如何。我当然也有Solaris,所以也许有些事情我也可以做。
最终的目标是拥有足够的信息来为操作系统设计驱动程序。有一些NetBSD驱动程序,尽管不完整,因为确实存在(无法免费访问)的硬件文档没有Window ID编码,因为缺少它。另外,由于硬件在双倍宽的夹层卡上使用Sbus接口,因此在SparcStation或早期的UltraSparc机器以外的任何设备上都无法使用它。
#1 楼
好吧,因为它是Solaris驱动程序,所以首先您需要找到一些有关Solaris驱动程序与内核(或内核与内核)通信的文档。快速搜索显示以下内容:_init()
初始化可加载模块。它在可加载模块中的任何其他例程之前被调用。 _init()
返回mod_install(9F)
返回的值。在执行mod_install(9F)
调用之前,模块可以选择执行其他一些工作。如果模块在调用mod_install(9F)
函数之前已经完成了一些设置,则应该准备好,如果
mod_install(9F)
返回错误,则撤消该设置。返回有关可加载模块的信息。
_info()
返回_info()
返回的值。 mod_info(9F)
准备要装载的可装载模块。当系统要卸载模块时调用它。如果模块确定可以卸载,则
_fini()
返回_fini()
返回的值。从mod_remove(9F)
成功返回后,在调用_fini()
之前不会调用模块中的其他例程。下面有一个不错的代码示例。
该指南似乎也很相关。
找到入口点后,只需遵循调用和指针即可。
这是IDA中的外观:在那里,看看这些字段指向什么。
但是您甚至不必一直这样做。在这种情况下,程序员非常周到地保留了所有符号和调试输出。这应该对您的工作有所帮助:)
根据情况,您可以直接跳到诸如
_init()
或mod_install
之类的有用功能。我个人更喜欢自上而下的第一种方法,但又各取其用。编辑:您可以做的一件相当简单的事情是将
modlinkage
部分开始处的leo_blit_sync_start
变量修补到5左右。这将产生有关驱动程序正在执行的操作的大量调试输出。评论
显然,IDA专业人士不言自明:) ...那说我现在买不起许可证。这个话题有点离题,但是对于像我这样的人,按体系结构许可可能会很有趣。
–cb88
13年3月20日在13:04
@ cb88:我认为它仍然会比您想要的贵。 IDA是独一无二的。价格公道,但不是每个人都可以。他们有学生许可证。但我认为您需要有人认识您并担保您(如果他们仍然这样做)。在过去,太多的泄漏对DataRescue和后来的Hex-Ray造成了财务损失。
– 0xC0000022L♦
13年4月4日在17:35
0xC0000022L $ 75将是他们在完整软件中每个拱门收取的价格的3倍,如果您以后能以全价将其升级到完整版本-单拱门价格将是相当公平的,但是我想问的太多了。我毫不怀疑每一分钱的价值,我只是不需要一艘战舰来完成我的桨船工作:D
–cb88
13年4月4日在21:56
评论
您可能应该添加最终目标。您要在另一台机器上使用该卡吗?在同一盒子上制作另一个操作系统的驱动程序?只是好奇吗?@Igor Skochinsky很好的建议,我已经把你带上了!是的,只是出于好奇和乐趣。您可能会说,老式SparcStation是我的爱好。
如果您有NetBSD的驱动程序,建议您查看一下它们,并尝试找到与Solaris驱动程序的匹配项。这样可以加快处理过程。
然而确实的确,正如我说的那样... ZX的NetBsd驱动程序不完整,并且肯定不包括该设备具有的opengl 1.1功能,因此我几乎肯定要获得IDA的副本或让朋友转储该文件。为我集会。我也有一个TGS opengl驱动程序,该驱动程序很有趣,我确定但是它需要flexlm许可证,可惜我没有。
我还发现了某种可能有用的Linux驱动程序。