[ECOS] creating serial driver
Andrew Lunn
andrew@lunn.ch
Fri Oct 28 10:14:00 GMT 2005
On Fri, Oct 28, 2005 at 02:50:50AM -0700, venkat ande wrote:
> Hello all,
>
> I am having a x86 PC board with running redboot in
> it.I have to add around 16 serial ports to my x86 PC
> board using PCI bus. But as a rookie i am first trying
> to make a driver for a single port.So what i did, i
> created a driver by using the generic driver of 16x5x.
> But i didn't place it inside the ecos tree. I made it
> as an application in which i used all those macros
> DEVTAB_ENTRY, SERIAL_CHANNEL_USING_INTERRUPTS,
> SERIAL_FUNS and then filled the api's with reference
> to the pattern of 16x5x driver.
>
> Then i made one more application to test this driver
> using the ?ecos-2.0\examples\serial.c? (i replaced the
> ?/dev/haldiag? by ?/dev/FT_ser_drv?), FT_ser_drv is
> the string name that i given to my driver.
>
> Now how i am building my last output file (srec).
> Actually i found this method in ecos discuss archives,
> i am pasting that part here:
>
> -------------------------------------
>
> >Anyway, build your device driver library just like an
> eCos
> >application, but instead of linking it to eCos just
> use ar to create a
> >library from the object file. There is nothing
> special needed, so just
> >look at normal examples for building libraries.
> >
> >To link the libarary to the application and eCos just
> add -lmylib to
> >the command line when linking. ie nothing special or
> magical needed.
> >
> >OK, now the thing to be careful of. When building a
> device driver
> >within the eCos tree there is normally a cdl option:
> >
> > compile -library=libextras.a foobar.c
> >
> >ie the object file is put into the library
> libextras.a not the normal
> >libtarget.a. At the end of the build process
> libextras.a is linked to
> >extras.o and this is then linked to your application,
> not
> >libextras.a. This is becasue the linker throws away
> any symbols not
> >referenced in libraries. Normally there is no
> reference to a device
> >driver because of the use of linker tables. So if the
> device driver
> >was inside a library it would not be pulled into the
> final application
> >executable.
> >
> >For your device driver in your library you cannot use
> the same
> >trick. So instead your application must reference
> something in the
> >device driver so that it is pulled in. Typically a
> device driver has a
> >DEVTAB_ENTRY, eg
> >
> >DEVTAB_ENTRY(ebsa285_serial_io,
> >
> CYGDAT_IO_SERIAL_ARM_EBSA285_SERIAL_NAME,
> > 0, // Does not
> depend on a lower level interface
> > &cyg_io_serial_devio,
> > ebsa285_serial_init,
> > ebsa285_serial_lookup, // Serial
> driver may need initializing
> > &ebsa285_serial_channel
> > );
> >
> >Doing something like:
> >
> > extern cyg_devtab_entry_t *ebsa285_serial_io;
> > ebsa285_serial_io = ebsa285_serial_io;
> >
> >will probably be enought.
> -----------------------------------------------
>
>
> in my case i am using ?FT_ser_ent? in place of
> ?ebsa285_serial_io? & FT_SER_DRV_NAME in place of
> CYGDAT_IO_SERIAL_ARM_EBSA285_SERIAL_NAME.
>
> Where as FT_SER_DRV_NAME is defined as:
>
> #define FT_SER_DRV_NAME "\"/dev/FT_ser_drv\""
>
>
>
> and also i have added this in my application file :
> ------------------------------------------
> extern cyg_devtab_entry_t *FT_ser_ent
> FT_ser_ent = FT_ser_ent;
> ------------------------------------------
> serial_app.c:80: warning: type defaults to `int' in
> declaration of `FT_ser_ent'
> serial_app.c:80: conflicting types for `FT_ser_ent'
> serial_app.c:79: previous declaration of `FT_ser_ent'
> serial_app.c:80: initializer element is not constant
> serial_app.c:80: warning: data definition has no type
> or storage class
> make: *** [serial_app.o] Error 1
You need to fix this. My guess is cyg_devtab_entry_t is not known
because you are missing a header file. Try including <cyg/io/serial.h>
Andrew
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
More information about the Ecos-discuss
mailing list