Linux裝置驅動之控制台驅動

2021-06-05 01:28:10 字數 2233 閱讀 3333

一:前言

我們在之前分析過input子系統和tty裝置驅動架構.今天需要將兩者結合起來.看看linux中的控制台是怎麼樣實現的.

二:控制台驅動的初始化

之前在分析tty驅動架構的時候曾分析到.主裝置為4,次裝置為0的裝置節點,即/dev/tty0為當前的控制終端.

有tty_init()中,有以下**段:

static int __init tty_init(void)

#ifdef config_vt

cdev_init(&vc0_cdev, &console_fops);

if (cdev_add(&vc0_cdev, mkdev(tty_major, 0), 1) ||

register_chrdev_region(mkdev(tty_major, 0), 1, "/dev/vc/0") < 0)

panic("couldn't register /dev/tty0 driver\n");

device_create(tty_class, null, mkdev(tty_major, 0), "tty0");

vty_init();

#endif

return 0;

config_vt:是指配置虛擬終端.即我們所說的控制台.在此可以看到tty_major(4),0對應的裝置節點操作集為console_fops.

繼續跟進vty_init()

int __init vty_init(void)

vcs_init();

console_driver = alloc_tty_driver(max_nr_consoles);

if (!console_driver)

panic("couldn't allocate console driver\n");

console_driver->owner = this_module;

console_driver->name = "tty";

console_driver->name_base = 1;

console_driver->major = tty_major;

console_driver->minor_start = 1;

console_driver->type = tty_driver_type_console;

console_driver->init_termios = tty_std_termios;

console_driver->flags = tty_driver_real_raw | tty_driver_reset_termios;

tty_set_operations(console_driver, &con_ops);

if (tty_register_driver(console_driver))

panic("couldn't register console driver\n");

kbd_init();

console_map_init();

#ifdef config_prom_console

prom_con_init();

#endif

#ifdef config_mda_console

mda_console_init();

#endif

return 0;

經過我們之前的tty驅動架構分析,這段**看起來就比較簡單了,它就是註冊了乙個tty驅動.這個驅動對應的操作集是位於con_ops裡面的.

仔細看.在之後還會呼叫kbd_init().顧名思義,這個是乙個有關鍵盤的初始化.控制終端跟鍵盤有什麼關係呢?在之前分析tty的時候,曾提到過,. 對於控制台而言,它的輸入裝置是鍵盤滑鼠,它的輸出裝置是當前顯示器.這兩者是怎麼關聯起來的呢?不著急.請看下面的分析.

三:控制台的open操作

在前面分析了,對應console的操作集為con_ops.定義如下:

static const struct file_operations console_fops = else else else {

//非加工模式,直接copy

int uncopied;

//環形快取,copy兩次

uncopied = copy_from_read_buf(tty, &b, &nr);

uncopied += copy_from_read_buf(tty, &b, &nr);

if (uncopied) {

retval = -efault;

break;

linux 驅動 7 平台裝置驅動

目錄7.2 平台裝置 7.3 平台驅動 參考區分裝置驅動模型和平台裝置驅動模型。裝置驅動模型可以理解為匯流排 裝置 驅動。平台裝置驅動模型就是那些 linux 核心管理沒有物理匯流排 即是不需要特殊時序控制的裝置 也是linux核心沒有自動建立相應驅動匯流排的裝置型別 的裝置的一套 linux平台匯...

Linux裝置驅動之《字元裝置驅動》

linux裝置中最大的特點就是裝置操作猶如檔案操作一般,在應用層看來,硬體裝置只是乙個裝置檔案。應用程式可以像操作檔案一樣對硬體裝置進行操作,如open close read write 等。下面是乙個字元裝置驅動程式的簡單實現test.c 模組分析 1.初始化裝置驅動的結構體 struct fil...

Linux裝置驅動之字元裝置驅動

一 linux裝置的分類 linux系統將裝置分成三種基本型別,每個模組通常實現為其中某一類 字元模組 塊模組或網路模組。這三種型別有 字元裝置 字元裝置是個能夠像位元組流 類似檔案 一樣被訪問的裝置,由字元裝置驅動程式來實現這種特性。字元裝置可以通過檔案系統節點來訪問,比如 dev tty1等。這...