Skip to main content

换Log输出的UART口

1. 查看uboot配置

以x1600e_halley6_nand_factory_defconfig编译配置为例

bhu@bhu-PC:~/work/build$ grep -nr "uboot_" configs/x1600e_halley6_nand_factory_defconfig          //查看uboot配置
3:APP_uboot_toolchain_dir=../tools/toolchains/mips-gcc520-glibc222
4:APP_uboot_dir=../bootloader/uboot-x2000
5:APP_uboot_config=x1600e_base_halley6_xImage_sfc_nand //uboot配置文件

在bootloader/uboot-x2000目录下的boards.cfg文件搜索uboot配置

bhu@bhu-PC:~/work/build$ grep -nr "x1600e_base_halley6_xImage_sfc_nand" ../bootloader/uboot-x2000/boards.cfg 
674:x1600e_base_halley6_xImage_sfc_nand mips xburst x1600_base ingenic x1600 x1600_base:SPL_SFC_NAND,MTD_SFCNAND,SPL_OS_BOOT,SPL_PARAMS_FIXER,X1600E_DDR

2. 修改uboot配置

可以看到使用的配置是x1600_base ,在x1600_base: 后面可以设置打印uart口,格式为SYS_UART_INDEX=x,不添加默认使用x1600_base的

x1600_base.h位于bootloader/uboot-x2000/include/configs

#ifndef __X1600_BASE_H__
#define __X1600_BASE_H__

#define CONFIG_ROOTFS_SQUASHFS
#define CONFIG_ROOTFS2_SQUASHFS
#define CONFIG_ARG_QUIET //去掉这个可以打开所有系统打印信息
#define CONFIG_SPL_SERIAL_SUPPORT

#include "x1600_base_common.h" //实际配置

#endif /* __X1600_BASE_H__ */

实际配置在同一目录下,可以对uart口及波特率进行修改,这里uart口的设置优先级小于前面x1600_base:后面设置的

/*

* uart setting
*/
#ifndef CONFIG_SYS_UART_INDEX
#define CONFIG_SYS_UART_INDEX 2 //uart口
#endif

#ifndef CONFIG_BAUDRATE
#define CONFIG_BAUDRATE 3000000 //波特率
#endif

3. 问题排查

若无串口输出,查看uart口和波特率是否与配置一致,新增串口需要在kernel中添加

以x1600e_halley6_nand_factory_defconfig编译配置为例,查看kernel中关于uart的配置

bhu@bhu-PC:~/work/build$ grep -nr "kernel" configs/x1600e_halley6_nand_factory_defconfig      //先查看kernel的配置
6:APP_kernel_dir=../kernel/kernel-x2000
7:APP_kernel_config=x1600_halley6_module_base_linux_sfc_nand_defconfig //kernel配置文件

配置文件位于kernel/kernel-x2000/arch/mips/configs目录下

bhu@bhu-PC:~/work/kernel/kernel-x2000/arch/mips/configs$ grep -nr ".dts"  ./x1600_halley6_module_base_linux_sfc_nand_defconfig

70:CONFIG_DT_X1600_MODULE_BASE_DTS_FILE="x1600_halley6_module_base.dts" //关于uart配置

x1600_halley6_module_base.dts位于kernel/kernel-x2000/arch/mips/boot/dts/ingenic目录下,可以对需要用到的串口进行添加修改

#include <dt-bindings/input/input.h>
#include "x1600.dtsi"
#include <dt-bindings/interrupt-controller/irq.h>
#include <generated/autoconf.h>

/ {
compatible = "ingenic,x1600_halley6_module_base", "ingenic,x1600";
};

&uart0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart0_pb>;
};

&uart1 {
status = "disable";
pinctrl-names = "default";
pinctrl-0 = <&uart1_pb>;
};

&uart2 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart2_pb>;
};

&uart3 {
status = "disable";
pinctrl-names = "default";
pinctrl-0 = <&uart3_pb>;
};

参考串⼝引脚定义在kernel/kernel-x2000/arch/mips/boot/dts/ingenic目录下的x1600-pinctrl.dtsi文件

#include <dt-bindings/pinctrl/ingenic-pinctrl.h>

&pinctrl {

uart0_pin: uart0-pin {
uart0_pb: uart0-pb {
ingenic,pinmux = <&gpb 7 10>;
ingenic,pinmux-funcsel = <PINCTL_FUNCTION0>;
};
};
uart1_pin: uart1-pin {
uart1_pb: uart1-pb {
ingenic,pinmux = <&gpb 2 5>;
ingenic,pinmux-funcsel = <PINCTL_FUNCTION1>;
};
};

uart2_pin: uart2-pin {
uart2_pa: uart2-pa {
ingenic,pinmux = <&gpa 30 31>;
ingenic,pinmux-funcsel = <PINCTL_FUNCTION2>;
};
uart2_pb: uart2-pb {
ingenic,pinmux = <&gpb 0 1>;
ingenic,pinmux-funcsel = <PINCTL_FUNCTION1>;
};
};

uart3_pin: uart3-pin {
uart3_pb: uart3-pb {
ingenic,pinmux = <&gpb 4 5>;
ingenic,pinmux-funcsel = <PINCTL_FUNCTION0>;
};
uart3_pd: uart3-pd {
ingenic,pinmux = <&gpd 4 5>;
ingenic,pinmux-funcsel = <PINCTL_FUNCTION2>;
};
};