Linux Kernel Module: Globale Variable?

Gast #4565842
Lesenswert?
• ▲
▼
Hallo,


ich schreibe gerade meinen ersten Linux-Treiber und brauche etwas 
Expertenrat. (Ja, das Buch "Linux Device Drivers" kenn ich.)

In meiner __init Funktion initialisiere ich eine Variable, auf die ich 
später auch in einer send() Funktion zugreifen muss.

Ist es nun elegant diese Variable als globale Variable in das Kernel 
Module zu schreiben, oder gibt es da etwas in "struct platform_driver" 
o.ä., wo die Variable besser aufgehoben ist?
1
#include <linux/init.h>
2
#include <linux/kernel.h>
3

4
int foo;
5

6
static int send(){...}
7

8

9
static SIMPLE_DEV_PM_OPS(myDrv_pm, myDrv_suspend, myDrv_resume);
10
static struct platform_driver myDrv = {
11
  .driver          = {
12
    .name    = "myDriver",
13
    .pm      = &myDrv_pm,
14
  },
15
};
16

17

18
static int __init init_myDrv(void)
19
{ ...
20
  foo = bar();
21
}
22

23
module_init(init_myDrv);


Danke
#4565966
Lesenswert?
• ▲
▼
Wenn schon, dann "static int foo" ;) Das hält den Namespace sauber... 
Kann man aber machen (und machen auch viele), wenn der Wert der Variable 
unabhängig von einer HW-Instanz und auch der Instanz eines 
Filedeskriptors ist und auch in Zukunft bleiben wird. Der Code wird 
nicht übersichtlicher, wenn man dauernd auf Instanz-Variablen mit -> 
zugreifen muss.
Gast #4566673
Lesenswert?
• ▲
▼
Supi, danke Georg.

Ich möchte mir aber den Fall offen halten, dass der Treiber sowohl für 
HW_1 und auch HW_2 nutzbar ist.
Sprich, "int foo" könnte für verschiedene Nutzer unterschiedlich sein.

Wie könnte ich hier "int foo" in einer struct verstecken?
Gast #4566679
Lesenswert?
• ▲
▼
Indem du, dort ein struct statt einen int hinsetzt.
1
typedef struct {
2
   int test;
3
} test_struct;
4

5
...
6
test_struct.test = 'A';

Aber wie gesagt, mach es static, wenn global, sonst sieht das der ganze 
Kernel.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren