Pro*_*bie 6 c ada linux-kernel
我在Ada中编写了一些内核模块,我遇到了一些问题.许可证定义为交流宏,我无法弄清楚实际是什么.如果c和ada模块都具有GPL兼容许可证,是否只需要重新导出所有需要GPL的c函数?有一个更好的方法吗?
处理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部分中(假设链接器不重命名该部分).
我不确定这个问题是不是一个笑话,但是如果你真的想在Ada中编写内核模块,那么我无法想象设置模块许可证与你必须拥有的其他东西相比是一个很大的障碍击中.
在任何情况下,模块许可证只是.ko文件的.modinfo部分中的"license = GPL"字符串.在C代码中,它是由__MODULE_INFO()宏构建的<linux/moduleparam.h>,它只是创建一个数组,char它被设置为上面的字符串,标记为__attribute__((section(".modinfo"))).
我想在Ada中可能有类似的方法可以做到这一点; 如果不是,在最坏的情况下,应该可以使用链接描述文件.据推测,无论如何,你已经有了一些处理方法,设置.modinfo部分的"vermagic = XXX"部分.
| 归档时间: |
|
| 查看次数: |
627 次 |
| 最近记录: |