linux系统中串口驱动的基本实现原理

简介: linux系统中串口驱动的基本实现原理

第一:linux系统中UART驱动框架

      向SPI一样,Linux系统也提供了串口驱动框架,我们需要按照相应的串口框架编写驱动程序即可。串口驱动没有主机端和设备端之分,就只有一个串口驱动,我们真正要做的就是在设备数中添加所要使用的串口节点信息。当系统启动以后串口和设备匹配成功,相应的串口就会被驱动起来,生成/dev/ttymxcX文件。

//串口驱动框架还是需要知道的
struct  uart_driver{
      struct module  *owner;     //模块所属者
      const char *drvier_name;   //驱动名字
      const char *dev_name;      //设备名字 
      int  major;                //主设备号
      int  minor;                //此设备号
      int   nr;                  //设备树
      struct consle    *cons;    //控制台
      struct uart_state    *state;
      struct tty_driver   *tty_driver;
};
//串口驱动要定义uart_driver,向系统中注册这个uart_driver
int   uart_register_driver(struct uart_driver *drv)

第二:uart_ops的具体实现

     uart_port中的ops成员变量很重要,因为ops包含了针对UART具体的驱动函数,Linux系统收发数据最终调用的都是ops中的函数。ops是uart_ops类型的结构体指针变量。

struct  uart_ops{
    unsigned int (*tx_empty)(struct uart_port  *);
    void (*stop_tx)(struct uart_port  *);
};

    第三:串口驱动设备树的添加  

    大部分的UART已经编写好了,我们要做的就是在设备树中添加UART3对应的设备节点即可。

//UART3对应的pinctl子节点
pinctrl_uart3: uart3grp {
  fsl,pins = <
  MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0X1b0b1
  MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0X1b0b1
 >;
};

     uart1是UART1,默认在板子上使用到的外设功能,然后加上UART3对应的uart3节点的内容如下:

&uart3{
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_uart3>;
    status = "okay";
};

    总结:完成以后重新编译设备树启动对应的Linux,系统启动以后会生产一个为"/dev/ttymxc2"的设备文件。可以通过访问ttymxc2来实现对UART3的操作。

目录
相关文章
|
3天前
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
22 0
|
3天前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
14 0
|
1天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
14 6
|
5天前
|
Prometheus 监控 Cloud Native
【Linux】查看系统内存命令(详细讲解)
【Linux】查看系统内存命令(详细讲解)
|
7天前
|
Linux API C语言
FFmpeg开发笔记(一)搭建Linux系统的开发环境
本文指导初学者如何在Linux上搭建FFmpeg开发环境。首先,由于FFmpeg依赖第三方库,可以免去编译源码的复杂过程,直接安装预编译的FFmpeg动态库。推荐网站<https://github.com/BtbN/FFmpeg-Builds/releases>提供适用于不同系统的FFmpeg包。但在安装前,需确保系统有不低于2.22版本的glibc库。详细步骤包括下载glibc-2.23源码,配置、编译和安装。接着,下载Linux版FFmpeg安装包,解压至/usr/local/ffmpeg,并设置环境变量。最后编写和编译简单的C或C++测试程序验证FFmpeg环境是否正确配置。
27 8
FFmpeg开发笔记(一)搭建Linux系统的开发环境
|
7月前
|
缓存 Ubuntu Linux
Vim编辑器入门指南:安装、基本操作和高级技巧详解 | 适用于Linux系统
Vim编辑器入门指南:安装、基本操作和高级技巧详解 | 适用于Linux系统
273 0
|
8月前
|
Oracle 关系型数据库 Linux
Virtualbox上安装Linux系统(CentOS7)(图文超详细)
Virtualbox上安装Linux系统(CentOS7)(图文超详细)
247 0
|
1月前
|
关系型数据库 MySQL Linux
【VMware安装+centos 7Linux系统+MySQL安装】——在Linux系统中安装MySQL步骤,以及遇见的各种问题(如:vm两个虚拟网卡消失、vm网络适配器有感叹号等等)
【VMware安装+centos 7Linux系统+MySQL安装】——在Linux系统中安装MySQL步骤,以及遇见的各种问题(如:vm两个虚拟网卡消失、vm网络适配器有感叹号等等)
171 0
|
2月前
|
关系型数据库 MySQL Linux
MySQL 数据库安装详解(linux系统和windows系统)
MySQL 数据库是一种广泛使用的开源关系数据库管理系统。在 Linux 和 Windows 系统上安装 MySQL 数据库的步骤略有不同。
72 0
|
3月前
|
Linux 虚拟化 数据安全/隐私保护
VMware安装RHEL9.0版本Linux系统
最近在学习Linux,安装了Red Hat Enterprise Linux 的 9.0版本,简称RHEL9.0。RHEL9.0是Red Hat公司发布的面向企业用户的Linux操作系统的最新版本。我把它安装在虚拟机VMware里来减少电脑性能占用,也防止系统炸搞得我后面要重装。安装RHEL9.0还是有一些技巧的,本篇文章作为教程,指导如何在VMware里安装RHEL9.0版的Linux系统。
355 1