免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 924 | 回复: 0
打印 上一主题 下一主题

如何发布binary的kernel module [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-16 00:14 |只看该作者 |倒序浏览

                                比如Nvidia显卡的Linux内核驱动,还有以前接触过的SCSI的Raid控制器RocketRAID  174x controller驱动,都是以二进制的方式发布给客户。但是内核有严格的version magic检查,如果version magic不匹配的话,驱动是没有办法插入内核的。
客户的内核版本可是不好预知的,那这些厂商是如果解决这个内核版本的问题的?
看到过的解决方法有如下几种:
1. 在代码中加入内核版本检查,比如2.6.0~2.6.10调用内核的A函数,2.6.11以上的调用B函数。这个方法是在编译时做的,二进制的驱动用不了这个方法。
2. 将内核中做的事情,尽量尽量移动到用户态做,这样驱动只是简单的提供能够访问硬件的途径而已,而大部分的逻辑还是在用户层完成的,即使公开驱动的源代码也无所谓了。Android中的好些驱动就是这样干的。
3. 一部分以还没有连接的object方式发布,一部分以源代码发布。这样核心逻辑不公开,而和内核版本函数紧密相关的部分以源代码的形式提供。用户然后再自己编译生成驱动模块。RocketRaid 174x采用正是这种方式,Nvidia的不知道,我估计也是这个方式。
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/21422/showart_1901221.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP