Ich habe gerade gelesen, dass Linux-Kernelmodule nicht auf dem Bildschirm drucken können und daher printf
nicht funktionieren. Hat das etwas mit der Interrupt-Behandlung zu tun oder warum ist das so?
Ich erinnere mich, dass ich beim Lernen von C und Assembler etwas printf
davon nicht verwenden konnte, weil die Interrupts deaktiviert waren.
Antwort1
Im Kernel printf
funktioniert es nicht, da es nicht implementiert ist! Sie verwendenprintk
stattdessen (oder early_printk
in sehr frühem Code, bevor die Konsole eingerichtet wird). printk
ist sehr sorgfältig codiert, sodass es von überall und unter allen Umständen sicher aufgerufen werden kann (insbesondere muss kein Speicher zugewiesen werden). Es implementiert praktisch dieselbe API wie printf
, mit dem Zusatz einer Protokollebene, um die Wichtigkeit der gedruckten Nachricht anzuzeigen, und Formatbezeichnern, dienützlich im Kernel.