serial 架构分析
来源:互联网 发布:自动发微博淘宝客软件 编辑:程序博客网 时间:2024/06/08 05:31
一、首先看一下uart_register_driver();
int uart_register_driver(struct uart_driver *drv)
{
struct tty_driver *normal = NULL;
int i, retval;
BUG_ON(drv->state);
/*
* Maybe we should be using a slab cache for this, especially if
* we have a large number of ports to handle.
*/
drv->state = kzalloc(sizeof(struct uart_state) * drv->nr, GFP_KERNEL);
retval = -ENOMEM;
if (!drv->state)
goto out;
normal = alloc_tty_driver(drv->nr);
if (!normal)
goto out;
drv->tty_driver = normal;
normal->owner = drv->owner;
normal->driver_name = drv->driver_name;
normal->name = drv->dev_name;
normal->major = drv->major;
normal->minor_start = drv->minor;
normal->type = TTY_DRIVER_TYPE_SERIAL;
normal->subtype = SERIAL_TYPE_NORMAL;
normal->init_termios = tty_std_termios;
normal->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
normal->init_termios.c_ispeed = normal->init_termios.c_ospeed = 9600;
normal->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
normal->driver_state = drv;
tty_set_operations(normal, &uart_ops);
/*
* Initialise the UART state(s).
*/
for (i = 0; i < drv->nr; i++) {
struct uart_state *state = drv->state + i;
state->close_delay = 500; /* .5 seconds */
state->closing_wait = 30000; /* 30 seconds */
mutex_init(&state->mutex);
}
retval = tty_register_driver(normal);
out:
if (retval < 0) {
put_tty_driver(normal);
kfree(drv->state);
}
return retval;
}
这里的注册了drv->nr个设备节点,主设备号为drv->major,从设备号依次从drv->minor,
tty_set_operations(normal, &uart_ops),对tty_driver操作集赋值,然后设置每个设备状态,
最后调用tty_register_driver,注册为tty设备驱动。
二、 uart_port
调用uart_add_one_port();
uart_port是具体设备的代表
这里的注册了drv->nr个设备节点,主设备号为drv->major,从设备号依次从drv->minor,
tty_set_operations(normal, &uart_ops),对tty_driver操作集赋值,然后设置每个设备状态,
最后调用tty_register_driver,注册为tty设备驱动。
二、 uart_port
调用uart_add_one_port();
uart_port是具体设备的代表
- tty serial 架构分析
- serial 架构分析
- linux serial架构分析及驱动开发(1)
- usb-serial分析
- Serial Port 波形分析
- serial 终端设备驱动分析
- usb serial驱动流程分析
- serial
- serial
- serial
- linux serial构架分析及驱动开发
- USB-serial驱动分析(usb转串口)
- uboot移植与源码分析总结(3)-Serial驱动分析
- uboot移植与源码分析总结(3)-Serial驱动分析
- uboot移植与源码分析总结(3)-Serial驱动分析
- Davinci DM6446 Linux 内核分析——serial.c
- linux serial构架分析及驱动开发(1)
- linux serial构架分析及驱动开发(2)
- windows下使用PHP实现定时执行脚本
- C/C++下获取系统时间的函数
- windows pputy 登陆 ssh及密钥认证
- 强大的SqlCacheDependency
- nodejs 之 StringDecoder module
- serial 架构分析
- nodejs 之 buffer module
- js操作日期(函数,js版的dateAdd与dateDiff,四舍五入(round()方法)并保留小数点后N位的函数)
- python string模块
- OpenSSL在IIS站点上的应用
- Lucene.net学习随笔
- 随笔
- 猜数字
- [斯坦福ios开发][assignment2]2