Listing 2. Minimal tty Driver
#define TINY_TTY_MAJOR 240 /* experimental range */
#define TINY_TTY_MINORS 255 /* use the whole
major up */
static int tty_refcount;
static struct tty_struct *tiny_tty[TINY_TTY_MINORS];
static struct termios *tiny_termios[TINY_TTY_MINORS];
static struct termios
*tiny_termios_locked[TINY_TTY_MINORS];
static struct tty_driver tiny_tty_driver {
magic: TTY_DRIVER_MAGIC,
driver_name: "tiny_tty",
#ifdef CONFIG_DEVFS_FS
name: "tts/ttty%d",
#else
name: "ttty",
#endif
major: TINY_TTY_MAJOR,
num: TINY_TTY_MINORS,
type: TTY_DRIVER_TYPE_SERIAL,
subtype: SERIAL_TYPE_NORMAL,
flags: TTY_DRIVER_REAL_RAW |
TTY_DRIVER_NO_DEVFS,
refcount: &tiny_refcount,
table: tiny_tty,
termios: tiny_termios,
termios_locked: tiny_termios_locked,
open: tiny_open,
close: tiny_close,
write: tiny_write,
write_room: tiny_write_room,
};
static int __init tiny_init (void)
{
/* register the tty driver */
tiny_tty_driver.init_termios = tty_std_termios;
tiny_tty_driver.init_termios.c_cflag =
B9600 | CS8 | CREAD | HUPCL | CLOCAL;
if (tty_register_driver (&tiny_tty_driver)) {
printk (KERN_ERR "failed to register
tiny tty driver");
return -1;
return 0;
}
static void __exit tiny_exit (void)
{
tty_unregister_driver (&tiny_tty_driver);
}
module_init (tiny_init);
module_exit (tiny_exit);