putc 在 Versatile ARM LATEST Kernel-4.6 中的实现

Implementation of putc in Versatile ARM LATEST Kernel-4.6

我正在尝试了解如何 linux 打印

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

消息甚至在它在 ARM Versatile Boad 中解压缩之前。

由此File函数decompress_kernel通过putstr()函数写入消息,该函数又具有写入硬件寄存器uart的putc函数。

putc 在 this 文件中实现,putc 直接写入 AMBA_UART_DR 寄存器,这些寄存器在不同架构之间是不同的,在不同芯片之间也不同.

但在最新的 kernel-4.6 中 this 已被弃用。 当我在最新内核中检查 ARM Versatile Boad 的 putc 实现时,它已被弃用,所以

他们如何在最新的 kernel-4.6 中实现,而 machine-specific 代码的其余部分仍然存在?

How kernel is printing the banner in latest kernel?

多功能板支持代码已转换为多平台内核模型 (ARCH_MULTIPLATFORM)。就像所有其他开发板支持的同类代码一样,现在它采用来自 arch/arm/include/debug/uncompress.h.

的 putc() 原型

相反,putc() 的实际实现是编码为 arch/arm/boot/compressed/debug.S.

的通用汇编函数

由于是通用的,debug.S 引用了几个宏(addruart、waituart、senduart、busyuart)以获取有关实际 UART 硬件的信息。这些宏在 CONFIG_DEBUG_LL_INCLUDE 选择的包含文件中定义(搜索 arch/arm/Kconfig.debug 查找它)。如果 Versatile 板 CONFIG_DEBUG_LL_INCLUDE 定义为 arch/arm/include/debug/pl01x.S,实际上您可以在其中找到这些宏。