2012-08-17 13 views
10

Bei der Entwicklung eines Kernelmoduls unter Linux ist die Verwendung der C-Standardbibliothek nicht zulässig.
Wenn ich jedoch einige allgemeine Funktionen wie strcat() verwenden muss, wohin muss ich gehen?stdlib.h Alternative im Linux-Kernel?

Antwort

9

wünschen Was auch immer nicht in den Linux-Kernel implementiert ist, müssen Sie sich selbst implementieren oder von einem anderen Open-Source-Kernel-Modul ausleihen. Sie werden jedoch feststellen, dass strcat im Kernel implementiert ist.

Siehe die kernel API Dokumentation. Insbesondere der Basic C Library Functions Abschnitt für Ihre allgemeine Frage und der String Manipulation Abschnitt für Ihre spezifische Frage über strcat.

Sie möchten linux/string.h einschließen.

Ich weiß nicht, warum die Kernel-API-Dokumentation tatsächlich nicht die Header-Datei zeigt, die Sie enthalten müssen, um die Funktion zu erhalten. Aber wenn Sie nach etwas suchen, können Sie Ihre Suche auf /include/linux beschränken, da die Header-Dateien dort liegen, wenn sie Funktionen haben, die von verschiedenen Teilen des Kernels gemeinsam genutzt werden.

Header-Dateien außerhalb /include/linux enthalten Definitionen nur für Quelldateien, die sich im selben Verzeichnis wie der Header befinden. Die Ausnahme ist /arch/.../include, die architekturspezifische Header anstelle plattformunabhängiger Header enthält.

+0

Gibt es eine Liste der Header-Dateien, in denen diese Art von Funktionen gehalten werden? (wie du 'linux \ string.h' erwähnt hast) – Fairview

+0

@Fairview: Nicht dass ich finden könnte, was merkwürdig ist. Ich denke, Sie müssen die gewünschte Funktion in der Kernel-API suchen und danach in '/ include/linux' suchen. Ich habe mehr Details in meiner Antwort zu Header-Dateien im Kernel hinzugefügt und warum Sie Ihre Suche auf '/ include/linux' und seine Unterverzeichnisse beschränken können. – indiv

-1

Tut mir leid @eq - denke an eine andere Funktion.

Warum nicht

void (char *d, const char *s); 
{ 
    if (*d) 
    { 
     for (; *d; ++d) {} ; 
     --d; 
    } 
    strcpy(d, s); 
} 

Ich konnte strcpy tun, wenn Sie

+0

@indiv - Ups das Denken ist richtig. Diese Funktionen können jederzeit erreicht werden. –

+0

Sind wir alle glücklich wie - trotz dass eine String-Funktion eine Bibliothek benötigt ?! –

+0

... Und ist der Linux-Kernel in C geschrieben? –