[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: microwindows 0.90-rtems 4.7-pc386 - exececuting demo proble - SOLVED



It had just been enough to define more CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS.

For the sake of anyone concerned, I'm debugging with ddd + i386-rtems4.7-gdb targeting a bochs box - compiled with --enable-gdb-stubs. Executable is called by grub in a floppy image.

From: "Joel Sherrill <joel@OARcorp.com>" <joel.sherrill@OARcorp.com>
Reply-To: joel.sherrill@OARcorp.com
To: Mark Mussetter <mark@link-comm.com>
CC: rtems-users@rtems.com
Subject: Re: [rtems-users] microwindows 0.90-rtems 4.7-pc386 - executing demo problems
Date: Mon, 07 Feb 2005 11:27:01 -0600


Mark Mussetter wrote:
We got that error when we were getting started as well. Turned out that we needed to actually create and install a framebuffer driver (/dev/fb0). Using Rosimildo da Silva's patch for rtems as a starting point, this is what we had to do:

1) In rtemscfg.h, changed the CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS define to allow more devices.
2) Added MY_FRAMEBUFFER_DRIVER_TABLE_ENTRY to the Device_drivers table
3) Defined MY_FRAMEBUFFER_DRIVER_TABLE_ENTRY in framebuffer_driver.h
4) Wrote functions FB_Initialize, FB_Open, FB_Close, and FB_Control.


Everything else is pretty hardware specific but this should get you started.

Can you post your build and configure options for using MicroWindows to the Wiki?

FWIW it would be nice if we could get a /dev/fb0 implementation for
the pc386 BSP which is appropriately licensed.

--joel

Hope this helps,

Mark


==================================


/* In rtemscfg.h (Values that override settings in confdefs.h) */

...

#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 10 /* overriding confdefs value of 3, so can install our devices including /dev/fb0 */

...

/* List of device drivers loaded by RTEMS at boot time */
rtems_driver_address_table Device_drivers[] =
{
  CONSOLE_DRIVER_TABLE_ENTRY,
  CLOCK_DRIVER_TABLE_ENTRY,

/* this can be a bit tricky if you are using a serial mouse,
   make sure that you do not install and serial driver that
   uses the same port !!!!
*/
#if 0
  TTY2_DRIVER_TABLE_ENTRY,

#if PS2_MOUSE
PAUX_DRIVER_TABLE_ENTRY,
#else
/*
* Make sure that you have selected the COM port and the
* mouse type in ( c/src/lib/libbsp/i386/pc386/console/serial_mouse.h ).
*/
SERIAL_MOUSE_DRIVER_TABLE_ENTRY,
#endif
/* Standard VGA driver */
FBVGA_DRIVER_TABLE_ENTRY,
#else
{NULL,NULL,NULL,NULL,NULL,NULL},
{NULL,NULL,NULL,NULL,NULL,NULL},
{NULL,NULL,NULL,NULL,NULL,NULL},
#endif
{NULL,NULL,NULL,NULL,NULL,NULL},
MY_FRAMEBUFFER_DRIVER_TABLE_ENTRY,
MY_ADS_DRIVER_TABLE_ENTRY,
PTY_DRIVER_TABLE_ENTRY
};


#include <confdefs.h>

==================================

/*In framebuffer.h */

rtems_device_driver FB_Open( rtems_device_major_number major,
                                 rtems_device_minor_number minor,
                                 void *args );


rtems_device_driver FB_Close( rtems_device_major_number major, rtems_device_minor_number minor, void *args );


rtems_device_driver FB_Control( rtems_device_major_number major, rtems_device_minor_number minor, void *args );


rtems_device_driver FB_Initialize( rtems_device_major_number major, rtems_device_minor_number minor, void *args );


//When using the following driver setup, we don't need a read or write function since the subdriver "fblinx.c" handles the pixels directly
#define MY_FRAMEBUFFER_DRIVER_TABLE_ENTRY \
{ FB_Initialize, FB_Open, FB_Close, NULL, NULL, FB_Control }


==================================


At 08:20 AM 2/5/2005, you wrote:

Hello all,

I've compiled microwindows demo for pc386 bsp.

Trying to run wdemo on real pc and bochs too, I found problem in getting access to /dev/fb0.

In microwindows/src/scr_rtems.c :

....
static PSD
fb_open(PSD psd)
{
        char *  env;
        int     type, visual;
        int     tty;
        PSUBDRIVER subdriver;
        struct fb_screeninfo fb_info;

        assert(status < 2);

        /* locate and open framebuffer, get info*/
        if(!(env = getenv("FRAMEBUFFER")))
                env = "/dev/fb0";
        fb = open( env, O_RDWR);
        if(fb < 0) {
                EPRINTF("Error opening %s: %m\n", env);
     return NULL;
  }

Call to open() always returns -1.

Anyone may help?

Thanks.

Luca

Mark Mussetter Link Communications, Inc. 1035 Cerise Rd Billings, MT 59101-7378 phone: (406) 245-5002 ext 105 Fax: (406) 245-4889 WWW: http://www.link-comm.com MailTo:mark@link-comm.com




--
Joel Sherrill, Ph.D.             Director of Research & Development
joel@OARcorp.com                 On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
   Support Available             (256) 722-9985