2016-03-27 12 views
0

Ich nehme gerade eine Betriebssystemklasse an meiner Schule.versuchen, FIFO-Warteschlangensystemaufruf hinzuzufügen

Im Moment habe ich versucht, einen neuen Systemaufruf hinzuzufügen, der eine Warteschlange im Kernelbereich erstellt.

Ich versuche, drei Dinge zu tun:

1) in die Warteschlange stellen (entweder durch dynamisches Zuweisen oder einfach nur ein Array deklarieren)

2) enqueue

3) dequeue

Das Problem ist mit 1).

Hier ist ein Beispielcode für den Anruf Quellendateisystem:

asmlinkage long sys_allocqueue(unsigned int size){ 
    int *queue = kmalloc(sizeof(int) * size, GFP_KERNEL); 
    return 0; 
} 

und das ist nur zu erklären Array:

asmlinkage long sys_allocqueue(unsigned int size){ 
    int queue[size]; 
    return 0; 
} 

So oder so, ich bin eine Rendite von -1 erhalten, die ist ein Fehler für syscall in einer Testanwendung.

Ich habe keine Ahnung, warum das nicht funktioniert.

P.S.

Ich habe auch über die Verwendung von kfifo.h zum Erstellen einer Warteschlange herausgefunden, aber das hat auch nicht gut funktioniert.

+1

Definition 'asmlinkage lang sys_ *' nicht * automatisch * hinzufügen Systemaufruf in den Kernel, müssen Sie ändern 'entry.S' Datei in Arch-spezifischen Code für den Kernel Kenntnis neuer syscall Eintrag machen. Googeln Sie einfach für "Systemaufruf in Linux Kernel hinzufügen". – Tsyvarev

Antwort

0

Es war Kernel Kompilierung Problem

Nach dem Übersetzen, beim Neustart, mein Ubuntu gestoppt, so dass ich sofort beenden alles und stellte sich wieder ein.

Das Problem begann danach.

Ich habe es neu kompiliert und neu gestartet, nicht durch sudo reboot, sondern einfach durch Herunterfahren und wieder einschalten.

Jetzt funktioniert es wieder.

Verwandte Themen