在多功能ARM LATEST内核中实现putc-4.6

时间:2016-04-21 07:27:46

标签: debugging linux-kernel arm embedded-linux

我正在尝试了解linux打印方式

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

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

从这个File开始,函数decompress_kernel通过putstr()函数写入消息,该函数具有写入硬件寄存器uart的putc函数。

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

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

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

How kernel is printing the banner in latest kernel?

1 个答案:

答案 0 :(得分:3)

多功能电路板支持代码已转换为多平台内核模型(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,实际上你可以找到那些宏。