您好我有司机,但我想让它专有,我该怎么办呢。是否可以将我的驱动程序设为.so,我将创建一个包装驱动程序。通过包装驱动程序,我可以访问我的.so lib。
答案 0 :(得分:4)
你不能。如果你为Linux内核编写驱动程序,那就意味着它已经衍生出来了#34;来自Linux内核 1 。 Linux内核属于GPLv2,这意味着GPL许可代码的任何衍生作品也必须具有GPL兼容许可。
换句话说,如果您为Linux内核编写驱动程序并分发其二进制文件,则必须分发其源代码,如果有人要求的话。因此,你的司机必须是免费的。请注意,这是免费的,如免费语音",而不是"免费啤酒",即您仍然可以出售您的驱动程序,但您不能限制任何人免费发布其源代码。 / p>
除了在目标Linux内核上编译模块之外,你还要自己动手。你基本上必须得到你想要安装驱动程序的每台机器的配置文件,用这个确切的配置编译内核,在其上编译你的驱动程序然后传递二进制文件(这仍然是非法的)。
1 如果我理解正确,如果您的驱动程序最初是为另一个操作系统编写的,而您只是将其移植到Linux内核中,那么它就不会被认为是"派生的工作" 2 你的双手会更自由 3 。我认为这是GPLv2和GPLv3之间的差异之一,也是Linux内核未采用GPLv3的原因之一。
2 在阅读下面的注释时,请记住,Linus意味着"衍生作品"而不是"衍生作品" (http://www.law.washington.edu/lta/swp/Law/derivative.html)。
3 http://linux.sys-con.com/node/38143:
我听过很多人提到的事实,虽然Linux 内核属于GNU GPL许可证,代码许可使用 异步子句,表示二进制可加载模块不必 根据GPL。
不。没有这样的例外。
对使用该标准的用户空间程序进行了澄清 系统调用接口不被认为是派生的工作,但即便如此 不是"例外" - 它只是一个边界的陈述 显然被认为是"衍生作品"。用户程序显然不是 派生的内核作品,以及内核许可证 没关系。
事实上,在模块方面,GPL问题正是如此 相同。内核是 GPL。没有ifs,buts和也许是关于它的。作为一个 结果,任何衍生作品都必须是GPL' d。就是这样 简单。
现在,"派生的工作"版权法中的问题是唯一的问题 导致任何灰色区域。有一些区域根本不是灰色的: 用户空间显然不是派生的工作,而内核补丁清楚 是派生的作品。
但是,特别是一个灰色区域就像是一个驱动程序 最初是为另一个操作系统编写的(即显然不是 源自Linux的衍生工作)。它究竟到底是什么时候 内核的派生工作(因此属于GPL)?
这是一个灰色区域, 是我个人认为的区域 某些模块可能被认为不是派生的工作 因为它们不是为Linux而设计的,并且不依赖于任何Linux 特殊的Linux行为。
基本上:
任何用Linux编写的内容(无论是还是) 在其他操作系统上工作或不工作)显然部分是派生的 工作。 任何有基本内在知识和玩法的东西 Linux行为显然是派生的工作。如果你需要捣蛋 使用核心代码,您可以得到它,毫无疑问。
从历史上看,就像原来的安德鲁文件系统一样 模块:一个标准的文件系统,它实际上并没有为Linux编写 首先,只是实现一个UNIX文件系统。就是它 派生只是因为它已经移植到合理的Linux 类似的VFS接口与其他UNIX做了什么?就个人而言,我没有 觉得我可以做出判断。也许是,也许是 不是,但它显然是一个灰色区域。
就个人而言,我认为这个案例不是衍生作品,我愿意 告诉AFS这样的人。
这是否意味着任何内核模块都不会自动派生 工作?一定不行!它与模块本身无关,除此之外 非模块显然是派生作品(如果它们是如此重要 你不能将它们作为模块加载的内核,它们是明确派生出来的 只是因为非常亲密 - 而且因为GPL而起作用 明确提到链接)。
因此,作为一个模块并不是不是衍生作品的标志。这是公正的 一个标志可能它可能有其他论据为什么它不是 的。
莱纳斯
和http://linuxmafia.com/faq/Kernel/proprietary-kernel-modules.html:
几周前,我发布了一篇关于可能违反GPL的文章。 它是关于帧抓取器的设备驱动程序 与Linux动态链接或与其静态链接。
有些人,即Linus本人,表示这是合理使用的 GPLd代码(内核),因为没有明显的代码行 使用,驱动程序足够独立。
我不是律师,但我不接受这种代码重用的解释。 设备驱动程序与内核无任何关系 它相互作用。我不是在谈论界面版权或专利,而是 关于逻辑依赖。
请注意,没有"动态链接到内核" 在Linux中。相反,有#34;可加载模块"。
现在上面的内容可能会让一些人感到挑剔,但有一个人 关于可加载模块相当重要的事情:它们无法链接 自己反对任何随机内核例程。他们的惯例 可以链接反对我认为是"逻辑上的例程 独立"内核实现。
本质上,内核模块接口是一个"库"接口 内核和内核模块被认为是在GNU下 图书馆牌照。实际上,由于内核模块的工作方式,你 根据LGPL自动执行,所以这不是明确的 在任何地方陈述,但这是你应该考虑的方式。
另一种看待这种情况的方式 - 使用法律而不是道德 观点 - 只是看模块加载为"使用"内核, 而不是与它相关联。我更愿意解释理由 然而,使用道德理由去做它背后:
使用时以这种LGPLd方式暴露内核的原因 模块就是有很多内核设备驱动程序 Unix可用,而且它们都不是用Linux编写的。如果有人 我想把他的SVR4驱动程序移植到Linux但是不想要GPL它,我 我觉得他应该有权使用模块来做到这一点。后 总而言之,驱动程序实际上并非来自Linux本身:它是真实的 司机本身,所以我不觉得我有道德权利 迫使他改变版权。
现在,上面说过,我更喜欢GPLd驱动程序,即使它们是 仅作为模块提供。特别是如果他们原本是真的 为Linux编写,我认为不使用GPL有点狡猾(他们 即使你没有,也可能被视为派生作品 实际上将它们链接到内核本身)。但我不想 强迫那些可能没有从事衍生工作的人。 (它会 将安德鲁文件系统称为“衍生作品”是相当荒谬的。 例如,Linux,所以我认为拥有AFS是完全可以的 例如,模块。)
出于几个原因,Linux模块也并不总能做得多 除非它有来源 - 如果有一些商业公司认为 Linux足够重要,他们想做广告 对于Linux的模块,他们也可能认识到二进制模块没有 例如,大多数使用实验内核的Linux用户都可以使用。
最后说明:Linux解释不是正常的"案件。一世 不会用它作为其他任何东西的指导,尤其不是 用户模式。
莱纳斯
答案 1 :(得分:1)
可能你对开放/封闭源没有一个清晰的认识。
快速描述:
打开:执行您的驱动程序并分发源代码
关闭:执行驱动程序,编译并分发已编译的文件
在您的情况下,您必须分发 .ko 文件。正如唐老师所说,你会遇到麻烦,因为每一个内核都会出现问题。对于每个版本,您必须重新编译驱动程序并分发它。
你能制作一个 .so 文件吗?不,因为您正在编写内核驱动程序而不是库(正如您所说)。