作为短距离、低速、串行和全双工数据传输的标准接口,UART广泛应用于各种设备间的通信
在Linux系统环境下,修改UART配置是开发过程中常见且重要的任务
本文将深入探讨Linux系统下UART修改的各个方面,包括修改UART引脚、端口设置以及具体实现步骤,帮助读者更好地掌握这一技术
一、UART基础与Linux下的UART设备 UART(Universal Asynchronous Receiver/Transmitter)是一种用于串行通信的协议,它允许设备以异步方式发送和接收数据
在PC中,串口一般指COM口,即串行通讯端口,使用RS-232电平,具有9个引脚;而在嵌入式系统中,串口通常指UART口,使用TTL电平,一般仅需要3个引脚
在Linux系统中,串口设备文件位于/dev目录下,常见的命名规则为/dev/ttyS或/dev/ttyUSB
例如,COM1串口在Linux下可能被命名为/dev/ttyS0,而COM2则可能被命名为/dev/ttyS1
这种命名方式便于开发者通过文件操作接口对串口进行读写操作
二、Linux下UART配置的修改 在Linux系统中,修改UART配置通常涉及以下几个步骤:修改设备树(Device Tree)、调整内核启动参数(bootargs)、以及配置串口参数
下面将以全志Tina Linux为例,详细讲解如何修改UART配置
1. 修改设备树(Device Tree) 设备树是Linux内核用于描述硬件设备的一种数据结构,通过修改设备树文件(.dts文件),可以调整内核对硬件设备的识别与配置
以全志F133-A(D1s)为例,若要将UART0更改为UART1,首先需要修改设备树文件
具体步骤如下: - 找到并编辑设备树文件,路径通常为:`device/config/chips/d1s/configs/nezha/board.dts`
- 在该文件中,找到UART0和UART1的配置部分,将UART0的状态设置为disabled,将UART1的状态设置为okay
修改前: &uart0 { pinctrl-names = default, sleep; pinctrl-0 = <&uart0_pins_a>; pinctrl-1 = <&uart0_pins_b>; status = okay; }; &uart1 { pinctrl-names = default, sleep; pinctrl-0 = <&uart1_pins_a>; pinctrl-1 = <&uart1_pins_b>; status = disabled; }; 修改后: &uart0 { pinctrl-names = default, sleep; pinctrl-0 = <&uart0_pins_a>; pinctrl-1 = <&uart0_pins_b>; status = disabled; // 关闭UART0 }; &uart1 { pinctrl-names = default, sleep; pinctrl-0 = <&uart1_pins_a>; pinctrl-1 = <&uart1_pins_b>; status = okay; // 启用UART1 }; 2. 修改内核启动参数(bootargs) 内核启动参数(bootargs)是内核启动时传递给内核的一系列配置参数,通过修改这些参数,可以调整内核的行为
在Tina Linux中,修改内核启动参数的步骤如下: - 找到并编辑启动参数配置文件,路径通常为:`device/config/chips/d1s/configs/default/env.cfg`
- 在该文件中,找到console参数,将其修改为指向新的UART端口
例如,将`console=ttyS0,115200`修改为`console=ttyS1,115200`
修改前: kernel command arguments earlyprintk=sunxi-uart,0x02500000 initcall_debug=0 console=ttyS0,115200 修改后: kernel command arguments earlyprintk=sunxi-uart,0x02500400 initcall_debug=0 console=ttyS1,115200 注意:`earlyprintk`参数也需要相应修改为新的UART地址
3. 修改BOOT0与Uboot的串口配置 在一些情况下,还需要修改BOOT0和Uboot的串口配置,以确保它们与新的UART端口匹配
以全志芯片为例,修改BOOT0与Uboot的串口配置通常涉及编辑`sys_config.fex`文件
具体步骤如下: - 找到并编辑`sys_config.fex`文件,路径可能因具体平台和开发板而异,例如:`device/config/chips/d1s/configs/nezha/sys_config.fex`
- 在该文件中,找到`uart_para`部分,修改`uart_debug_port`、`uart_debug_tx`和`uart_debug_rx`参数,以指向新的UART端口和引脚
修改前:
ex
【uart_para】
uart_debug_port = 0
uart_debug_tx = port:PF2<3><1>
此外,还需要修改Uboot的配置文件,以指定新的控制台索引 例如,在`configs/sun20iw1p1_defconfig`文件中添加或修改以下配置:
CONFIG_SPECIFY_CONSOLE_INDEX=y
CONFIG_CONS_INDEX=2 # UART 1+1 = 2(串口号+
三、Linux下UART设备的编程与调试
在成功修改UART配置后,开发者可以通过Linux提供的串口编程接口对UART设备进行读写操作 常见的串口编程接口包括`open`、`read`、`write`、`tcgetattr`、`tcsetattr`等函数
以下是一个简单的串口读写示例