Linux内核空间中的动态内存分配

时间:2013-10-28 00:29:48

标签: c linux memory-management struct kernel

我在分配内存时遇到麻烦是Linux内核空间。我使用下面的两个结构创建了一个链表:

struct Node{
    char *ptr;
    struct Node *next;
};

struct List{
    struct Node *head;
    struct Node *tail;
};

现在,当我尝试分配一个列表结构[编辑以反映正确的代码]时:

struct List *ll = kmalloc(sizeof(struct List), GFP_KERNEL)

我明白了:

error: Initializer element is not constant

我在这里做错了什么?我想在我的List结构中添加指向节点的指针,所以我可以通过以下方式添加它们:

struct Node n* = kmalloc(sizeof(Node));
n -> ptr = "Blah";
n -> next = NULL;
ll -> head = n;

2 个答案:

答案 0 :(得分:2)

struct List ll*;

struct List *ll;

你在类型定义中得到了这个权利,但在使用kmalloc的两行中都是错误的。

答案 1 :(得分:0)

ERROR与内核编程无关,它与c编程有关。

error: Initializer element is not constant

代码:

 struct List{
    struct Node *head;
    struct Node *tail;
};
struct List *ll = kmalloc(sizeof(struct List), GFP_KERNEL)

结构对象(默认情况下)具有静态存储类。 具有静态存储持续时间的对象的初始化必须具有常量表达式。 尝试在main()函数中分配内存。

具有静态持续时间的对象在外部函数中声明,或者在其中声明 关键字extern或static作为声明的一部分。这些只能在编译时初始化。即,不断表达