This is the mail archive of the ecos-discuss@sourceware.cygnus.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RE: Ethernet and Serial drivers for Linux target?



On 10-Nov-99 Grant Edwards wrote:
> 
> Hi,
> 
> I told management that it should be possible to write serial port and
> Ethernet device drivers for the Linux eCos target, thus allowing
> people to do eCos application development on Linux boxes.  Of course
> the performance and timing won't be the same, but for basic application
> functionality it should be good enough for many things.
> 
> Has anybody done this?  I assume that all you have to do is to map
> cyg_io_read() and cyg_io_write() into read() and write() calls, and
> map cyg_io_get_config() and cyg_io_set_config() into appropriate
> ioctl() calls?
> 
> The serial driver should be able to use the standard /dev/ttySx
> devices and the Ethernet driver can use the af_packet module to send
> and receive Ethernet packets.  Is this going to be as straight-forward
> as I think it is, or have I dug myself into a hole?
> 

It absolutely should be that simple (or we did a poor job designing it :-)

The serial device driver has two layers, one which is platform independent
and one is hardware dependent.  You'll want to creat a platform/hardware
dependent module that implements the basic functionalities.
 o Serial output is simple, no interrupts required
 o Serial input is a little harder if you want to support an interrupt
   driven model (i.e. other threads in your eCos application can run while
   one or more threads waits for input).  In this case, you'll need to use
   signals (SIGIO) to get indicate that data is ready and then use the
   interrupt model to send data to the upper levels of the driver.  This is
   not hard, just a little more work.  If you don't care, you can just blow
   this off and make input non-interrupt driven as well.
 o Control functions map directly onto Linux 'ioctl' calls.

For a purely non-interrupt driven driver, look at:
  .../io/serial/XXX/src/arm/pid_serial.c
Or the interrupt driven version
  .../io/serial/XXX/src/arm/pid_serial_with_ints.c

Note: the non-interrupt version may be a little "crusty", I haven't used it
in quite a while, but you'll get the idea.

As for the ethernet, I'd like to see what you come up with.

If you have questions or problems, be sure to let me (or the eCos team/list)
know;  we're glad to try and help.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]