From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bart Veer To: grante@visi.com Cc: ecos-discuss@sourceware.cygnus.com Subject: [ECOS] Re: Ethernet and Serial drivers for Linux target? Date: Thu, 11 Nov 1999 09:37:00 -0000 Message-id: <199911111737.RAA02373@sheesh.cygnus.co.uk> References: <19991110143853.A18972@visi.com> <382AF88B.95F35E45@cygnus.co.uk> <19991111112313.A28718@visi.com> X-SW-Source: 1999-11/msg00041.html >>>>> "Grant" == Grant Edwards writes: Grant> On Thu, Nov 11, 1999 at 05:10:35PM +0000, Jonathan Larmour wrote: >> Grant Edwards wrote: >> > >> > 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? >> >> One other issue that no-one else has mentioned is that you >> can't make calls to the system read() and write(), ioctl() etc. >> directly. To do that would involve linking with glibc, and that >> would simply not work. Grant> I presume I could grab the source for Linux glibc read() Grant> write() and ioctl(), strip out the stuff I don't need, and Grant> impliment my own eCos-friendly versions of those calls... It may be better to look at syscall-i386-linux-1.0.S in the synthetic target HAL sources. Note that if you want more realistic device driver behaviour, with interrupts etc., then you will want to experiment with asynchronous I/O, SIGIO signals, etc. If an eCos thread performs a blocking Linux read() syscall then you will block the entire eCos application, which is probably not what you want. Of course this makes the problem a bit more challenging :-) >> Instead all the current interfacing is done using kernel system >> calls directly. Grant> Ah. That's one question about which I had begun to wonder. Grant> I haven't looked at Linux system calls very closely, but Grant> there shouldn't be that much of a difference in abstraction Grant> bewteen what the kernel provides and what I need to make an Grant> eCos serial driver work. >> Of course, this doesn't prevent you having a separate native >> linux program acting as a server for the client requests, >> communicating using fd's. And that's where Bart's solution >> would come in, in the thread in October he mentioned. Grant> I suppose I could also just use the eCos 16550 driver and Grant> diddle the hardware directly, but I'd rather let the Linux Grant> drivers worrry about that so that I can utilize other types Grant> of serial ports. I would certainly recommend you avoid messing about with PC hardware directly, except as an absolute last resort. The current synthetic target provides a safe and stable development environment, not unlike a sandbox. Fiddling with real hardware would upset this. Bart Veer // eCos net maintainer