LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 957|回复: 3

如何以二进制发布软件(驱动模块)?

[复制链接]
发表于 2009-6-28 13:08:06 | 显示全部楼层 |阅读模式
类似一些商业软件
如linux qq和nvidia的驱动
都是以二进制直接发布的
请问怎样才能直接发布二进制的驱动模块?

模块如何不需要随当前系统的内核配置文件编译就能使用?
发表于 2009-6-28 14:24:16 | 显示全部楼层
直接发布rpm或deb就可以了,那个就是二进制文件啊。
打包rpm或deb的方法google以下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-28 14:38:42 | 显示全部楼层
rpm只是外包装。。跟tar没啥区别
我说的二进制发布不是指这种方式

我的主要问题还是驱动模块怎么才能不需要与具体系统的内核一起编译就能用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-28 14:43:13 | 显示全部楼层
找到一篇文章:
http://blog.chinaunix.net/u/21422/showart_1901221.html

如何发布binary的kernel module
比如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的不知道,我估计也是这个方式。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表