05-模块加载与卸载函数
14.3.1 模块加载与卸载函数
tty驱动的模块加载函数中通常需要分配、初始化tty_driver结构体并申请必要的硬件资源,如代码清单14.4。tty驱动的模块卸载函数完成与模块加载函数相反的工作。
代码清单14.4 终端设备驱动模块加载函数范例
1 / tty驱动模块加载函数 /
2 static int __init xxx_init(void)
3 {
4 ...
5 / 分配tty_driver结构体 /
6 xxx_tty_driver = alloc_tty_driver(XXX_PORTS);
7 / 初始化tty_driver结构体 /
8 xxx_tty_driver->owner = THIS_MODULE;
9 xxx_tty_driver->name = "ttyS";
10 xxx_tty_driver->major = TTY_MAJOR;
11 xxx_tty_driver->minor_start = 64;
12 xxx_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
13 xxx_tty_driver->subtype = SERIAL_TYPE_NORMAL;
14 xxx_tty_driver->init_termios = tty_std_termios;
15 xxx_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
16 xxx_tty_driver->flags = TTY_DRIVER_REAL_RAW;
17 tty_set_operations(xxx_tty_driver, &xxx_ops);
18
19 ret = tty_register_driver(xxx_tty_driver);
20 if (ret) {
21 printk(KERN_ERR "Couldn't register xxx serial driver\n");
22 put_tty_driver(xxx_tty_driver);
23 return ret;
24 }
25
26 ...
27 ret = request_irq(...); / 硬件资源申请 /
28 ...
29 }