2012-08-13 2 views
6

私はいくつかのカーネルモジュールをAdaに書いていますが、少し問題があります。ライセンスはCマクロとして定義されており、実際には何ができるのか分かりません。 cとadaモジュールの両方にGPL互換ライセンスがある場合、GPLを必要とするすべてのc関数を再エクスポートするのに適したソリューションですか?これを行うより良い方法はありますか?Linuxカーネルのモジュールのライセンスを設定する

答えて

6

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を配置します(リンカは セクションの名前を変更しないものとします)。

5

この質問が冗談かどうかわかりませんが、Adaでカーネルモジュールを書くことについて真剣に取り組んでいるのであれば、モジュールライセンスを設定することは、そうでなければヒットしているはずです。

いずれの場合でも、モジュールライセンスは.koファイルの.modinfoセクションにある "license = GPL"のような文字列です。 Cコードでは、__MODULE_INFO()マクロ(<linux/moduleparam.h>)から構築されています。charという配列が作成され、これは上記の文字列に設定され、__attribute__((section(".modinfo")))とタグ付けされています。

私はおそらくAdaでこれを行うための類似の方法があると思います。そうでない場合、最悪の場合、リンカースクリプトを使用して実行する必要があります。おそらく、あなたはすでに、これをとにかく扱い、.modinfoセクションの "vermagic = XXX"部分を設定するいくつかの方法を持っています。

+0

なぜこの質問は冗談ですか? 私はまた、私がヒットした他のすべての障害のための準備ができました。正直なところ、これが本当の問題だとは思わなかった。 – Probie

+0

1)モジュールをC言語で書いて、2)それ以外のものをすべて解決できたのはちょっと驚きです。私があなたがヒットしてから、それほど複雑でないMODULE_LICENSE()マクロの拡張。 – Roland

+2

Adaにカーネルモジュールを書くことができなかった理由は、政治的な理由以外にはありません。私は最初、Cマクロのように見える基本的なものが相互運用性の最大の障害となることに驚くように思えますが、何度も自分自身が起こるのを見ました。マクロは悪です。 –

1

おそらくGNATを使用しているため、pragma Licenseを使用して、「標準GPLおよび修正GPLに関する適切なライセンス条件の自動チェックを許可することができます。

+0

いいえ、それは動作しません。 – Probie

+0

それはどのような意味で「機能しませんか」? –

+0

@Probie:あなたが何を意味するのか分かります。互換性のみをチェックするだけですが、T.E.D.の[suggestion](http://stackoverflow.com/a/11936532/230513)を補完する可能性があります。 – trashgod

3

問題を回避する方法として、ライセンス部分をCのままにして、Annex B(他の言語とのインターフェイス)機能を使用してアクセスできますか?

これは少なくとも問題を含んでおり、他のモジュールに進むことができます。

最高でも、Adaでライセンスがどのように見えるかを調べ、その方法でリバースエンジニアリングすることができます。

関連する問題