如何使用ARM64的早期printk功能?

时间:2017-03-23 04:08:17

标签: linux linux-kernel arm linux-device-driver arm64

我正在尝试将/account/register?view=xyz用于early printk架构,但没有这样的功能。在arm64中有一个名为arm64的内容替换earlycon,但其用法我不知道。我需要在初始化真正的控制台之前将消息打印到串行控制台。有没有办法在earlyprintk使用arm64进行此操作。我将一个名为earlycon的补丁应用于arm64: Add simple earlyprintk support,但未成功应用。 kernel 3.18代替arm64使用了什么?

1 个答案:

答案 0 :(得分:0)

可以使用设备树选择的节点或使用引导参数来链接功能性uart驱动程序。

在开始使用它之前,您应该检查平台UART驱动程序是否支持EARLYCON。例如,直接从owl-uart.c

复制
static int __init
owl_uart_early_console_setup(struct earlycon_device *device, const char *opt)
{
    if (!device->port.membase)
        return -ENODEV;

    device->con->write = owl_uart_early_console_write;

    return 0;
}
OF_EARLYCON_DECLARE(owl, "actions,owl-uart",
            owl_uart_early_console_setup);

在这里您可以看到UART驱动程序注册了它的早期控制台功能,该功能将由ARCH初始化代码(在start_kernel之前运行)调用。

两个选项,

  • 使用DTS条目:在所选节点中使用“ stdout-path”选项来指定要使用的串行/ uart驱动程序

    uart3: serial@e0126000 {
        compatible = "actions,s900-uart", "actions,owl-uart";
        reg = <0x0 0xe0126000 0x0 0x2000>;
        interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
        status = "okay";
    };
    
    aliases {
            serial3 = &uart3;
    };
    
    chosen {
            stdout-path = "serial3:115200n8";
    };
    

同样,该示例适用于here中的Actions SoC。有了此条目后,就需要通过u-boot或使用相同的选定节点“ bootargs”选项将bootargs设置为“ earlycon ”。

  • 另一种方法是使用“ earlycon”作为bootargs(如Earlyprink)显式指定驱动程序名称。 earlycon = owl-uart,e0126000 会要求内核使用UART驱动程序中的earylconsole定义,并将基地址用于虚拟和物理地址映射。

您可以找到更多详细信息here