在linux内核中设置模块的许可证

Pro*_*bie 6 c ada linux-kernel

我在Ada中编写了一些内核模块,我遇到了一些问题.许可证定义为交流宏,我无法弄清楚实际是什么.如果c和ada模块都具有GPL兼容许可证,是否只需要重新导出所有需要GPL的c函数?有一个更好的方法吗?

T.E*_*.D. 6

处理C宏是皇家PITA.我梦想有一天,C程序员会对世界其他地方有所帮助并退出使用它们.

如果是我,我会运行宏来查看输出的内容,然后编写一些Ada代码来输出等效值.

通过阅读Roland的回答,我认为可能需要实现定义的pragma linker_section.

pragma Linker_Section([Entity =>] LOCAL_NAME,[Section =>] static_string_EXPRESSION);

LOCAL_NAME必须引用在库级别声明的对象.此pragma指定给定实体的链接器部分的名称.它等同__attribute__((section))于GNU C并导致LOCAL_NAME被放置在可执行文件的static_string_EXPRESSION部分中(假设链接器不重命名该部分).


Rol*_*and 5

我不确定这个问题是不是一个笑话,但是如果你真的想在Ada中编写内核模块,那么我无法想象设置模块许可证与你必须拥有的其他东西相比是一个很大的障碍击中.

在任何情况下,模块许可证只是.ko文件的.modinfo部分中的"license = GPL"字符串.在C代码中,它是由__MODULE_INFO()宏构建的<linux/moduleparam.h>,它只是创建一个数组,char它被设置为上面的字符串,标记为__attribute__((section(".modinfo"))).

我想在Ada中可能有类似的方法可以做到这一点; 如果不是,在最坏的情况下,应该可以使用链接描述文件.据推测,无论如何,你已经有了一些处理方法,设置.modinfo部分的"vermagic = XXX"部分.

  • 没有充分的理由(除了政治因素)为什么不能在Ada中编写内核模块.我同意它最初看起来令人惊讶的是,像C宏看似基本的东西将是最大的互操作性绊脚石,但我已经看到它多次发生.宏是邪恶的. (2认同)
  • @Roland - 这听起来像是一个单独的SE问题.如果你真的想要一个答案,你应该这样问.作为一个对这两种语言都相当熟悉的人(尽管我在RTOS中完成了大部分内核编程,而不是Linux),我的答案肯定是肯定的.一旦你弄清楚如何去做,很多情况下很容易让它变得有价值. (2认同)