簡體   English   中英

為Linux內核中的模塊設置許可證

[英]Setting the license for modules in the linux kernel

我已經用Ada編寫了一些內核模塊,但遇到了一些問題。 許可證定義為ac宏,我無法弄清楚它的實際含義。 如果c和ada模塊都具有GPL兼容許可證,那么簡單地將某些c重新導出所有需要GPL的c函數是否是合適的解決方案? 有一個更好的方法嗎?

處理C宏是皇家的PITA。 我有一個夢想,就是有一天C程序員將為世界其他地區提供幫助,並放棄使用它們。

如果是我,我將運行宏以查看其輸出,然后編寫一些Ada代碼以輸出等效代碼。

通過閱讀Roland的答案,在我看來,可能需要實現定義的編譯指示linker_section

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

LOCAL_NAME必須引用在庫級別聲明的對象。 此雜注指定給定實體的鏈接器節的名稱。 它等效於GNU C中的__attribute__((section)) ,並且將LOCAL_NAME放置在可執行文件的static_string_EXPRESSION部分中(假設鏈接器未重命名該部分)。

我不確定這個問題是否在開玩笑,但如果您是認真地用Ada編寫內核模塊,那么我想像不到的是,與您必須擁有的所有其他功能相比,設置模塊許可證是一個很大的障礙擊中。

無論如何,模塊許可證只是.ko文件.modinfo部分中的字符串,例如“ license = GPL”。 在C代碼中,它是由<linux/moduleparam.h>__MODULE_INFO()宏構建的,該宏僅創建一個char數組,該數組設置為上述字符串,並標有__attribute__((section(".modinfo")))

我猜想在Ada中可能有一些類似的方法可以做到這一點。 如果不是,在最壞的情況下,應該可以使用鏈接描述文件。 大概,您已經可以通過某種方式來處理此問題,以設置.modinfo節的“ vermagic = XXX”部分。

作為避免問題的一種方法,您可以將許可證部分保留在C中,並使用附件B (與其他語言的接口)功能進行訪問嗎?

這至少應該包含問題,並允許您繼續使用其他模塊。

充其量它可能允許您在Ada中檢查許可證的外觀,然后對它進行反向工程。

由於您可能正在使用GNAT,因此您可以使用pragma許可證 “允許自動檢查有關標准GPL和修改后的GPL的適當許可證條件”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM