Linux的TTY驱动分析

来源:互联网 发布:数据库中的事务是什么 编辑:程序博客网 时间:2024/05/16 09:12

本文针对的内核为友善提供的linux-3.0.31版本,从linux驱动模型的角度分析了uart驱动。

一、首先分析linux内核怎么启动并使用uart驱动的。

        Tiny4412首先为uart注册了一个platform驱动,通过注册相应的platform设备来触发polatform总线的probe函数,在probe函数里根据相关配置信息注册TTY设备,uartTTY驱动完成后就可以使用uart了。

Linux的TTY驱动分析


二、接下来我们首先分析uarttty驱动部分

        其源码路径为:

linux-3.0.31\drivers\tty\serial\samsung.c

 

        没错这就是三星提供的通用串口tty驱动内核模块。该模块的入口函数为“s3c24xx_serial_modinit”,该入口函数只做了一件事,那就是调用“uart_register_driver”函数来注册串口tty驱动。


                                                     
    然后我们再看“s3c24xx_serial_probe”这个函数,该函数为platform总线探测函数,当platform总线上挂载了uartplatform设备和驱动时就会调用,该函数做的主要工作是根据“platform_device”的配置及资源信息注册tty设备。

                         

Linux的TTY驱动分析

到了这里uart有了“s3c24xx_serial_modinit”中注册的“tty驱动”,有了“s3c24xx_serial_probe”中注册的“tty设备”,这样一个完整的tty设备驱动就完成了。其操作函数调用关系如下图所示:


三、然后我们再看uartplatform总线驱动

其源码路径比较分散:

linux-3.0.31\drivers\tty\serial\s3c2410.c(注册串口的platform驱动)

linux-3.0.31\arch\arm\plat-s3c24xx\devs.c(串口platform设备资源)

linux-3.0.31\arch\arm\plat-samsung\dev-uarts.c(串口platform设备)

linux-3.0.31\arch\arm\mach-exynos\mach-tiny4412.c(注册串口platform设备)

其在“s3c2410.c”中注册串口platform驱动,在“mach-tiny4412.c”中注册串口platform设备,接下来我们主要看串口platform设备是怎么注册的。

在“mach-tiny4412.c”源码中,有一个“smdk4x12_map_io”这个函数,串口platform设备就是通过这个函数进去注册的。


Linux的TTY驱动分析

所以针对不同的CPU做串口驱动移植,还需要修改mach-tiny4412.c中的“smdk4x12_uartcfgs”及devs.c中的“s3c2410_uart_resources”。


 

0 0
原创粉丝点击