EXPORT_SYMBOL динамический c ячейка памяти - PullRequest
0 голосов
/ 06 августа 2020

Возможно ли EXPORT_SYMBOL() структуру, содержащую массив kmalloc? Если да, то о чем мне нужно помнить?

Это псевдокод того, что я хочу сделать.

struct test {
   int a;
   ...
   uint64_t* data;
}

struct test foo;
EXPORT_SYMBOL(foo);
...

В module1_kthread1_func() У меня есть:

int module1_kthread1_func(void *foo){
...
foo->data = kmalloc(SIZE, GFP_KERNEL);
...
foo->data[var] = 1243;   
var++;  
...
}

В module2_kthread2_func() Имею:

...
extern struct test foo; 
...

int module2_kthread2_func(void* foo){
...
for (i=0; i<SIZE; i++)
    printk(KERN_INFO "Variable value of %d is %llu", i, foo->data[var]); 
...
}

1 Ответ

1 голос
/ 06 августа 2020

Определенно возможно, да.

Вам нужно быть осторожным и убедиться, что код, который его использует, знает, что некоторые поля могут быть недоступны до того, как они будут выделены. То есть сначала проверьте, являются ли они NULL, вместо прямого доступа к ним.

Вы можете объявить структуру с явным инициализатором, чтобы было очевидно, что происходит:

struct test foo = {
    .a    = 123,
    .data = NULL // Initialized by function X when Y
};
EXPORT_SYMBOL(foo);

Если такие поля являются обязательными для используемой структуры, вы можете захотеть инициализировать их на ранней стадии (см. здесь ).

...