1、概述
(1)串口驱动程序结构
(2)串口驱动中的重要数据结构体

用户态发生write时->VFS中的sys_write,先经过file_operation中的tty_write,这个tty_fops是在哪里注册的?

2、回溯-初始化分析
两个重要的文件:
samsung.c:注册串口驱动程序
s5pv210.c
(2)串口驱动中重要的数据结构:
uart驱动程序结构:struct uart_driver --对应串口驱动
使用场景实例:
static uart_driver s3c24xx_uart_ddrv = {
.owner = THIS_MODULE,
.dev_name='s3c2440_serial'
.nr=CONFIG_SERIAL_SAMSUNG_UARTS,定义有几个端口
.cons = S3C24XX_SERIAL_CONSOLE,
.driver_name = S3C24XX,
.major = 主设备号,
.minor = 次设备号,
};
uar端口结构:struct uart_port
uart相关操作函数结构:struct uart_ops
uart状态结构:struct uart_state
uart信息结构:uart_info
(3)初始化的过程分析:
从哪里开始分析呢?samsung.c
static int __init s3c24xx_serial_modinit(void)
{
int ret;
ret = uart_register_driver(&s3c24xx_uart_drv);
return 0;
}
static void __exit s3c24xx_serial_modexit(void)
{
uart_unregister_driver(&s3c24xx_uart_drv);
}
module_init(s3c24xx_serial_modinit);
module_exit(s3c24xx_serial_modexit);

关键字:串口 驱动程序 初始化
引用地址:
专题3-串口驱动程序设计-第2课串口驱动分析-初始化
推荐阅读最新更新时间:2026-03-19 12:03
Bootloader中LCD硬件初始化和软件驱动程序设计
Android系统在正常启动中,刷屏功能一般在内核中执行,而Bootloader的任务应该是执行硬件初始化,并尽快跳转到Linux内核。在Bootloader启动过程中使能一个显示驱动,实现刷屏功能,并不违背这一目标。本文通过对Bootloader的原理分析和嵌入式芯片C6310中LCD控制器的研究,设计了Bootloader中LCD硬件初始化和软件驱动程序。该设计完善了Bootloader的扩展功能,加快了手机动画的实现,改善了客户的使用体验。 Android自2011年以来实现了计算机诞生以来最快速度的用户群体增长,目前Android以每天85万新激活数的速度快速征服世界,在世界范围内成为占有率最高的智能手机操作系
[单片机]
第三章之S5PV210串口初始化
1,在start.S中执行373行b lowlevel_init跳转到/board/samsung/goni/lowlevel.S中,此代码中初始化一样硬件。 找到241行,此行执行URAT初始化,如下图: 但此UART初始化与s5pv210的UART初始化不同,需要自己手动修改。 2,在lowlevel.S的463行下添加如UART初始化代码: 1 /****add S5PV210 UART Initialize by xu***/ 2 ldr r0, =0xE2900000 3 ldr r1, =0x3 4 str r1, @ULCON0=0x3 indicates the n
[单片机]
STM32串口1,2,3初始化函数代码(标准库版)
没有使用中断 cks32C8T6、stm32c8t6直接复制使用 其他芯片注意引脚,复用功能什么的 串口1初始化代码 //串口1 void Uart1_init(u32 bound){ //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟 //USART1_TX GPIOA.9 GPIO_InitStruc
[单片机]
stm32f103系列单片机串口初始化
这篇文章是本人从小白到熟悉这个单片机的过程,本在使用过程中主要是针对的64为单片机,但是其它引脚位数的单片机应该也是比较实用,由于篇幅较长, 废话不多说,开始单片机学习之旅吧!(本文章比较适用于对硬件知识有一定基础,如果有51系列单片机开发或者学习经验者。) 最开始笔者是从串口初始化开始,串口是个很好用的东西。不光可以用来通信而且还可以用来调试调试程序。下面这段程序是对串口1-3的初始化函数。这三段函数基本上没有什么区别只是引脚不同,所以后面的程序没加注释。 /* ******串口1初始化***************************************** * 函数名称:Usart1_Init * *
[单片机]
基于STM32f030c8t6的spi,iic,串口的初始化源程序
stm32单片机源程序如下: #include spi.h #include uart.h #include stdio.h #include delay.h void SPI1_Init(void) { RCC - AHBENR |=0X01 18; RCC - APB2ENR |=0x01 12; //SCK(pb3) MOSI(pb5)配置为普通功能推挽输出 //端口模式设置 //模式----通用输出模式(01) GPIOB- MODER &=~(0x03 6 |0x03 10); GPIOB- MODER |=0X01 6 | 0
[单片机]
STM32串口中断实验总结函数的初始化
STM32串口中断实验总结函数的初始化必须在变量的初始化之后在进行! 在进行串口的实验的时候,自己没有看教程,写了一段代码,但是进行编译之后发现一直有错误,就算我把代码更改之后还是一直有错误。对比了官方给的教程之后发现唯一的不同之处就是我的有一个函数的初始化是在变量的初始化之前,进行的初始化,在进行相应的知识查询之后,还有请教了师兄之后,发现了自己以前一直没有注意到的问题就是,函数的初始化必须放到变量的初始化之后,否则在使用keil也就是MDK进行建立工程的时候就会报错。 注意细节
[单片机]
STM32串口中断实验总结函数的初始化必须在变量的初始化之后
在进行串口的实验的时候,自己没有看教程,写了一段代码,但是进行编译之后发现一直有错误,就算我把代码更改之后还是一直有错误。对比了官方给的教程之后发现唯一的不同之处就是我的有一个函数的初始化是在变量的初始化之前,进行的初始化,在进行相应的知识查询之后,还有请教了师兄之后,发现了自己以前一直没有注意到的问题就是,函数的初始化必须放到变量的初始化之后,否则在使用keil也就是MDK进行建立工程的时候就会报错。 注意细节
[单片机]
STM32 USART串口初始化
1、初始化串口时钟以及串口IO端口时钟: 使用RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); 备注:为什么要使能IO口时钟? 参照用户手册 P165-P166 使用串口这个外设的时候需要将串口的IO属性配置为图示; 使用串口是否需要打开复用时钟,请见http://blog.csdn.net/u012411027/article/details/44217313,看到这位的解释才恍然大悟的。 2、串口参数设置(波特率、数据长度、停止位、校验位、发送接收模式、硬件控制流) 具体初始化及初始化方式如图:
[单片机]