This is the mail archive of the
ecos-discuss@sources.redhat.com
mailing list for the eCos project.
Help linking device driver
- From: David Brennan <eCos at brennanhome dot com>
- To: eCos Discussion List <ecos-discuss at sources dot redhat dot com>
- Date: Fri, 03 Dec 2004 20:24:10 -0800
- Subject: [ECOS] 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