This is the mail archive of the ecos-discuss@sources.redhat.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]
Other format: [Raw text]

Help linking device driver


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


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