Previous Section  < Day Day Up >  Next Section

18.5. proc and sysfs Handling of TTY Devices

The tty core provides a very easy way for any tty driver to maintain a file in the /proc/tty/driver directory. If the driver defines the read_proc or write_proc functions, this file is created. Then, any read or write call on this file is sent to the driver. The formats of these functions are just like the standard /proc file-handling functions.

As an example, here is a simple implementation of the read_proc tty callback that merely prints out the number of the currently registered ports:

static int tiny_read_proc(char *page, char **start, off_t off, int count,

                          int *eof, void *data)

{

    struct tiny_serial *tiny;

    off_t begin = 0;

    int length = 0;

    int i;



    length += sprintf(page, "tinyserinfo:1.0 driver:%s\n", DRIVER_VERSION);

    for (i = 0; i < TINY_TTY_MINORS && length < PAGE_SIZE; ++i) {

        tiny = tiny_table[i];

        if (tiny =  = NULL)

            continue;



        length += sprintf(page+length, "%d\n", i);

        if ((length + begin) > (off + count))

            goto done;

        if ((length + begin) < off) {

            begin += length;

            length = 0;

        }

    }

    *eof = 1;

done:

    if (off >= (length + begin))

        return 0;

    *start = page + (off-begin);

    return (count < begin+length-off) ? count : begin + length-off;

}

The tty core handles all of the sysfs directory and device creation when the tty driver is registered, or when the individual tty devices are created, depending on the TTY_DRIVER_NO_DEVFS flag in the struct tty_driver. The individual directory always contains the dev file, which allows user-space tools to determine the major and minor number assigned to the device. It also contains a device and driver symlink, if a pointer to a valid struct device is passed in the call to tty_register_device. Other than these three files, it is not possible for individual tty drivers to create new sysfs files in this location. This will probably change in future kernel releases.

    Previous Section  < Day Day Up >  Next Section