Linux tty子系統分析之三 tty驅動、設備的註冊以及註銷接口說明

在上一章中我們介紹了tty子系統相關的數據結構,本章我們主要介紹tty driver的註冊與註銷、線路規程的註冊與註銷,tty端口的註冊與註銷等內容。


tty driver的註冊與註銷

主要實現tty controller 驅動的註冊與註銷操作,相應的函數包括tty_register_driver、tty_unregister_driver,下面我們分析下這兩個函數實現的功能

tty_register_driver接口

該接口實現如下幾個功能:

  1. 根據tty_driver設置的主設備號、次設備號、tty端口個數,調用alloc_chrdev_region/register_chrdev_region進行字符設備號區間的申請;
  2. 若該tty_driver動態創建字符設備,則在tty_register_driver中,僅創建次設備號範圍為tty端口個數的字符設備;
  3. 若該tty_driver靜態創建字符設備,則在tty_register_driver中,針對每一個tty端口均創建一個對應的字符設備(次設備個數為1);
  4. 將該tty_driver添加至tty_drivers鏈表中;
  5. 調用proc_tty_register_driver,在proc文件系統中,為該tty_driver創建對應的文件

Linux tty子系統分析之三  tty驅動、設備的註冊以及註銷接口說明

tty_unregister_driver接口

該接口實現的功能比較簡單,主要如下:

  1. 調用unregister_chrdev_region,註銷已申請的字符設備號區間;
  2. 將該tty_driver從tty_drivers鏈表中刪除。


tty device的註冊與註銷

針對tty device的註冊與註銷,主要涉及tty_unregister_device、tty_register_device這兩個接口,而tty_register_device則是對tty_register_device_attr的封裝。下面我們分析下這兩個函數。

tty_register_device接口

該接口主要實現兩個功能:

  1. 若該tty_driver沒有設置TTY_DRIVER_DYNAMIC_ALLOC,則調用tty_cdev_add針對每一個tty端口均創建一個對應的字符設備(次設備個數為1);
  2. 申請struct device類型的內存空間,並將該device與tty_class關聯,並調用device_register將該device註冊至設備驅動子系統中,且該device中包含了字符設備的設備號,因此當將該設備註冊至設備驅動子系統時,會通過netlink將設備註冊的uevent信息發送給應用程序,而mdev或者udevd程序接收到該uevent信息後,則會根據註冊信息,完成tty字符設備inode的創建,即可在/dev目錄下創建相應的字符設備文件。


Linux tty子系統分析之三  tty驅動、設備的註冊以及註銷接口說明

tty_unregister_device接口

該接口實現的功能如下:

  1. 調用device_destroy,將該tty端口對應的device從設備驅動子系統中移除(也即解除與tty_class的關聯);
  2. 若該tty_driver沒有設置TTY_DRIVER_DYNAMIC_ALLOC,則將調用cdev_del將對應的字符設備從字符設備模塊中移除。


線路規程的註冊與註銷

針對線路規程的註冊與註銷,主要涉及函數tty_register_ldisc、tty_unregister_ldisc,主要是註冊線路規程的操作接口,

針對線路規程操作接口,定義全局數組static struct tty_ldisc_ops *tty_ldiscs[NR_LDISCS];,其中NR_LDISCS的定義如下

#define NR_LDISCS 30

這兩個函數的定義如下,主要就是將新的線路規程的ops添加至全局變量tty_ldiscs中,它們的處理邏輯比較簡單,就不再說明。

Linux tty子系統分析之三  tty驅動、設備的註冊以及註銷接口說明

Linux tty子系統分析之三  tty驅動、設備的註冊以及註銷接口說明


以上即是tty_driver、tty device、tty 線路規程的註冊與註銷,其中線路規程的註冊與註銷我們在平時的驅動開發中基本上不會觸及到。而針對tty_driver、tty device的註冊與註銷,若我們進行串口控制器的開發,則基本上需要了解,且只要使用tty_driver、tty device的註冊與註銷即可完成串口控制器相關驅動的註冊與註銷,下一章我們介紹tty 控制器驅動的開發流程,並完成一個虛擬的串口控制器驅動的開發。


分享到:


相關文章: