i.MX6ULL终结者Linux RS232/485驱动实验i.MX6UL UART驱动分析

本文详细介绍了I.MX6ULL soc的UART驱动实现,从设备树配置到平台驱动框架,再到uart_driver的初始化和注册,以及imx_port结构体的初始化。重点解析了如何通过serial_imx_probe函数配置uart_port,并使用imx_pops结构体中的底层驱动函数集进行操作。
摘要由CSDN通过智能技术生成

1 uart的platform驱动框架

首先看一下在设备树文件imx6ull.dtsi中,串口UART3对应的设备节点,内容如下:

1 uart3: serial@021ec000 {
    
2      compatible = "fsl,imx6ul-uart", 
3                  "fsl,imx6q-uart", "fsl,imx21-uart"; 
4      reg = <0x021ec000 0x4000>; 
5      interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>; 
6      clocks = <&clks IMX6UL_CLK_UART3_IPG>, 
7              <&clks IMX6UL_CLK_UART3_SERIAL>; 
8      clock-names = "ipg", "per"; 
9      dmas = <&sdma 29 4 0>, <&sdma 30 4 0>; 
10         dma-names = "rx", "tx"; 
11         status = "disabled"; 
12 }; 

其中,根据compatible属性值:“fsl,imx6ul-uart”、“fsl,imx6q-uar”和“fsl,imx21-uart”。在内核源码中搜索这三个值即可找到对应的 UART 驱动文件,此文件为drivers/tty/serial/imx.c,在此文件中可以找到如下内容:

267 static struct platform_device_id imx_uart_devtype[] = {
    
268        {
    
269            .name = "imx1-uart", 
270            .driver_data = (kernel_ulong_t) &imx_uart_devdata[IMX1_UART], 
271        }, {
    
272            .name = "imx21-uart", 
273            .driver_data = (kernel_ulong_t) &imx_uart_devdata[IMX21_UART], 
274        }, {
    
275            .name = "imx6q-uart", 
276            .driver_data = (kernel_ulong_t) &imx_uart_devdata[IMX6Q_UART], 
277        }, {
    
278     /* sentinel */ 
279        } 
280 }; 
281 MODULE_DEVICE_TABLE(platform, imx_uart_devtype); 
282 
283 static const struct of_device_id imx_uart_dt_ids[] = {
    
284        {
    .compatible = "fsl,imx6q-uart", .data = &imx_uart_devdata[IMX6Q_UART], }, 
285      {
    .compatible = "fsl,imx1-uart", .data = &imx_uart_devdata[IMX1_UART], }, 
286        {
    .compatible = "fsl,imx21-uart", .data = &imx_uart_devdata[IMX21_UART], }, 
287        {
    /* sentinel */ } 
288 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值