2016-04-21 8 views
1

Ich versuche zu verstehen, wie LinuxImplementierung von putc in Versatile ARM neuesten Kernel-4.6

"Uncompressing Linux....... done, booting the kernel" 

Nachricht Druck, noch bevor es unkomprimiert selbst in ARM Versatile Boad.

Von diesem File schreibt die Funktion decappress_kernel die Nachricht durch putstr() - Funktion, die putc-Funktion hat, die auf Hardwareregister uart schreibt.

putc in this-Datei implementiert wird, schreibt putc direkt an AMBA_UART_DR Register und diese Register sind unterschiedlich über Architekturen und unterscheidet sich auch andere Chips zu über.

Aber im neuesten Kernel-4.6 wurde this veraltet. Wenn ich putc Implementierung für ARM Versatile Boad in neuester Kernel sein prüft wurde so

veraltet

, wie sie in neuesten Kernel-4.6 implementiert, wo als Rest machine-specific Code noch?

How kernel is printing the banner in latest kernel? 

Antwort

3

Der vielseitige Board-Support-Code wurde in das Multi-Platform-Kernel-Modell (ARCH_MULTIPLATFORM) konvertiert. Wie bei jedem anderen Board-Support-Code der gleichen Art, wird jetzt putc() Prototyp von arch/arm/include/debug/uncompress.h benötigt.

Stattdessen ist die eigentliche Implementierung von putc() eine generische Assembly-Funktion, die in arch/arm/boot/compressed/debug.S codiert ist.

Als generische, debug.S verweist auf einige Makros (addruart, waituart, senduart, busyuart), um Informationen über die tatsächliche UART-Hardware zu erhalten. Diese Makros sind in einer Include-Datei definiert, die von CONFIG_DEBUG_LL_INCLUDE ausgewählt wurde (suche arch/arm/Kconfig.debug). Im Fall der Versatile-Karte ist CONFIG_DEBUG_LL_INCLUDE als arch/arm/include/debug/pl01x.S definiert, wo Sie diese Makros tatsächlich finden.

+0

Danke, ich sah den Patch für ARCH_MULTIPLATFORM, aber ich verstehe nicht, wie es in generischer Weise implementiert wurde, jetzt habe ich es. –

+0

Jede Eingabe zu dieser Frage http://stackoverflow.com/questions/36621505/debugging-linux-kernel-using-gdb-in-qemu-unable-to-hit-function-or-given-adress –