tty_driver 结构体
- [1. usb_serial_init 函数](#1. usb_serial_init 函数)
-
- [1.1 alloc_tty_driver 函数](#1.1 alloc_tty_driver 函数)
- [1.2 tty_register_driver 函数](#1.2 tty_register_driver 函数)
- [1.3 usb_register 函数](#1.3 usb_register 函数)
- [2. tty_driver 结构体](#2. tty_driver 结构体)
1. usb_serial_init 函数
通过 alloc_tty_driver() 函数,分配 TTY 驱动对象(即初始化 tty_driver 部分成员变量)
通过 bus_register() 函数,完成下列任务:
创建
/sys/bus/ usb-serial /devices目录创建
/sys/bus/ usb-serial /drivers目录创建
/sys/bus/ usb-serial /drivers_autoprobe属性文件创建
/sys/bus/ usb-serial /drivers_probe属性文件创建
/sys/bus/ usb-serial /uevent文件(uevent 的属性文件)初始化
usb_serial_bus_type(struct bus_type)结构体^[1](#初始化usb_serial_bus_type(struct bus_type)结构体1)^
配置 TTY(
tty_register_driver【struct tty_driver】)驱动属性^[2](#配置 TTY(tty_register_driver【struct tty_driver】)驱动属性2)^通过 tty_register_driver() 函数,完成下列任务:
1.1 alloc_tty_driver 函数
- 分配 TTY 驱动对象(即初始化 tty_driver 部分成员变量)
1.2 tty_register_driver 函数
通过
alloc_chrdev_region()动态分配字符设备编号(主设备号 + 次设备号范围) 或通过
register_chrdev_region()静态分配字符设备编号(主设备号 + 次设备号范围)通过
tty_cdev_add()动态添加 cdev(即为每个设备创建一个 cdev 初始化结构体^[2](#通过tty_cdev_add() 动态添加 cdev(即为每个设备创建一个 cdev [ 初始化结构体2 ] 并添加到 VFS [ 注册到内核的probe 表])(未执行))^ 并添加到 VFS 注册到内核的`probe 表`)(未执行)通过
list_add()将驱动加入全局链表tty_drivers通过
tty_register_device()注册设备节点 (未执行)
- 通过
tty_cdev_add()动态添加 cdev(即初始化tty_driver->cdev^[2](#通过tty_cdev_add() 动态添加 cdev(即初始化tty_driver->cdev 2 并添加到 VFS [ 注册到内核的probe 表]))^ 并添加到 VFS 注册到内核的`probe 表`)- 分配并初始化设备 device 结构体
- 通过
device_register(device)将设备注册到 sysfs 和设备核心层,并触发 uevent 通知 udev/mdev 创建设备节点
1- 通过device_initialize(device)初始化 device 结构体
2- 通过device_add(device)将已初始化的 device 注册到内核的设备层次结构中,使其在 sysfs 中可见,并与总线、类、父设备等建立关联,最终触发 uevent 通知用户空间创建设备节点
- 通过
proc_tty_register_driver()注册 procfs 条目
- 初始化
tty_driver->proc_entry结构体^[2](#初始化 tty_driver->proc_entry 结构体2)^- 通过
proc_register()根据tty_driver->proc_entry[2](#通过proc_register()根据tty_driver->proc_entry2创建/proc/tty/driver/usbserial文件)创建/proc/tty/driver/usbserial文件

