博客
关于我
uart 驱动架构
阅读量:796 次
发布时间:2023-02-25

本文共 1471 字,大约阅读时间需要 4 分钟。

Linux 下 UART 驱动分析

TTY/UART 架构

在 Linux 系统中,TTY(伪终端)与 UART(通用异步串接接口)之间存在着密切的关联。TTY 可以看作是一个虚拟设备,它为用户提供了类似于真实终端的功能,而 UART 则是实现实际数据传输的物理或逻辑设备。在 Eagle2/imx 平台中,我们定义了五个串口设备,分别对应设备 ID 0 到 4。

UART 设备驱动

在 driver/tty/serial/imx.c 中,我们定义了 uart_driver,其名称为 ttymxc。通过调用 uart_driver_register 函数,我们可以注册一个 UART 驱动。由于 drv->nr 被定义为 8,因此我们分配了 8 个 uart_state 存储空间给 drv->state。接下来,我们对 uart_driver 中的 tty_driver 进行初始化,并调用 tty_register_driver 函数进行注册。

UART 端口绑定

为了实现 UART 端口与驱动的绑定,我们调用 uart_add_one_port 函数。这个函数不仅完成了 UART 设备的添加,还通过 uart_state 将 UART 端口与驱动绑定。具体来说,我们利用设备 ID 作为 uart_state 数组的索引,分配存储空间给对应的 UART 端口。由于我们需要添加五个 UART 设备,该函数被调用五次,分别为设备 ID 0 到 4。

关键数据结构

在 UART 设备中,以下三个数据结构是尤为重要的:

  • uart_driver:相当于设备驱动,负责管理 UART 端口的注册和初始化。
  • uart_port:相当于串口设备,具体实现了 UART 的数据传输功能。
  • uart_status:用于存储 UART 端口的运行状态。
  • 在 Eagle2/imx 系统中,我们通过 uart_add_one_port 函数创建了五个 UART 设备结点,分别对应设备号 0 到 4。这些设备结点的名称为 ttymxc0ttymxc4,位于 /dev 目录下。

    系统调用流程

    用户的数据首先经过系统调用到达内核。数据到达分配好的线路规程后,在 tty 线路规程中会经过格式化处理。我们通过 tty_struct 结构体将 tty_drivertty_ldisc 联系起来。具体来说,tty_struct 中包含了 index 字段,用于索引对应的 uart_status

    tty_driver 中,我们需要实现 tty_opentty_close 等接口函数,以控制设备的打开和关闭。tty_write 函数则负责将数据通过 uart_port 传输到硬件寄存器中。

    线路规程注册

    为了支持不同的数据传输协议,我们需要注册线路规程。目前我们主要使用 N_TTY 线路规程,其索引号为 0。对于蓝牙协议,线路规程号为 N_HCI,索引号为 13。我们可以通过以下步骤注册蓝牙线路规程:

    tty_register_ldisc(N_HCI, &tty_ldisc_N_HCI);

    注册完成后,我们将线路规程分配给 tty_struct,以便与 uart_port 进行通信。

    总结

    通过上述方法,我们可以在 Linux 系统中实现 UART 驱动的注册与使用。尽管目前我们主要使用 N_TTY 线路规程,但如果有机会,可以尝试将蓝牙协议移植到地层。尽管这项工作具有较高的复杂性,但它可以为我们的系统带来更多可能性。

    转载地址:http://ehpfk.baihongyu.com/

    你可能感兴趣的文章
    uni-app开发环境自动部署的一个误区(App running at...)
    查看>>
    Oracle GoldenGate Director安装和配置(无图)
    查看>>
    oracle instr函数详解
    查看>>
    Oracle Java所有版本的下载链接
    查看>>
    oracle ogg 单实例双向复制搭建(oracle-oracle)--Oracle GoldenGate
    查看>>
    oracle ORA-14402 OGG-01296
    查看>>
    oracle partition by list,深入解析partition-list 分区
    查看>>
    Oracle PL/SQL Dev工具(破解版)被植入勒索病毒的安全预警及自查通告
    查看>>
    oracle rac集群的东西之QQ聊天
    查看>>
    oracle scott趣事
    查看>>
    oracle script
    查看>>
    Oracle select表要带双引号的原因
    查看>>
    Oracle SOA Suit Adapter
    查看>>
    Oracle Spatial GeoRaster 金字塔栅格存储
    查看>>
    Oracle spatial 周边查询SQL
    查看>>
    Oracle Spatial空间数据库建立
    查看>>
    UML— 活动图
    查看>>
    oracle sqlplus已停止工作,安装完成客户端后sqlplus报“段错误”
    查看>>
    oracle SQLserver 函数
    查看>>
    oracle sql分组(group,根据多个内容分组)在select之后from之前 再进行select查询,复杂子查询的使用
    查看>>