为内核模块创建DKMS包,依赖于内核头

时间:2016-06-02 19:44:53

标签: c linux-kernel linux-device-driver kernel-module dkms

背景

我开发了一个Linux设备驱动程序(ASoC)。现在我想将它作为DKMS包发布。目标机器是Raspberry Pi,带有Raspbian。

问题

我的源代码取决于Linux /sound/soc/codecs/目录中的头文件。目标计算机上不存在此文件。

解决方法1

我可以将所需的头文件添加到我的DKMS包中。但它感觉不对,因为我认为我应该使用构建模块的内核源头文件(例如4.6,4.7 ......)。

解决方法2

我可以告诉最终用户在构建模块之前下载整个内核源代码(apt-get source ...)。但是由于单个头文件而安装超过700MB也感觉不对。包kernel-headers-不包含我需要的文件。

问题

有比两种解决方法更好的解决方案吗?你会建议什么?

1 个答案:

答案 0 :(得分:1)

由于标题提供了声明,与内核内部无关,因此您可以安全地从一个内核版本获取标题,复制它到您的包中并使用它来构建任何内核版本。用户不需要在他的机器上有这个标题。

当然,最好保留此标头的属性,但由于您使用DKMS,因此您的项目可能与Linux内核许可证(GPL)兼容。

另一种方法 - 使用您构建的内核中的标头 - 从用户的角度来看更复杂。因此只有在真正需要时才应该使用它。例如,当问题中的标题描述了您在模块中使用的某些内核时。在这种情况下,您不能对所有目标内核使用单个(预先复制的)文件。