[ECOS] Help linking device driver

David Brennan eCos@brennanhome.com
Sat Dec 4 04:24:00 GMT 2004


I have converted a portion of my application device driver to be an eCos 
device driver. But I am having trouble getting it to link with my 
application. I defined the device io and devtab entries, but that alone 
doesn't seem to be enough to get my new object module to get pulled into 
the main application. Is there a trick to getting that to work?

Code snippets:
BLOCK_DEVIO_TABLE(cyg_io_vme_devio,
                  cyg_devio_bwrite,
                  cyg_devio_bread,
                  cyg_devio_select,
                  vme_get_config,
                  vme_set_config
);

BLOCK_DEVTAB_ENTRY(vme_devtab_io,
                   CYGDAT_IO_VME_UNIVERSE_NAME,
                   0,
                   &cyg_io_vme_devio,
                   universe_init,
                   universe_lookup,
                   &universe_data);

If I check the libtarget.a, the symbols are all in there.
$ i386-elf-objdump -x ../eCos/install/lib/libtarget.a | fgrep universe_
io_vme_universe_universe.o:     file format elf32-i386
rw-r--r-- 14112/10545  41724 Dec  3 17:30 2004 io_vme_universe_universe.o
  8 .text.universe_lookup 00000007  00000000  00000000  00007860  2**2
  9 .text.universe_init 00000136  00000000  00000000  00007868  2**2
00000000 l     F .text.universe_init    00000136 universe_init
00000000 l     F .text.universe_lookup  00000007 universe_lookup
00000000 l     O .bss   000000f8 universe_data
00000000 l    d  .text.universe_lookup  00000000
00000000 l    d  .text.universe_init    00000000
00000cf8 R_386_32          .text.universe_lookup
00000d4c R_386_32          .text.universe_init
0000000c R_386_32          .text.universe_init
00000010 R_386_32          .text.universe_lookup
RELOCATION RECORDS FOR [.text.universe_init]:
io_vme_universe_vme_master.o:     file format elf32-i386
rw-r--r-- 14112/10545  36356 Dec  3 17:30 2004 io_vme_universe_vme_master.o

But after linking libtarget into my application, none of the symbols 
seem to have been pulled in. (I'm not sure of the most correct way of 
checking for a library, but as a test I did:
$ i386-elf-objdump -x app.out | fgrep pc_serial_
00352e34 l     O .data  00000014 pc_serial_funs
0027d600 l     F .text  00000030 pc_serial_putc
0027d630 l     F .text  00000024 pc_serial_getc
0027d654 l     F .text  00000044 pc_serial_set_config
0027d698 l     F .text  00000015 pc_serial_start_xmit
0027d6b0 l     F .text  00000015 pc_serial_stop_xmit
00352ea0 l     O .data  0000002c pc_serial_info0
00352ee0 l     O .data  000000cc pc_serial_channel0
0038b240 l     O .bss   00000080 pc_serial_out_buf0
0038b2c0 l     O .bss   00000080 pc_serial_in_buf0
0027d574 l     F .text  00000073 pc_serial_init
0027d5e8 l     F .text  00000018 pc_serial_lookup
00352fc0 l     O .data  0000002c pc_serial_info1
00353000 l     O .data  000000cc pc_serial_channel1
0038b340 l     O .bss   00000080 pc_serial_out_buf1
0038b3c0 l     O .bss   00000080 pc_serial_in_buf1
0027d6f0 l     F .text  00000202 pc_serial_DSR
0027d6c8 l     F .text  00000028 pc_serial_ISR
00355520 g     O .data  00000020 pc_serial_io0
00355540 g     O .data  00000020 pc_serial_io1

But
$ i386-elf-objdump -x app.out | fgrep vme_
yields nothing.

So I'm pretty sure my device is not being linked in. Any help would be 
greatly appreciated.

Thanks
David Brennan

-- 
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