Chinaunix首页 | 论坛 | 博客
  • 博客访问: 180760
  • 博文数量: 44
  • 博客积分: 627
  • 博客等级: 中士
  • 技术积分: 345
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-20 21:55
文章分类

全部博文(44)

文章存档

2012年(44)

分类: LINUX

2012-08-08 18:32:34

串口驱动之设备模型建立  

2010-04-24 19:52:59|  分类: arm linux设备驱 |  标签: |字号 

Tty核心概览:

 

Tty_core已经由内核给出不需要驱动编写者再次编写。Tty_driver需要驱动编写者去编写,

它通过实现操作函数结构体tty_operations中的成员函数操作硬件。Line discipline为线路规程,它需要驱动编写者编写。当用户空间发来一大堆杂乱无章的数据时,通过线路规程函数的整理使其符合一定的协议(比如ppp或者是蓝牙协议),然后调用tty_operations中的成员函数发送到硬件。

Tty驱动模型建立:

     1.分配 tty_driver结构内存。struct tty_driver *alloc_tty_driver(int lines) (lines为该驱动中次设备号的个数)

     2.实现操作函数结构体tty_operations中的各成员函数。

     3.. 初始化结构Tty_driver的成员,设置Tty_driver的操作函数结构体

        Tty_driver->owner = 

        Tty_driver->driver_name = 

        Tty_driver->name = 

        Tty_driver->major = 

        Tty_driver->minor_start =

        Tty_driver->type = 

        Tty_driver->subtype = 

        Tty_driver->init_termios =

       Tty_driver->init_termios.c_cflag = 

      Tty_driver->init_termios.c_ispeed = 

      Tty_driver->flags = 

      Tty_driver->driver_state    = 

      tty_set_operations(Tty_driver, &tty_operations);

4.int tty_register_driver(struct tty_driver *driver)注册tty驱动。

    5. struct device *tty_register_device(struct tty_driver *driver, unsigned index,struct device *device)

   注册驱动中的设备在用户空间创建设备节点。以上呈现了一个tty驱动模型。Tty是一类设备,所有tty驱动都是在以上模型的基础上扩展而来。以下串口驱动即是tty驱动的一个具体实现。

在本驱动中重要结构Tty_driver 嵌入结构体uart_driver中。通过调用函数 uart_register_driver(struct uart_driver *drv)

完成了tty驱动模型建立的1,3,4点。tty驱动模型建立的2点在文件serial_core.c中实现。

tty驱动模型建立的5点在文件samsung.c中调用初始化函数

int s3c24xx_serial_probe(struct platform_device *dev,struct s3c24xx_uart_info *info),在该函数中调用函数uart_add_one_port,

在函数uart_add_one_port中调用了函数tty_register_device实现了tty驱动模型建立的第五点。实现了整个

tty驱动模型的建立。

 

串口驱动常用的数据结构表示如下:

串口驱动uart_driver有多个端口uart_port,每个端口对应着一个uart_state。Circ_buf为环形数据输出缓存。

出口驱动中的各操作函数结构表示:

阅读(1670) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~