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 驱动属性 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

相关推荐
唠玖馆1 小时前
文件系统详解
linux·文件系统·ext2
GeW1 小时前
当Linux内核开始“确定性”,制造高端化才有了底层语法
linux
星恒随风2 小时前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
StarsGreen4 小时前
libva在intel平台上的前端流程简介
linux
坤坤子吖7 小时前
Linux网络编程:自定义应用层协议与 JSON 序列化
linux·服务器·网络·c++·笔记·json
Felven9 小时前
华为鲲鹏920s芯片serdestool工具使用说明
linux·运维·服务器·华为·鲲鹏920·serdestool
莫晓燚9 小时前
mall 电商项目完整部署---实战
linux·运维·docker·容器
咋的啥名都用不了呢~9 小时前
Linux项目部署5(安装Nginx的插件)
linux
CodeYp201910 小时前
第11讲:应用层协议 HTTP
linux·http
爱和冰阔落10 小时前
【Linux网络】JsonCpp 怎么实现序列化?从 Request/Response 到网络计算器消息设计
linux·运维·网络·php