【问题标题】:Implementation of putc in Versatile ARM LATEST Kernel-4.6putc 在 Versatile ARM LATEST Kernel-4.6 中的实现
【发布时间】:2016-08-14 05:50:21
【问题描述】:

我正在尝试了解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?

【问题讨论】:

    标签: debugging linux-kernel arm embedded-linux


    【解决方案1】:

    多功能板支持代码已转换为多平台内核模型 (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 )。在多功能板的情况下,CONFIG_DEBUG_LL_INCLUDE 被定义为 arch/arm/include/debug/pl01x.S,实际上您可以在其中找到这些宏。

    【讨论】:

    猜你喜欢
    • 2016-11-14
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多