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.
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