私はいくつかのカーネルモジュールをAdaに書いていますが、少し問題があります。ライセンスはCマクロとして定義されており、実際には何ができるのか分かりません。 cとadaモジュールの両方にGPL互換ライセンスがある場合、GPLを必要とするすべてのc関数を再エクスポートするのに適したソリューションですか?これを行うより良い方法はありますか?Linuxカーネルのモジュールのライセンスを設定する
答えて
Cマクロの扱いはロイヤルPITAです。私はいつかCプログラマが世界の他国に恩恵を与え、それらを使うのをやめることを夢見ている。
私がいた場合は、マクロを実行して出力内容を確認してから、同等の結果を出力するAdaコードを作成します。
ローランドの答えを読んでから、実装に定義されたpragma linker_sectionのように見えます。
プラグマLinker_Section([エンティティ=>] LOCAL_NAME、[セクション=>] static_string_EXPRESSION)。
LOCAL_NAMEは、ライブラリ レベルで宣言されているオブジェクトを参照する必要があります。このプラグマは、与えられたエンティティ のリンカセクションの名前を指定します。 GNU C の
__attribute__((section))
に相当し、実行可能ファイルのstatic_string_EXPRESSION セクションにLOCAL_NAMEを配置します(リンカは セクションの名前を変更しないものとします)。
この質問が冗談かどうかわかりませんが、Adaでカーネルモジュールを書くことについて真剣に取り組んでいるのであれば、モジュールライセンスを設定することは、そうでなければヒットしているはずです。
いずれの場合でも、モジュールライセンスは.koファイルの.modinfoセクションにある "license = GPL"のような文字列です。 Cコードでは、__MODULE_INFO()
マクロ(<linux/moduleparam.h>
)から構築されています。char
という配列が作成され、これは上記の文字列に設定され、__attribute__((section(".modinfo")))
とタグ付けされています。
私はおそらくAdaでこれを行うための類似の方法があると思います。そうでない場合、最悪の場合、リンカースクリプトを使用して実行する必要があります。おそらく、あなたはすでに、これをとにかく扱い、.modinfoセクションの "vermagic = XXX"部分を設定するいくつかの方法を持っています。
おそらくGNATを使用しているため、pragma Licenseを使用して、「標準GPLおよび修正GPLに関する適切なライセンス条件の自動チェックを許可することができます。
問題を回避する方法として、ライセンス部分をCのままにして、Annex B(他の言語とのインターフェイス)機能を使用してアクセスできますか?
これは少なくとも問題を含んでおり、他のモジュールに進むことができます。
最高でも、Adaでライセンスがどのように見えるかを調べ、その方法でリバースエンジニアリングすることができます。
- 1. 設定Linuxカーネル
- 2. モジュール.Cをlinuxカーネルに追加する
- 3. menuconfigのLinuxカーネル設定オプションを逆にする方法
- 4. Linuxで新しい設定パラメータを導入するカーネルmake menuconfig
- 5. Linuxカーネル開発のためのNetbeans/Eclipseの設定
- 6. lxcのカーネル設定
- 7. Linuxカーネルのインストール
- 8. Linuxカーネルのlist.h
- 9. Linuxカーネルのバディシステムアロケータ
- 10. Linuxカーネルのメジャーページフォルトハンドラ
- 11. Linuxカーネルのカスタムネットワークプロトコル
- 12. Linuxカーネルのピンマルチプレキシング
- 13. Linuxカーネルで正しいモジュール間同期を実装する
- 14. Cudaカーネル設定
- 15. ブートアップ時のLinuxカーネル内の組み込みモジュールの状態
- 16. Linuxカーネルのモジュールをコンパイル中にエラーが発生しました
- 17. LinuxカーネルのI2Cライトアクノリッジポーリング
- 18. Linuxカーネルでのプリエンプション
- 19. Linuxカーネルのnr_cpusブートパラメータ
- 20. linuxカーネルのpl011 uartの仮想アドレスを指定する方法
- 21. カーネル内のGMPモジュール
- 22. 組み込みLinuxカーネルとデスクトップLinuxカーネルの相違
- 23. ライセンスのないVS2015のエクスポート設定
- 24. LinuxカーネルのCPU数を確認する
- 25. LinuxカーネルのUMLエラーを構築する
- 26. LinuxカーネルでTCPのRTTを測定する
- 27. Behat SymfonyExtensionの設定、特定のカーネル
- 28. Linuxカーネル `min`マクロ
- 29. cleanup_module Linuxカーネル
- 30. Linuxカーネル機能
なぜこの質問は冗談ですか? 私はまた、私がヒットした他のすべての障害のための準備ができました。正直なところ、これが本当の問題だとは思わなかった。 – Probie
1)モジュールをC言語で書いて、2)それ以外のものをすべて解決できたのはちょっと驚きです。私があなたがヒットしてから、それほど複雑でないMODULE_LICENSE()マクロの拡張。 – Roland
Adaにカーネルモジュールを書くことができなかった理由は、政治的な理由以外にはありません。私は最初、Cマクロのように見える基本的なものが相互運用性の最大の障害となることに驚くように思えますが、何度も自分自身が起こるのを見ました。マクロは悪です。 –