Linux RS232/485/GPS
-
RS232、 RS485 以及 GPS 模块接口通通连接到了 I.MX6U 的 UART3 接口上,因此这些外设最终都归结为 UART3 的串口驱动。
-
Linux 下 UART 驱动框架
-
Linux 也提供了串口驱动框架,只需要按照相应的串口框架编写驱动程序即可。
-
串口驱动没有什么主机端和设备端之分,就只有一个串口驱动,而且这个驱动也已经由 NXP 官方已经编写好了,我们真正要做的就是在设备树中添加所要使用的串口节点信息。
-
当系统启动以后串口驱动和设备匹配成功,相应的串口就会被驱动起来,生成/dev/ttymxcX(X=0….n)文件。
-
uart_driver 结构体表示 UART 驱动, uart_driver 定义在 include/linux/serial_core.h 文件
-
每个串口驱动都需要定义一个 uart_driver,加载驱动的时候通过 uart_register_driver 函数向系统注册这个 uart_driver
-
uart_port 表示一个具体的 port, uart_port 定义在 include/linux/serial_core.h 文件
-
uart_port 中最主要的就是第 235 行的 ops, ops 包含了串口的具体驱动函数,
-
uart_port 中的 ops 成员变量很重要,因为 ops 包含了针对 UART 具体的驱动函数, Linux 系统收发数据最终调用的都是 ops 中的函数。 ops 是 uart_ops类型的结构体指针变量, uart_ops 定义在 include/linux/serial_core.h 文件
-
UART 驱动编写人员需要实现 uart_ops,因为 uart_ops 是最底层的 UART 驱动接口,是实实在在的和 UART 寄存器打交道的。关于 uart_ops 结构体中的这些函数的具体含义请参考Documentation/serial/driver 这个文档。
-