From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gary Thomas To: Grant Edwards Cc: ecos , =ecos@visi.com Subject: RE: [ECOS] Ethernet and Serial drivers for Linux target? Date: Wed, 10 Nov 1999 16:40:00 -0000 Message-id: References: <19991110143853.A18972@visi.com> X-SW-Source: 1999-11/msg00034.html 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.