V210 UART 整体流程
来源:互联网 发布:金华淘宝培训 编辑:程序博客网 时间:2024/05/01 01:23
2.6内核以后,多数驱动都是以平台总线的方式编写,因此对于这种类型的驱动,实际就是要分成两个流程来分析
平台总线设备的构造,平台总线驱动的构造。
下面先分析平台总线设备的构造,平台总线设备里是硬件相关的信息,比如中断资源,寄存件地址定义。
1. arch/arm/mach-s5pv210/mach-x210.c
smdkc110_map_io()
s3c24xx_init_uarts(smdkc110_uartcfgs, ARRAY_SIZE(smdkc110_uartcfgs))
2. arch/arm/mach-s5pv210/init.c
s5pv210_common_init_uarts(struct s3c2410_uartcfg *cfg, int no)
s3c24xx_init_uartdevs("s5pv210-uart", s5p_uart_resources, cfg, no)
3. arch\arm\plat-samsung\init.c
s3c24xx_init_uartdevs(char *name, struct s3c24xx_uart_resources *res, struct s3c2410_uartcfg *cfg, int no)
上面3部完成了 platform_device 的构造
其中:name = "s5pv210-uart"
resource = arch\arm\plat-s5p\dev-uart.c 文件中定义s3c24xx_uart_resources结构体
dev.platform_data = arch\arm\mach-s5pv210\mach-x210.c 文件中定义 s3c2410_uartcfg 结构体
下面分析平台总线驱动
1. drivers/serial/s5pv210.c
s5p_serial_init(void)
s3c24xx_serial_init(&s5p_serial_driver, *s5p_uart_inf)
2. drivers\serial\samsung.c
s3c24xx_serial_init(struct platform_driver *drv, struct s3c24xx_uart_info *info)
platform_driver_register(drv);
上面2部构造并注册了platform_driver
因为uart驱动是字符设备驱动,因此,下面分析uart的字符设备驱动的初始化
1. drivers\serial\samsung.c
s3c24xx_serial_modinit()
uart_register_driver(&s3c24xx_uart_drv)
2. drivers\serial\serial_core.c
uart_register_driver(struct uart_driver *drv)
tty_register_driver(normal)
3. drivers\char\tty_io.c
tty_register_driver(struct tty_driver *driver)
register_chrdev_region(dev, driver->num, driver->name)
cdev_init(&driver->cdev, &tty_fops)
cdev_add(&driver->cdev, dev, driver->num)
从上面的关键步骤可以看出一个标准的字符设备驱动的初始化流程,但是没有创建出设备文件。显然,设备文件的
创建,应该是平台总线驱动的probe函数创建的。
下面分析设备文件的创建
1.drivers/serial/s5pv210.c
s3c24xx_serial_probe(pdev, s5p_uart_inf[pdev->id])
2. drivers\serial\samsung.c
int s3c24xx_serial_probe(struct platform_device *dev, struct s3c24xx_uart_info *info)
device_create_file(&dev->dev, &dev_attr_clock_source)
可以看到设备文件的创建是在平台总线的驱动的probe函数中创建
- V210 UART 整体流程
- V210 UART TX 流程
- 整体流程
- UART工作流程
- UART控制器驱动流程
- UART控制器驱动流程
- UART配置流程
- 51 UART配置流程
- V210 时区
- 项目整体流程
- Struts2的整体流程
- LDA整体流程
- LDA整体流程
- 整体项目开发流程
- 中断-整体流程
- 中断-整体流程
- 中断-整体流程
- Spark 的整体流程
- iOS学习笔记56(Runtime)-Objective-C Runtime 运行时之三:方法与消息
- 软件测试 (二) 界面测试
- IOS Replaykit 手游录屏Demo
- GNOME CentOS "资源管理器" 文件夹 快捷方式 拖入左侧导航面板
- iOS学习笔记56(Runtime)-Objective-C Runtime 运行时之四:Method Swizzling
- V210 UART 整体流程
- log2^50 = 50 * log2 推导
- LeetCode:Best Time to Buy and Sell Stock
- android socket发送图片
- 远程EJB使用
- 防止Android程序被系统kill掉的处理方法
- Android跑马灯Marquee
- Android之属性动画初步
- SpriteKit学习笔记 - - - 物理系统