//非设备数模式
1、arch/arm/mach-smdk6410.c -> smdk6410_uartcfgs[]:ok6410串口版级资源配置数组
2、arch/arm/mach-smdk6410.c -> smdk6410_map_io() -> s3c24xx_init_uarts->{arch/arm/mach-s3c64xx/cpu.c:->s3c6400_common_init_uarts->s3c24xx_init_uartdevs:将板级资源名称添加到platform_device:s3c24xx_uart_devs[]中}
最终注册到platform总线上由arch/arm/plat-samsung/init.c->s3c_arch_init中调用。
3、uart_driver: linux/include/serial_core.h 头文件中包含uart驱动结构,包含设备号、名称等信息
uart_port: linux/include/serial_core.h uart端口,包含在uart_driver下uart_state下的一个指针,用于与driver进行挂载
uart_driver::uart_stat::uart_port->uart_ops
uart_driver 、uart_port :绑定uart_add_one_port 删除:uart_remove_one_port
driver/tty/serial/s3c6400.c->s3c6400_serial_init()注册plateform driver s3c6400_serial_driver
plateform_driver与plateform_device经过 .name 匹配之后,调用s3c6400_serial_driver->prob函数
s3c24xx_serial_probe:
1)s3c24xx_serial_init_port:初始化端口(3c24xx_serial_port为端口数据数组)
2)uart_add_one_port(&s3c24xx_uart_drv, &ourport->port):(向uart驱动s3c24xx_uart_drv中添加端口)
----------tty_register_device(device_creat设备创建,字符设备生成注册到tty_class)
3) platform_set_drvdata(dev, &ourport->port);(将端口信息注册到plateform的device中)
4) ret = device_create_file(&dev->dev, &dev_attr_clock_source);(创建device file)
--------- sysfs_create_file(sysfs创建)
*****小结:至此plateform_device和palteform_driver只是将3c24xx_serial_port端口添加到s3c24xx_uart_drv中和创建设备文件,接下来开s3c24xx_uart_drv的处理*******
driver/tty/serial/samsung.c:
s3c24xx_serial_modinit-> uart_register_driver(&s3c24xx_uart_drv)//完成系统中uart_driver的注册
----注册时主要是对uart_driver中的tty_driver进行分配和初始化(一些属性和ops)
---tty_register_driver;(tty字符设备创建注册tty设备)
---put_tty_driver
~~~~~~~~~~~~~~~~~~~~~~~~
接下来是linux 串口驱动操作过程也就行ttyS*设备操作过程的
主要是通过ttydriver中tty_operations uart_ops(在serial_core.c中定义)
设备操作(open、write。。。。。。)
serial_core->tty_struct(获取uart_drive和uart_state和端口信息)
然后操作具体端口设备