本文共 1190 字,大约阅读时间需要 3 分钟。
本文针对的内核为友善提供的linux-3.0.31版本,从linux驱动模型的角度分析了uart驱动。
一、首先分析linux内核怎么启动并使用uart驱动的。
二、接下来我们首先分析uart的tty驱动部分
“linux-3.0.31\drivers\tty\serial\samsung.c”
到了这里uart有了“s3c24xx_serial_modinit”中注册的“tty驱动”,有了“s3c24xx_serial_probe”中注册的“tty设备”,这样一个完整的tty设备驱动就完成了。其操作函数调用关系如下图所示:
三、然后我们再看uart的platform总线驱动
其源码路径比较分散:
“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设备就是通过这个函数进去注册的。
所以针对不同的CPU做串口驱动移植,还需要修改mach-tiny4412.c中的“smdk4x12_uartcfgs”及devs.c中的“s3c2410_uart_resources”。