bug-hurd
[Top][All Lists]
Advanced

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

gnumach2 & the serial port


From: Daniel Wagner
Subject: gnumach2 & the serial port
Date: Fri, 24 Jan 2003 01:49:21 +0100
User-agent: Gnus/5.090008 (Oort Gnus v0.08) Emacs/21.2 (i386-debian-linux-gnu)

Hi

I'm try to get the serial driver from OSKit working with gnumach2.
Basically I just changed the Makefile to include the freebsd driver
library and added the oskit_freebsd_init_sio call to
gnumach/oskit/ds_osenv.c.  Of course things are not that simple and so
I see a panic as soon the ttyS1 device is accessed.  BTW looks this
setup correct?  
  
  hurd:~# showtrans /dev/ttyS1
  /hurd/term /dev/ttyS1 device @isa@0x02f8

After several unsuccessful days trying to get gdb working, I
stepped back and started to do a simple printf debugging and gathered
some results.  

When the device is accessed for the first time dev_open_com
(gnumach/oskit/ds_routines.c) is called.  After some bookeeping things
the device should be opened to decide which flavor it is
(oskit_device_query).  But oskit_device_query doesn't find the serial
device.  Actually the serial driver implements the oskti_stream_iid
interface, so it should be found if the driver would be initialized.
The question is why it's not.  The serial driver object will be fully
initialized when the bus is probed.  So before we can access the
serial driver object we need to probe the bus.  The code is also there
in dev_open_com but obviously never called (I have checked it with
printf):

   else if (oskit_device_query (com_device, &oskit_bus_iid,
                                 (void **) &bus) == 0)
      {
        printf ("XXX %s: oskit_bus_iid\n", __FUNCTION__);
        if (mode & D_WRITE)
          {
            device_lock (dev);
            mode = dev->mode & D_NODELAY;
            device_unlock (dev);
            if (mode & D_NODELAY)
              /* Someone was waiting for us to finish opening.  */
              thread_wakeup ((event_t)dev);
            device_deallocate (dev);
            return D_READ_ONLY;
          }
        ops = &bus_device_ops;
        rc = populate_bus (dev, bus);
        oskit_bus_release (bus);
      }


I don't think this code is there just for fun, so the question is how
do I trigger gnumach2 to execute this part of the code? 

thanks,
daniel

ps: If someone is interested how to debug gnumach under bochs let me
know.  I'm quite experinced with that now :)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]