一、问题描述
在调试hi3519V101 RS485的时候,用到UART1 串口,在内核中已经有了这个设备号/dev/ttyAMA1, 但是在程序中 open 这个设备时,无法打开。
二、原因分析
首先了解到HI3519的串口挂载到AMBA总线上,设备描述符已经出现,应该驱动是有的,但是使用命令: cat /proc/tty/driver/ttyAMA 显示:
~ # cat /proc/tty/driver/ttyAMA
serinfo:1.0 driver revision:
0: uart:PL011 rev2 mmio:0x12100000 irq:36 tx:912 rx:28 RTS|CTS|DTR|DSR|CD|RI
无uart1 信息。有可能是没有使能驱动。
进一步查看
三、解决方法
修改内核dts 配置,路径:..\Hi3519V101_SDK_V1.0.1.0\osdrv\opensource
\kernel\linux-3.18.y\arch\arm\boot\dts 下的hi3519v101 的配置文件。
打开 hisi-hi3519v101.dtsi 文件
#include
/ {
aliases {
serial0 = &uart0;
serial1 = &uart1; #添加这一行 uart1
i2c0 = &i2c_bus0;
i2c1 = &i2c_bus1;
打开 hisi-hi3519v101-demb.dts 文件
&uart0 {
status = "okay";
};
&uart1 {
status = "okay";
};
&dual_timer0 {
status = "okay";
};
添加一个uart1 状态,使之OK。
同样打开 hisi-hi3519v101-hmp-demb.dts 文件
&uart0 {
status = "okay";
};
&uart1 {
status = "okay";
};
&dual_timer0 {
status = "okay";
};
添加一个uart1 状态,使之OK。
修改好后,编译3519内核,然后烧录到目标板中进行测试。
内核编译命令:
cp arch/arm/configs/hi3519v101_big_little_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- clean
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- uImage
四、测试
烧录后内核启动log 如下:
Serial: AMBA PL011 UART driver
12100000.uart: ttyAMA0 at MMIO 0x12100000 (irq = 36, base_baud = 0) is a PL011 rev2
console [ttyAMA0] enabled
12101000.uart: ttyAMA1 at MMIO 0x12101000 (irq = 37, base_baud = 0) is a PL011 rev2
SCSI subsystem initialized
命令查看状态:
cat /proc/tty/driver/ttyAMA
/home/ko_modify # cat /proc/tty/driver/ttyAMA
serinfo:1.0 driver revision:
0: uart:PL011 rev2 mmio:0x12100000 irq:36 tx:11451 rx:391 RTS|CTS|DTR|DSR|CD|RI
1: uart:PL011 rev2 mmio:0x12101000 irq:37 tx:495 rx:0 RTS|DTR|DSR|CD|RI