UART - 修改调试 UART
BOOT0 阶段
修改 BOOT0 阶段的 UART 引脚
BOOT0 阶段的调试打印配置文件是 sys_config.fex
文件,定义如下
[uart_para]
uart_debug_port = 0
uart_debug_tx = port:PD22<3><1><default><default>
uart_debug_rx = port:PD23<3><1><default><default>
其中
- uart_debug_port:使用的 UART 控制器号
- uart_debug_tx:tx 引脚
- uart_debug_rx:rx 引脚
- 引脚配置的含义:
port:端口+组内序号<功能分配><内部电阻状态><驱动能力><输出电平状态>
功能分配请对应手册,填写对应控制器的引脚MUX
关闭/开启BOOT0日志打印
配置 sys_config.fex 中的 debug_mode
项,0为关闭打印,8为打开全部打印。
[platform]
debug_mode = 0
修改 BOOT0 调试串口波特率
下面以配置波特率为 1500000 为例,演示配置波特率为 1500000
方法一:
在 board/sun300iw1p1/spinorfastboot.mk 文件中加入配置
CFG_UART_BAUD_1500000=y
方法二:
在 brandy/brandy-2.0/spl/include/arch/uart.h 中修改宏定义:
#define UART_BAUD 1500000
U-Boot 阶段
修改 U-Boot 阶段的 UART 引脚
U-Boot 阶段使用 BOOT0 配置好的控制器,直接输出UART打印,无需设置引脚,只需配置控制器。
例如设置控制器是 UART3,则需要找到对应的 U-Boot config 文件,这个文件使用 mboot 命令可以确定。
如上图所示,目前使用的是 sun300iw1p1_v821_defconfig
这份配置文件,所以前往 brandy/brandy-2.0/u-boot-2018/configs
找到这份配置文件,增加配置项目:
CONFIG_SPECIFY_CONSOLE_INDEX=y
CONFIG_CONS_INDEX=4
这里的 CONFIG_CONS_INDEX 则代表控制器的编号+1,UART0 对应 1,UART1 对应 2 以此类推。
关闭/开启UBOOT日志打印
UBOOT 的日志打印受两个部分控制,包括 BOOT0 的日志打印和UBOOT自己的配置。
如果 BOOT0 配置关闭了打印,则 UBOOT 也不会输出打印,如果 BOOT0 开启打印只想关闭 UBOOT 的打印,可以配置对应板级方案下的 uboot-board.dts
找到 platform
节点,设置 debug_mode = <0>;
修改 U-BOOT 调试串口波特率
找到对应的 U-Boot config 文件,这个文件使用 mboot 命令可以确定。
如上图所示,目前使用的是 sun300iw1p1_v821_defconfig
这份配置文件,所以前往 brandy/brandy-2.0/u-boot-2018/configs
找到这份配置文件,增加配置项目:
CONFIG_BAUDRATE=1500000
Kernel 阶段
修改内核阶段的 UART 引脚
内核首先需要配置引脚:
uart2_pins_default: uart2_pins@0 {
pins = "PC4", "PC5";
function = "uart2";
};
uart2_pins_sleep: uart2_pins@1 {
pins = "PC4", "PC5";
function = "io_disabled";
};
然后启用对应的 UART 控制器
&uart2 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&uart2_pins_default>;
pinctrl-1 = <&uart2_pins_sleep>;
status = "oaky";
};
如果GPIO是PL口的,由于 PL 口位于 RTC GPIO 控制器中,需要新建 rtc_pio
节点
&rtc_pio {
r_uart3_pins_default: r_uart3_pins@0 {
pins = "PL2", "PL3";
function = "uart3";
};
r_uart3_pins_sleep: r_uart3_pins@1 {
pins = "PL2", "PL3";
function = "io_disabled";
};
};
然后引用并启用对应的控制器节点
&uart3 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&uart3_pins_default>;
pinctrl-1 = <&uart3_pins_sleep>;
status = "okay";
};
PL 口电平可配 1.8V/3.3V。配置方法具体可参考:修改 PL 口默认电压
然后修改控制台位置,对于常电方案,修改 env.cfg 中的 console 配置即可。以 perf2 为例,修改 device/config/chips/v821/configs/perf2/env.cfg
console=ttyS3,115200
修改 earlyprintk 到对应的控制器,比如这里 UART3,其控制器基地址对照手册是 0x42500C00
将其修改到对应的基地址即可
对于快起方案,修改设备树中的 console 配置。以 perf2_fastboot 为例,修改 device/config/chips/v821/configs/perf2_fastboot/linux-5.4-ansc/board.dts
console=ttyS3,115200
修改 earlyprintk 到对应的控制器,比如这里 UART3,其控制器基地址对照手册是 0x42500C00
将其修改到对应的基地址即可
关闭/开启内核日志打印
内核打印等级(Kernel log levels)是指操作系统内核在打印日志信息时所使用的不同严重性级别。日志信息通常通过 dmesg
命令查看,或者写入到内核日志文件中。每个日志条目都有一个关联的日志级别,表示该条信息的紧急程度。
在 Linux 中,内核日志的等级通常由以下几个值表示,从最不重要到最重要:
- KERN_EMERG (0): 紧急情况。系统不可用的严重错误,通常用于系统崩溃等。
- KERN_ALERT (1): 警报。需要立即处理的问题。
- KERN_CRIT (2): 严重错误。表示严重的错误或异常,可能导致系统不稳定或功能丧失。
- KERN_ERR (3): 错误。运行时错误,通常需要关注但不一定立即修复。
- KERN_WARNING (4): 警告。表示潜在的危险或不一致,可能影响系统性能,但不影响系统功能。
- KERN_NOTICE (5): 注意。常规的非错误信息,用来表示可能需要注意的事件。
- KERN_INFO (6): 信息。普通的信息输出,用来提供系统运行状态或常规操作日志。
- KERN_DEBUG (7): 调试。调试信息,通常用于开发和诊断过程中的详细日志输出,输出量最大。
可以通过 dmesg
查看不同级别的内核日志信息,也可以通过修改内核的 printk
日志级别来控制哪些级别的日志信息可以输出。例如,使用 dmesg -n <level>
命令可以控制日志级别,指定输出某一日志级别及其更高等级的日志。
对于常电方案,修改 env.cfg 中的 console 配置即可。以 perf2 为例,修改 device/config/chips/v821/configs/perf2/env.cfg
loglevel=1
对于快起方案,修改设备树中的 console 配置。以 perf2_fastboot 为例,修改 device/config/chips/v821/configs/perf2_fastboot/linux-5.4-ansc/board.dts
loglevel=1
修改内核调试串口波特率
对于常电方案,修改 env.cfg 中的 console 配置即可。以 perf2 为例,修改 device/config/chips/v821/configs/perf2/env.cfg
console=ttyS0,1500000
对于快起方案,修改设备树中的 console 配置。以 perf2_fastboot 为例,修改 device/config/chips/v821/configs/perf2_fastboot/linux-5.4-ansc/board.dts
console=ttyS0,1500000
RTOS CPU1 串口
修改 RTOS 的 UART 引脚
RTOS 的 UART 引脚配置位于 rtos/board/v821_e907
中对应板级下,这里以 perf2 为例,默认配置 PC4,PC5 的 UART2 为调试打印脚。文件位于 rtos/board/v821_e907/perf2/configs/sys_config.fex
下面将他修改到 PD22 PD23 的 UART0
然后修改配置文件,修改到 UART0,文件路径:rtos/lichee/rtos/projects/v821_e907/perf2/defconfig
,找到 CONFIG_CLI_UART_PORT
设置 0
CONFIG_CLI_UART_PORT=0
关闭/开启 RTOS 日志打印
修改配置文件,这里以 PERF2 为例,文件路径:rtos/lichee/rtos/projects/v821_e907/perf2/defconfig
关闭全部输出:
CONFIG_DISABLE_ALL_UART_LOG=y
CONFIG_UART_MULTI_CONSOLE=n
CONFIG_UART_MULTI_CONSOLE_AS_MAIN=n
开启输出:
CONFIG_DISABLE_ALL_UART_LOG=n
CONFIG_UART_MULTI_CONSOLE=y
CONFIG_UART_MULTI_CONSOLE_AS_MAIN=y
修改 CPU1 RTOS 的波特率
修改CPU1 UART 驱动中的 uart_defconfig 结构体配置,位于 rtos/lichee/rtos/drivers/rtos-hal/hal/source/uart/hal_uart.c
_uart_config_t uart_defconfig =
{
.baudrate = UART_BAUDRATE_1500000,
.word_length = UART_WORD_LENGTH_8,
...
};
UART 时钟源
V821 平台与其他平台不同,其默认时钟源是 192MHz(其他平台一般是24MHz跟随晶振)