1

Android OS の一部を変更するプロジェクトに取り組んでおり、すべてのプロセスのステータスを返す新しいシステム コールを実装しようとすると、次のエラーが発生しました。

kernel/sys.c: error: array tpye has incomplete element type. 

私がsys.cで行ったことは次のとおりです。

/***previous code in sys.c***/

SYSCALL_DEFINE2(new_syscall, struct info __user*, buf, int __user*, nr){
    if(!buf || !nr) return -EINVAL;

    int nr_copy;
    int success;

    success = copy_from_user(&nr_copy, nr, sizeof(int));
    if(success == 0) return -EINVAL;
    if(nr_copy < 1) return -EINVAL;

    struct info buf_copy[nr_copy];  /*************

    return 0;
}

Complier は、星でマークされた行について不満を述べました。

私の info.h ファイルは次のようになります。

    #ifndef __LINUX_INFO_H
    #define __LINUX_INFO_H

    struct info {
        long state;         
        pid_t pid;          
        pid_t parent_pid;       
    };

    #endif

sys.c に info.h を含めてみましたが、まったく役に立ちませんでした。私が何を調べるべきかについて誰かが私にいくつかの指示を与えることができますか?

ありがとう

4

2 に答える 2

2

どのコンパイラを使用していますか?動的サイズの配列は、サポートされていない可能性のある新しいC機能です。OTOH、それらはスタックに割り当てられており、それはカーネル内の非常に希少な商品です。kmallocまたはその同類の1つを介してアレイにメモリを割り当てる必要があります。

于 2013-02-05T03:51:36.733 に答える
0

状態をlongintとして明示的に宣言してみましたか。

long state; 

long int state;
于 2013-02-05T03:58:36.430 に答える