0

モジュールに を表示させようとしていますprintk。私はこれに慣れていないので、プログラミングエラーがあるかもしれません。これは私のモジュール C ファイルです。

#include <linux/linkage.h>
#include <linux/time.h>
#include <linux/module.h>

asmlinkage long sys_mycall(int myid, char* firstname)
{
    printk ("Hello, %s! \n sys_mycall called from process %d with  ID %d. \n",
        firstname, current->id, myid);

    return 0;
}

static int my_init(void)
{
    return 0;
}

static int my_exit(void)
{
    printk("Goodbye!");
    return 0;
}

module_init(sys_mycall);
module_exit(my_exit);

まず、アロー ポインターが正確にどのように機能するかがわからないため、通常はアロー ポインターを省略してprintk完全にコンパイルします。誰かが私にリンクやそれを理解する方法について何かを与えることができれば、本当に感謝しています.

insmodを使用してターミナルに挿入し、 を使用してメッセージを表示すると、を呼び出してdmesgメッセージを取得できますが、引数を追加することはできず、メッセージは表示されますが、 forまたは forは何も表示されません。module_initsys_mycallfirstnamemyid

4

2 に答える 2

1

モジュールinitが関数にパラメーターを期待していないという問題があると思います。それはvoidでなければなりません(別の方法で追加できます)。したがって、基本的に、関数は現在スタックにあるガベージで呼び出されます。そうしないと、カーネルがクラッシュするため、おそらくゼロです。

何を印刷したいですか?current->id は理解できますが、他は理解できません。

于 2012-05-31T16:47:17.613 に答える
0

ログレベルが指定されていないため、しきい値を下回っていると思われます。フォーマット文字列の前にKERN_WARNINGを貼り付けて、印刷されることを確認します。ログレベルのないメッセージは、.configファイルのCONFIG_DEFAULT_MESSAGE_LOGLEVELで解釈されます。

于 2012-05-31T16:34:12.933 に答える