linux uart寄存器 代替 printk,Dmesg and Linux kernel log

Earlyprintk

earlyprintk是Linux内核调试函数,可用于跟踪在初始化常规控制台之前发生的内核问题。

Linux内核配置

为了启用Earlyprintk功能,Linux内核配置必须使用Linux内核Menuconfig工具(Menuconfig或如何配置内核)选中 CONFIG_DEBUG_LL,CONFIG_STM32MP1_DEBUG_UART和CONFIG_EARLY_PRINTK 这三个选项:

Symbol: DEBUG_LL

Location:

Kernel hacking --->

[*] Kernel low-level debugging functions

Symbol: STM32MP1_DEBUG_UART

Location:

Kernel hacking --->

[*] Kernel low-level debugging functions

(*) Use STM32MP1 UART for low-level debug

Symbol: EARLY_PRINTK

Location:

Kernel hacking --->

[*] Early printk

串口配置

启用Linux内核配置CONFIG_STM32MP1_DEBUG_UART时,它将配置要使用的UART寄存器的地址。

默认情况下,在STM32MP1板上,UART4用于Linux内核的控制台,并且在所有引导阶段都用于扩展。

如果新板上的UART端口不同,则必须应用以下更改:

更新CONFIG_DEBUG_UART_PHYS的值,以选择调试控制台的UART端口

Symbol: DEBUG_UART_PHYS [=0x40010000]

Location:

Kernel hacking --->

[*] Kernel low-level debugging port (Use STM32MP1 UART4 for low-level debug)

(0x40010000) Physical base address of debug UART

更新CONFIG_DEBUG_UART_VIRT的值,定义要使用的虚拟地址。

Symbol: DEBUG_UART_VIRT [=0xFE010000]

Location:

Kernel hacking --->

[*] Kernel low-level debugging port (Use STM32MP1 UART4 for low-level debug)

(0xFE010000) Virtual base address of debug UART

定义虚拟地址时应遵循以下规则:

-必须保留20个低权重位(在启用LPAE的情况下为21),以对齐1MB的区域大小(在LPAE中启用2MB)。

-必须将其映射到vmalloc区域的高位地址,以免被从低位地址开始声明的内核覆盖:即,这里我们选择0x FE0 xxxxx

CONFIG_DEBUG_UART_PHYS: 0x40010000 /* UART4 */

CONFIG_DEBUG_UART_VIRT: 0xFE010000

请在下表中找到STMP32MP1的USART/UART:

请注意,用于控制台的UART端口必须与引导链的所有组件对齐:FSBL(TF-A),SSBL-U-Boot)和Linux内核

尤其是因为Linux内核没有为UART端口配置所有设置寄存器,因为这是由SSBL完成的(U- Boot- 如何调试),

另请参见TF-A-如何为FSBL更改进行调试)

追踪

Earlyprintk跟踪会自动推送到前面定义的串行控制台,并且还会添加到内核环形日志缓冲区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值