Status: not-sent # This supposedly does not need to be sent upstream as there's fbutils, # although its development has stagnated. --- con2fbmap.1 | 29 ++++++++++++++++++++++++++ con2fbmap.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) --- /dev/null +++ b/con2fbmap.1 @@ -0,0 +1,29 @@ +.TH con2fbmap 1 2006-01-18 2.1 "Linux frame buffer utils" +.SH NAME +con2fbmap \- shows and sets mapping between consoles and framebuffer devices. +.SH SYNOPSIS +.B con2fbmap +.RI console +.RI [ framebuffer ] +.SH DESCRIPTION +.B This documentation is not finished +.PP +.B con2fbmap +is a system utility to show or change the mapping of the consoles to the +frame buffer device. The frame buffer device provides a simple and unique +interface to access different kinds of graphic displays. +.PP +Frame buffer devices are accessed via special device nodes located in the +/dev directory. The naming scheme for these nodes is always +.IR \fBfb < n >, +where +.I n +is the number of the used frame buffer device. +.PP +.SH OPTIONS +The first option must be there, and identify the console on which to work. +If the second option is not set, con2fbmap shows the current mapping of +identified console. If the second argument is given (as a number) con2fbmap +maps the identified console to said framebuffer device. +.TP +Sven LUTHER --- /dev/null +++ b/con2fbmap.c @@ -0,0 +1,66 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DEFAULT_FRAMEBUFFER "/dev/fb0" +#define DEFAULT_FRAMEBUFFER_DEVFS "/dev/fb/0" + +const char *programname; + +void Usage(void) +{ + fprintf(stderr, "\nUsage: %s console [framebuffer]\n\n", programname); + exit(1); +} + +int main(int argc, char *argv[]) +{ + int do_write = 0; + char *fbpath; /* any frame buffer will do */ + int fd; + struct fb_con2fbmap map; + + programname = argv[0]; + switch (argc) { + case 3: + do_write = 1; + map.framebuffer = atoi(argv[2]); + case 2: + map.console = atoi(argv[1]); + break; + default: + Usage(); + } + + if (access("/dev/.devfsd", F_OK) == 0) /* devfs detected */ + fbpath = DEFAULT_FRAMEBUFFER_DEVFS; + else + fbpath = DEFAULT_FRAMEBUFFER; + + if ((fd = open(fbpath, O_RDONLY)) == -1) { + fprintf(stderr, "open %s: %s\n", fbpath, strerror(errno)); + exit(1); + } + if (do_write) { + if (ioctl(fd, FBIOPUT_CON2FBMAP, &map)) { + fprintf(stderr, "ioctl FBIOPUT_CON2FBMAP: %s\n", strerror(errno)); + exit(1); + } + } else { + if (ioctl(fd, FBIOGET_CON2FBMAP, &map)) { + fprintf(stderr, "ioctl FBIOGET_CON2FBMAP: %s\n", strerror(errno)); + exit(1); + } + printf("console %d is mapped to framebuffer %d\n", map.console, + map.framebuffer); + } + close(fd); + exit(0); +}