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;
}

编译器抱怨标有星号的行。

我的 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您应该通过或其同类之一为数组分配内存。

于 2013-02-05T03:51:36.733 回答
0

您是否尝试过将状态显式声明为 long int。

long state; 

long int state;
于 2013-02-05T03:58:36.430 回答