换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>;
};
};