usb_serial_init/tty_driver/alloc_tty_driver/tty_register_driver/usb_register

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 函数

  1. 通过 alloc_tty_driver() 函数,分配 TTY 驱动对象(即初始化 tty_driver 部分成员变量)

  2. 通过 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)^

  1. 配置 TTY(tty_register_driver【struct tty_driver】)驱动属性^[2](#配置 TTY(tty_register_driver【struct tty_driver】)驱动属性2)^

  2. 通过 tty_register_driver() 函数,完成下列任务:

1.1 alloc_tty_driver 函数

  • 分配 TTY 驱动对象(即初始化 tty_driver 部分成员变量)

1.2 tty_register_driver 函数

  1. 通过alloc_chrdev_region()动态分配字符设备编号(主设备号 + 次设备号范围) 或

    通过register_chrdev_region()静态分配字符设备编号(主设备号 + 次设备号范围)

  2. 通过tty_cdev_add() 动态添加 cdev(即为每个设备创建一个 cdev 初始化结构体^[2](#通过tty_cdev_add() 动态添加 cdev(即为每个设备创建一个 cdev [ 初始化结构体2 ] 并添加到 VFS [ 注册到内核的probe 表])(未执行))^ 并添加到 VFS 注册到内核的`probe 表`)(未执行)

  3. 通过list_add() 将驱动加入全局链表tty_drivers

  4. 通过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 通知用户空间创建设备节点
  1. 通过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文件

1.3 usb_register 函数

2. tty_driver 结构体


  1. 初始化usb_serial_bus_type 结构体 ↩︎

  2. 配置 TTY 驱动属性 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

相关推荐
承渊政道38 分钟前
Linux网络学习【传输层协议UDP】
linux·网络·网络协议·学习·ubuntu·udp
澜山奕秋1 小时前
Rhcsa 二
linux·运维·服务器
小此方1 小时前
Linux网络(三十三):告别O(n)噩梦:从select/poll的挣扎到epoll红黑树+回调的降维打击,一文打通IO多路复用
linux·网络·驱动开发
2301_777998341 小时前
Linux 网络:数据链路层
linux·服务器·网络
迷途之人不知返1 小时前
【文件系统】-1-磁盘与扇区的定位方法
linux
无足鸟ICT1 小时前
【RHCA+】yum源配置(软件仓库)
linux·运维
0+1112 小时前
Linux --IP分片和组装
linux·网络·tcp/ip
Kira Skyler2 小时前
CVE-2026-99999 deferred-metadata trust inversion 原理分析.md
linux
AR-26710-2 小时前
Linux Day24——TCP/IP分层与封装
linux·运维