Chinaunix首页 | 论坛 | 博客
  • 博客访问: 474399
  • 博文数量: 223
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2145
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-01 10:23
个人简介

该坚持的时候坚持,该妥协的时候妥协,该放弃的时候放弃

文章分类

全部博文(223)

文章存档

2017年(56)

2016年(118)

2015年(3)

2014年(46)

我的朋友

分类: 嵌入式

2016-11-14 22:30:38

串口驱动分析-初始化
1.串口驱动程序
/linux-tq2440/drivers/serial/samsung.c
2.串口驱动中的重要数据结构


在之前一篇中的tty_write,位于:
  1. static const struct file_operations tty_fops = {
  2.     .llseek        = no_llseek,
  3.     .read        = tty_read,
  4.     .write        = tty_write,
  5.     .poll        = tty_poll,
  6.     .unlocked_ioctl    = tty_ioctl,
  7.     .compat_ioctl    = tty_compat_ioctl,
  8.     .open        = tty_open,
  9.     .release    = tty_release,
  10.     .fasync        = tty_fasync,
  11. };
tty_ldisc_ops线路规程的函数指针:
  1. struct tty_ldisc_ops tty_ldisc_N_TTY = {
  2.     .magic = TTY_LDISC_MAGIC,
  3.     .name = "n_tty",
  4.     .open = n_tty_open,
  5.     .close = n_tty_close,
  6.     .flush_buffer = n_tty_flush_buffer,
  7.     .chars_in_buffer = n_tty_chars_in_buffer,
  8.     .read = n_tty_read,
  9.     .write = n_tty_write,
  10.     .ioctl = n_tty_ioctl,
  11.     .set_termios = n_tty_set_termios,
  12.     .poll = n_tty_poll,
  13.     .receive_buf = n_tty_receive_buf,
  14.     .write_wakeup = n_tty_write_wakeup
  15. };
tty_operations的变量:
  1. static const struct tty_operations uart_ops = {
  2.     .open        = uart_open,
  3.     .close        = uart_close,
  4.     .write        = uart_write,
  5.     .put_char    = uart_put_char,
  6.     .flush_chars    = uart_flush_chars,
  7.     .write_room    = uart_write_room,
  8.     .chars_in_buffer= uart_chars_in_buffer,
  9.     .flush_buffer    = uart_flush_buffer,
  10.     .ioctl        = uart_ioctl,
  11.     .throttle    = uart_throttle,
  12.     .unthrottle    = uart_unthrottle,
  13.     .send_xchar    = uart_send_xchar,
  14.     .set_termios    = uart_set_termios,
  15.     .set_ldisc    = uart_set_ldisc,
  16.     .stop        = uart_stop,
  17.     .start        = uart_start,
  18.     .hangup        = uart_hangup,
  19.     .break_ctl    = uart_break_ctl,
  20.     .wait_until_sent= uart_wait_until_sent,
  21. #ifdef CONFIG_PROC_FS
  22.     .proc_fops    = &uart_proc_fops,
  23. #endif
  24.     .tiocmget    = uart_tiocmget,
  25.     .tiocmset    = uart_tiocmset,
  26. #ifdef CONFIG_CONSOLE_POLL
  27.     .poll_init    = uart_poll_init,
  28.     .poll_get_char    = uart_poll_get_char,
  29.     .poll_put_char    = uart_poll_put_char,
  30. #endif
  31. };

UART驱动程序结构:struct uart_driver        封装了tty_driver,使得底层的UART驱动无需关心tty_driver
UART端口结构: struct uart_port                用于描述一个UART端口(直接对应于一个串口)的I/O端口或者IO内存地址等信息。
UART相关操作函数结构: struct uart_ops      
UART状态结构: struct uart_state       设备私有信息结构体, 在uart_open()中: tty->driver_data = state; 在其他uart_xxx()中: struct uart_state *state = tty->driver_data; 就可以获取设备私有信息结构体。
UART信息结构: struct uart_info

3.分析代码流程

在tq2440中只需要注册uart_register_driver就行了
而在240中初始化uart_port、闯将属性文件、初始化动态频率调节

参考资料:http://www.cnblogs.com/hello2mhb/p/3341291.html
阅读(520) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~