Chinaunix首页 | 论坛 | 博客
  • 博客访问: 121003
  • 博文数量: 5
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 326
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-03 19:35
文章分类

全部博文(5)

文章存档

2009年(2)

2008年(3)

我的朋友

分类: LINUX

2009-04-16 00:14:06

比如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的不知道,我估计也是这个方式。

阅读(2243) | 评论(0) | 转发(0) |
0

上一篇:The Art of UNIX programming

下一篇:没有了

给主人留下些什么吧!~~