RK3399之8250串口驱动
前言
内核版本4.4
平台 瑞芯微RK3399 8250串口
一、驱动整体框架
二、驱动结构体对象
1. struct uart_driver 串口驱动主要结构体,记录各个层对象,(tty层,和uart层)
2. |---struct tty_driver tty层结构体
3. |---struct uart_state uart层结构体
4. |---struct tty_port
5. |---struct uart_port 每个结构体对应硬件上每个uart
关系如下图所示
三、驱动代码流程
驱动加载由以下入口
8250_core.c-----> static int __init serial8250_init(void)这部分创建uart_driver结构体对象,结合上图,该结构体维系tty层与core层关系。
8250_dw.c-----> static int dw8250_probe(struct platform_device *pdev)这部分创建platform_driver,注册设备树中的uart口,生成uart_port对象,记录于uart_state中
1.8250_core.c的serial8250_init
个人理解代码里有三套串口设备注册代码,
方式一,嵌入式常用的方式,驱动通过与dts硬件信息匹配注册uart_port
方式二,PC机常用方式,注册PNP驱动,扫描PNP设备完成注册,
(PNP理解应该是pc板卡的superIO,比如PNP0501转换芯片可实现较少的GPIO转出多个GPIO和5个串口)
方式三,内核提供的初始化uart_port硬件信息的方式,目前看一般不用到。
参考链接: 内核实现的注册uart_port方式
注册对象:
struct uart_driver serial8250_reg
serial8250_init函数中主要代码:
ret = uart_register_driver(&serial8250_reg);
该函数主要完成以下动作:
(1)申请uart_state内存空间,uart_driver->uart_state[nr]
(2)申请tty_driver内存空间,并初始化成员
(3)初始化tty_port
(4)注册tty_driver驱动
2.8250_dw.c-----> static int dw8250_probe
static struct platform_driver dw8250_platform_driver = {.driver = {.name = "dw-apb-uart",.pm = &dw8250_pm_ops,.of_match_table = dw8250_of_match,.acpi_match_table = ACPI_PTR(dw8250_acpi_match),},.probe = dw8250_probe,.remove = dw8250_remove,
};module_platform_driver(dw8250_platform_driver);
static int dw8250_probe(struct platform_device *pdev)
这个驱动入口通过platform总线,.of_match_table = dw8250_of_match,通过名字table与设备树信息匹配。调用probe函数(.probe = dw8250_probe)
dw8250_probe函数主要完成以下动作
(1)声明临时变量struct uart_8250_port uart,初始化uart成员uart_port的参数,
(2)获取串口编号(硬件上uart0,uart1的序号0,1),赋值给临时变量uart_port中
(3)data->line = serial8250_register_8250_port(&uart);
uart = serial8250_find_match_or_unused(&up->port);
根据(2)的串口编号,从前面初始化的static struct uart_8250_port serial8250_ports[UART_NR]数组中获取相应的uart_port,再将临时变量uart_port的初始值传给获取到的uart_port
(4)ret = uart_add_one_port(&serial8250_reg, &uart->port);
四、串口读写流程
五、代码文件
driver/tty/serial/8250/8250_core.c
8250_dw.c
RK3399之8250串口驱动相关推荐
- 慢慢欣赏linux之串口驱动代码分析 - 基于powerpc 2.6.x版本
串口驱动分两阶段初始化 第一阶段 串口驱动没有初始化前的准备工作,包括设备树的解析,platform设备注册 asmlinkage void __init start_kernel(void) ...
- Linux串口驱动阅读笔记
sccv串口驱动学习–8250.c 本文主要记录学习CGEL3(基于Linux version 2.6.21.7) 中关于8250串口驱动代码的心得.代码位于Z:\CGEL3\archto\mips\ ...
- linux8250驱动支持5路串口,LINUX串口驱动(8250)的编写与调试
串口控制器都是大同小异,用3条地址线就可以完全对串口控制器进行控制.针对ST554芯片来说,控制寄存器主要有THR(发送保持寄存器),RHR(接收保持寄存器),IER(中断使能寄存器),FCR(缓冲控 ...
- linux串口驱动分析
linux串口驱动分析 硬件资源及描写叙述 s3c2440A 通用异步接收器和发送器(UART)提供了三个独立的异步串行 I/O(SIO)port,每一个port都能够在中断模式或 DMA 模式下操作 ...
- linux串口驱动分析【转】
转自:http://blog.csdn.net/hanmengaidudu/article/details/11946591 硬件资源及描述 s3c2440A 通用异步接收器和发送器(UART)提供了 ...
- linux 串口驱动(二)初始化 【转】
转自:http://blog.chinaunix.net/uid-27717694-id-3493611.html 8250串口的初始化: (1)定义uart_driver.uart_ops.uart ...
- GPS NMEA 0183 4.10协议/GPS Linux串口驱动
NMEA 0183是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备制定的标准格式.现在已经成为GPS导航设备统一的RTCM(R ...
- 从串口驱动的移植看linux2.6内核中的驱动模型 platform device platform driver【转】...
转自:http://blog.csdn.net/bonnshore/article/details/7979705 写在前面的话: 博主新开了个人站点:你也可以在这里看到这篇文章,点击打开链接 本文是 ...
- Linux 8250串口控制器
1 8250串口类型的识别 Intel HW都使用DesignWare 8250: drivers/mfd/intel-lpss-pci.c drivers/tty/serial/8250/8250_ ...
最新文章
- 安徽自考计算机基础考试时间,安徽2021年4月自考考试时间
- 特殊用户邮箱附件大小设置
- “DNS隧道”盗号木马分析——类似hjack偷密码然后利用dns tunnel直传数据发送出去...
- Linux块设备驱动程序原理
- linux 下简单的ftp客户端程序
- ubuntu用户目录安装pip(无root权限)
- (42)System Verilog 例化Verilog模块
- 用户名错误则一直登录
- CentOS SSH配置
- WPF 微信 MVVM 【续】发送部分QQ表情
- Nuxt3 服务端渲染 、elementplus多皮肤黑暗模式
- 设备指纹技术分析和应用分析
- 基于FPGA的cameralink编解码测试系统设计
- python学习14:字典和集合
- (2)马裤分:七分裤(长度为 70cm
- 利用 conda install --use-local 安装 解决 Tensorflow: illegal instruction (core dumped)
- 微信小程序开发学习第二天 按部就班的名片小程序
- 玫瑰李文案:玫瑰李水果店的文案怎么写
- B站哔哩哔哩21届秋招算法岗笔试 假设货币系统包含面值1元、4元、16元、64元共计4种硬币,以及面值1024元的纸币。现在小明使用1024元的纸币购买了一件价值为N(0<N<=1024)的商品
- 基于 Spring Boot 的个人博客系统设计与实现(源码+数据库+42页论文)
热门文章
- 射频识别(RFID)原理总结
- 【软件测试自动化-QTP系列讲座 11】== AOM应用(一)+QuickTest+Automation ==
- rdflib解析protege的owl文件
- IOU Tracker
- Coreseek安装指南和使用指南
- 【SSL1759】连通分量【五种方法】
- python超链接格式_Openpyxl中的超链接样式
- 瑞吉外卖文件上传数据库优化
- php 侧边栏效果,侧边栏效果:如何在跳转后保持侧边栏已有的展开状态
- 初识C++与Visual Studio(3)——解决方案资源管理器及常用项目属性介绍