如何让我自己的linux内核驱动程序关闭(不是开源)?

时间:2014-01-25 08:21:46

标签: linux-kernel linux-device-driver embedded-linux

您好我有司机,但我想让它专有,我该怎么办呢。是否可以将我的驱动程序设为.so,我将创建一个包装驱动程序。通过包装驱动程序,我可以访问我的.so lib。

2 个答案:

答案 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 文件吗?不,因为您正在编写内核驱动程序而不是库(正如您所说)。