转自:http://hi.baidu.com/zhxust/blog/item/9ca4bcd9a7775ae139012fbc.html
1,uart_driver结构体变量的注册,主要是设备号的注册。
2,device_driver结构体变量的注册。
3,device_driver结构体变量里面有一个.probe成员函数
完成端口的添加,从而把设备号与硬件联系起来。
4,添加的端口是uart_port结构体变量。uart_port结构体变量里有一个.irq成员和.ops成员。
即分别是中断号与操作函数集合。
5,.ops成员是一个uart_ops结构体变量。它里面有有类似于.config_port,.stop_rx
这样的对端口进行直接操作的函数。
init流程
module_init-->s3c24xx_serial_modinit-->s3c2440_serial_init-->s3c24xx_serial_init-->driver_register
在s3c24xx_serial_modinit里会完成uart_driver结构体变量的注册。
driver_register会完成device_driver结构体变量的注册。
device_driver结构体中的.probe成员函数的流程
.probe-->s3c2440_serial_probe-->s3c24xx_serial_probe-->s3c24xx_serial_init_port-->
s3c24xx_serial_resetport-->s3c2440_serial_resetport
s3c24xx_serial_probe完成串口的添加工作。
s3c24xx_serial_init_port为串口分配地址,做好铺垫工作。
s3c2440_serial_resetport则做相关的寄存器配置工作。