1、首先硬件原理图上需要确认使用的是哪个串口,比如我这里使用的是串口uart4:
2、其次在kernel需要把对应串口的节点使能打开(dts或者dtsi文件中节点配置):
dts里面打开使能(文件:arch/arm64/boot/dts/rockchip/rk3399-box-rev2-hdmi.dts):
&uart4 {
status = "okay";
};
dtsi里面的资源描述(文件:./arch/arm64/boot/dts/rockchip/rk3399.dtsi):
uart4: serial@ff370000 {
compatible = "rockchip,rk3399-uart", "snps,dw-apb-uart";
reg = <0x0 0xff370000 0x0 0x100>;
clocks = <&pmucru SCLK_UART4_PMU>, <&pmucru PCLK_UART4_PMU>;
clock-names = "baudclk", "apb_pclk";
interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH 0>;
reg-shift = <2>;
reg-io-width = <4>;
pinctrl-names = "default";
pinctrl-0 = <&uart4_xfer>;
status = "disabled";
};
3、驱动设备注册log
debug串口有以下log打印,说明驱动注册成功了。如果pinctrl跟其他驱动有冲突的话,会报pinctrl配置失败的log。
[ 0.398206] Serial: 8250/16550 driver, 6 ports, IRQ sharing disabled
[ 0.398748] ff180000.serial: ttyS0 at MMIO 0xff180000 (irq = 36, base_baud = 1500000) is a 16550A
[ 0.399227] ff370000.serial: ttyS4 at MMIO 0xff370000 (irq = 38, base_baud = 1500000) is a 16550A
3、测试验证uart是否通了
驱动起来后会注册ttySx设备。下面这个是对应的串口4
rk3399_all:/ # ls -l dev/ttyS4 //确认是否有串口节点
crw-rw-rw- 1 system system 4, 68 1970-01-01 00:06 dev/ttyS4
驱动会根据aliase,来对应串口编号,如下: serial0最终会生成ttyS0,serial3会生成ttyS3设备。
{
serial0 = &uart0;
serial1 = &uart1;
serial2 = &uart2;
serial3 = &uart3;
serial4 = &uart4;
};
验证方法: 镊子短接tx rx,然后在串口或者adb,敲入命令: echo “1234” > dev/ttyS4 && cat dev/ttyS4,可以实现数据自发自收(能够收发字符串:“1234”)!
rk3399_all:/ # echo "1234" > dev/ttyS4 && cat dev/ttyS4
1234