James Simmons
jsimmons@transvirtual.com
April 2002
http://linuxconsole.sf.net/
I would like to acknowledge my employer Transvirtual Technologies Inc, who granted me time to work on this project. Special thanks goes to Vojtech Buxton for his valuable assistance.
This paper is copyright 2002 James Simmons and is released under the terms of the GNU General Public Licence, a copy of which is distributed with the source for this document.
All trademarks and software are the property of their respective owners.
Ottowa Linux Symposium
25th - 28th July 2002
Ottowa Congress Centre
Ottowa, Ontario, Canada
Linux continues to be ported to different types of hardware devices. As it expands into different hardware sectors we see that these different sectors have very different needs and are very different from the classical PC. The initial Linux kernel code was designed on the standard PC which had a large influence on the code design. As Linux appears on new types of hardware devices we began to see limitations of some of the central designs. As Linux kept evolving and expanding to new platforms, hardware was encountered that didn't fit the "PC" model. So instead often an extra interface of some kind, either userland or in kernel space, was developed to compensate.
One of the major areas of the kernel affected by this is the tty layer. Here we witness things like the classical definition for a virtual terminal starting to break down and the handling of complex human input devices addressed by the tty layer. Also for embedded devices size is critical especially when dealing with boot loaders which often make certain assumptions or place certain limitations. Modularity is also lacking. Often with modern embedded devices we have removable pieces of hardware including things like keyboards which were in a classic PC sense critical to have.
A major way of rethinking was needed to rework the tty layer. That way was to reverse the flow of development. The current way of thinking is to expand the tty features with new device interfaces that influence the behavior of the TTY. An example of this is for a framebuffer console we use a /dev/fb interface to resize a tty device. The proper method to resize would be to use a standard that already exist i.e the POSIX tty ioctl call TIOCSWINSZ.