Hi Greg,
My project involve using lpc3130 to generate pulses. I design my board
using lpc3130 with no external memmory. I run my code from the 96k of
SRAM. Would you mind show me how to use a strip down barebone version
of Nuttx that will fit in a small memory area. All I need is the RTOS
without file system, graphics, net, huge libraries (just some useful
popular one like printf).
I tried to following from your previous suggestion:
Removed lib_libdtoa.c
Added -nostdlibs to my linker flag
Used the ld.script from configs/ea3131/usbserial
Now I'm running in to more errors as follow:
C:\Firmware\Nuttx_Yagarto\Debug/../sched/sched_releasefiles.c:80:
undefined reference to `files_releaselist'
./sched/sched_setupidlefiles.o: In function `sched_setupidlefiles':
C:\Firmware\Nuttx_Yagarto\Debug/../sched/sched_setupidlefiles.c:88:
undefined reference to `files_alloclist'
C:\Firmware\Nuttx_Yagarto\Debug/../sched/sched_setupidlefiles.c:110:
undefined reference to `open'
C:\Firmware\Nuttx_Yagarto\Debug/../sched/sched_setupidlefiles.c:113:
undefined reference to `dup2'
C:\Firmware\Nuttx_Yagarto\Debug/../sched/sched_setupidlefiles.c:114:
undefined reference to `dup2'
C:\Firmware\Nuttx_Yagarto\Debug/../sched/sched_setupidlefiles.c:118:
undefined reference to `close'
./sched/sched_setuppthreadfiles.o: In function
`sched_setuppthreadfiles':
C:\Firmware\Nuttx_Yagarto\Debug/../sched/sched_setuppthreadfiles.c:86:
undefined reference to `files_addreflist'
./sched/sched_setuptaskfiles.o: In function `sched_setuptaskfiles':
C:\Firmware\Nuttx_Yagarto\Debug/../sched/sched_setuptaskfiles.c:105:
undefined reference to `files_alloclist'
C:\Firmware\Nuttx_Yagarto\Debug/../sched/sched_setuptaskfiles.c:144:
undefined reference to `files_dup'
./lib/lib_fclose.o: In function `fclose':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_fclose.c:59: undefined
reference to `close'
./lib/lib_fgets.o: In function `_lib_rawgetc':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_fgets.c:100: undefined
reference to `read'
./lib/lib_fgets.o: In function `_lib_consoleputc':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_fgets.c:117: undefined
reference to `write'
./lib/lib_fgets.o: In function `_lib_consoleputs':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_fgets.c:128: undefined
reference to `write'
./lib/lib_fopen.o: In function `lib_fdopen':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_fopen.c:158: undefined
reference to `inode_checkflags'
./lib/lib_fopen.o: In function `fopen':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_fopen.c:242: undefined
reference to `open'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_fopen.c:247: undefined
reference to `close'
./lib/lib_fread.o: In function `fread':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_fread.c:96: undefined
reference to `__aeabi_uidiv'
./lib/lib_fseek.o: In function `fseek':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_fseek.c:135: undefined
reference to `lseek'
./lib/lib_ftell.o: In function `ftell':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_ftell.c:118: undefined
reference to `lseek'
./lib/lib_fwrite.o: In function `fwrite':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_fwrite.c:96: undefined
reference to `__aeabi_uidiv'
./lib/lib_libfflush.o: In function `lib_fflush':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_libfflush.c:151: undefined
reference to `write'
./lib/lib_libfread.o: In function `lib_fread':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_libfread.c:176: undefined
reference to `read'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_libfread.c:219: undefined
reference to `read'
./lib/lib_libvsprintf.o: In function `llutodec':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_libvsprintf.c:762: undefined
reference to `__aeabi_uldivmod'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_libvsprintf.c:763: undefined
reference to `__aeabi_uldivmod'
./lib/lib_qsort.o: In function `qsort':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_qsort.c:227: undefined
reference to `__aeabi_uidiv'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_qsort.c:234: undefined
reference to `__aeabi_uidiv'
./lib/lib_rand.o: In function `nrand':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_rand.c:158: undefined
reference to `__aeabi_ui2d'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_rand.c:158: undefined
reference to `__aeabi_dmul'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_rand.c:158: undefined
reference to `__aeabi_d2uiz'
./lib/lib_rand.o: In function `frand1':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_rand.c:175: undefined
reference to `__aeabi_ui2d'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_rand.c:175: undefined
reference to `__aeabi_ddiv'
./lib/lib_rawinstream.o: In function `rawinstream_getc':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_rawinstream.c:62: undefined
reference to `read'
./lib/lib_rawoutstream.o: In function `rawoutstream_putc':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_rawoutstream.c:61: undefined
reference to `write'
./lib/lib_rint.o: In function `rint':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_rint.c:101: undefined
reference to `__aeabi_d2iz'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_rint.c:102: undefined
reference to `__aeabi_i2d'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_rint.c:102: undefined
reference to `__aeabi_dsub'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_rint.c:104: undefined
reference to `__aeabi_dcmplt'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_rint.c:108: undefined
reference to `__aeabi_dcmpeq'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_rint.c:112: undefined
reference to `__aeabi_dcmplt'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_rint.c:121: undefined
reference to `__aeabi_dcmpeq'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_rint.c:125: undefined
reference to `__aeabi_dcmpgt'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_rint.c:131: undefined
reference to `__aeabi_i2d'
./lib/lib_strtod.o: In function `is_real':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_strtod.c:70: undefined
reference to `__aeabi_ddiv'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_strtod.c:71: undefined
reference to `__aeabi_dcmplt'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_strtod.c:71: undefined
reference to `__aeabi_dcmple'
./lib/lib_strtod.o: In function `strtod':
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_strtod.c:96: undefined
reference to `__aeabi_ddiv'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_strtod.c:125: undefined
reference to `__aeabi_dmul'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_strtod.c:125: undefined
reference to `__aeabi_i2d'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_strtod.c:125: undefined
reference to `__aeabi_dadd'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_strtod.c:138: undefined
reference to `__aeabi_dmul'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_strtod.c:138: undefined
reference to `__aeabi_i2d'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_strtod.c:138: undefined
reference to `__aeabi_dadd'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_strtod.c:212: undefined
reference to `__aeabi_ddiv'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_strtod.c:216: undefined
reference to `__aeabi_dmul'
C:\Firmware\Nuttx_Yagarto\Debug/../lib/lib_strtod.c:220: undefined
reference to `__aeabi_dmul'
./examples/usbserial/main.o: In function `user_start':
C:\Firmware\Nuttx_Yagarto\Debug/../examples/usbserial/main.c:254:
undefined reference to `open'
C:\Firmware\Nuttx_Yagarto\Debug/../examples/usbserial/main.c:287:
undefined reference to `open'
C:\Firmware\Nuttx_Yagarto\Debug/../examples/usbserial/main.c:291:
undefined reference to `close'
C:\Firmware\Nuttx_Yagarto\Debug/../examples/usbserial/main.c:340:
undefined reference to `write'
C:\Firmware\Nuttx_Yagarto\Debug/../examples/usbserial/main.c:346:
undefined reference to `write'
C:\Firmware\Nuttx_Yagarto\Debug/../examples/usbserial/main.c:363:
undefined reference to `close'
C:\Firmware\Nuttx_Yagarto\Debug/../examples/usbserial/main.c:365:
undefined reference to `close'
C:\Firmware\Nuttx_Yagarto\Debug/../examples/usbserial/main.c:380:
undefined reference to `read'
C:\Firmware\Nuttx_Yagarto\Debug/../examples/usbserial/main.c:387:
undefined reference to `close'
C:\Firmware\Nuttx_Yagarto\Debug/../examples/usbserial/main.c:389:
undefined reference to `close'
C:\Firmware\Nuttx_Yagarto\Debug/../examples/usbserial/main.c:406:
undefined reference to `putchar'
C:\Firmware\Nuttx_Yagarto\Debug/../examples/usbserial/main.c:417:
undefined reference to `putchar'
C:\Firmware\Nuttx_Yagarto\Debug/../examples/usbserial/main.c:422:
undefined reference to `putchar'
C:\Firmware\Nuttx_Yagarto\Debug/../examples/usbserial/main.c:428:
undefined reference to `putchar'
C:\Firmware\Nuttx_Yagarto\Debug/../examples/usbserial/main.c:432:
undefined reference to `putchar'
./examples/usbserial/main.o:C:\Firmware\Nuttx_Yagarto\Debug/../examples/\
usbserial/main.c:437: more undefined references to `putchar' follow
./drivers/serial/lowconsole.o: In function `lowconsole_init':
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/serial/lowconsole.c:131:
undefined reference to `register_driver'
./drivers/serial/serial.o: In function `uart_register':
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/serial/serial.c:693:
undefined reference to `register_driver'
./drivers/can.o: In function `can_register':
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/can.c:618: undefined
reference to `register_driver'
./drivers/dev_null.o: In function `devnull_register':
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/dev_null.c:133: undefined
reference to `register_driver'
./drivers/dev_zero.o: In function `devzero_register':
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/dev_zero.c:126: undefined
reference to `register_driver'
./drivers/loop.o: In function `loop_read':
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/loop.c:231: undefined
reference to `lseek'
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/loop.c:242: undefined
reference to `read'
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/loop.c:253: undefined
reference to `__aeabi_uidiv'
./drivers/loop.o: In function `loop_write':
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/loop.c:278: undefined
reference to `lseek'
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/loop.c:288: undefined
reference to `write'
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/loop.c:299: undefined
reference to `__aeabi_uidiv'
./drivers/loop.o: In function `losetup':
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/loop.c:363: undefined
reference to `stat'
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/loop.c:389: undefined
reference to `__aeabi_idiv'
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/loop.c:405: undefined
reference to `open'
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/loop.c:417: undefined
reference to `open'
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/loop.c:428: undefined
reference to `register_blockdriver'
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/loop.c:438: undefined
reference to `close'
./drivers/loop.o: In function `loteardown':
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/loop.c:471: undefined
reference to `open_blockdriver'
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/loop.c:481: undefined
reference to `close_blockdriver'
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/loop.c:494: undefined
reference to `unregister_blockdriver'
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/loop.c:500: undefined
reference to `close'
./drivers/ramdisk.o: In function `ramdisk_register':
C:\Firmware\Nuttx_Yagarto\Debug/../drivers/ramdisk.c:326: undefined
reference to `register_blockdriver'
./binfmt/libnxflat/libnxflat_init.o: In function `nxflat_init':
C:\Firmware\Nuttx_Yagarto\Debug/../binfmt/libnxflat/libnxflat_init.c:112\
: undefined reference to `open'
./binfmt/libnxflat/libnxflat_load.o: In function `nxflat_load':
C:\Firmware\Nuttx_Yagarto\Debug/../binfmt/libnxflat/libnxflat_load.c:163\
: undefined reference to `mmap'
./binfmt/libnxflat/libnxflat_read.o: In function `nxflat_read':
C:\Firmware\Nuttx_Yagarto\Debug/../binfmt/libnxflat/libnxflat_read.c:129\
: undefined reference to `lseek'
C:\Firmware\Nuttx_Yagarto\Debug/../binfmt/libnxflat/libnxflat_read.c:138\
: undefined reference to `read'
./binfmt/libnxflat/libnxflat_uninit.o: In function `nxflat_uninit':
C:\Firmware\Nuttx_Yagarto\Debug/../binfmt/libnxflat/libnxflat_uninit.c:8\
4: undefined reference to `close'
./arch/arm/src/chip/lpc313x_clkfreq.o: In function `lpc313x_clkfreq':
C:\Firmware\Nuttx_Yagarto\Debug/../arch/arm/src/chip/lpc313x_clkfreq.c:1\
72: undefined reference to `__aeabi_uidiv'
./arch/arm/src/chip/lpc313x_lowputc.o: In function `up_configbaud':
C:\Firmware\Nuttx_Yagarto\Debug/../arch/arm/src/chip/lpc313x_lowputc.c:1\
89: undefined reference to `__aeabi_uidiv'
C:\Firmware\Nuttx_Yagarto\Debug/../arch/arm/src/chip/lpc313x_lowputc.c:1\
98: undefined reference to `__aeabi_uidiv'
./arch/arm/src/chip/lpc313x_spi.o: In function `spi_setfrequency':
C:\Firmware\Nuttx_Yagarto\Debug/../arch/arm/src/chip/lpc313x_spi.c:424:
undefined reference to `__aeabi_uidiv'
C:\Firmware\Nuttx_Yagarto\Debug/../arch/arm/src/chip/lpc313x_spi.c:432:
undefined reference to `__aeabi_uidiv'
./arch/arm/src/chip/lpc313x_timerisr.o: In function `up_timerinit':
C:\Firmware\Nuttx_Yagarto\Debug/../arch/arm/src/chip/lpc313x_timerisr.c:\
136: undefined reference to `__aeabi_uldivmod'
collect2: ld returned 1 exit status
make: *** [Pulser_Plus_Nuttx_Yagarto.elf] Error 1
Post by Gregory NuttHi, Nai,
... With your help, I was able to build all the .c and .s files. ...
I am glad to see that you are making progress!
... Now I run into library and linking problem. Here are the
errors.
Post by Gregory NuttHope you can help me out.
I'll try.
first defined here Pulser_Plus_Nuttx_Yagarto
Some errors like this make no sense to me. Perhaps the error log was
mangled by
Post by Gregory NuttYahoo! groups? I'll only respond to the errors that make sense to me
more undefined references to `IS_ALTFORM' follow
lib_libdtoa.c /Pulser_Plus_Nuttx_Yagarto/lib
I think I understand this one. This is because the file lib_libdtoa.c
is not
Post by Gregory Nuttcompiled directly. Rather, it is included within lib_vsprintf.c. I
did this in
Post by Gregory Nuttthis odd way because if you enable this floating point support, there are subtle
changes in the licensing because dtoa() is under the old BSD license.
lib_libvsprintf.c:192:# include "lib_libdtoa.c"
What you need to do is to remove the file lib_libdtoa.c from your project.
multiple definition of `getopt' ...
multiple definition of `optind' ...
multiple definition of `optopt' ...
My guess is that you are trying to link the NuttX libc with the some
other
Post by Gregory Nuttlibc. Make sure that you have -nostdlibs in your linker flags. These
are
Post by Gregory Nuttdefined in only one place in NuttX: lib/lib_getopt.c.
Pulser_Plus_Nuttx_Yagarto.elf section `.data' will not fit in region `isram'
...
This is some problem in your linker script. What linker script are
you using?
Post by Gregory NuttThe normal ld.script file for the ea3131? The size of isram is 192Kb.
This
Post by Gregory Nuttseems to be saying that the size of your image is larger than 192Kb.
By default, the ea3131 examples execute out of internal SRAM. If you
are
Post by Gregory Nuttbuilding something larger, you will probably have to change the ld.script file
so that the program linked for FLASH and use the lpc313x bootloader to save the
program to FLASH.
Pulser_Plus_Nuttx_Yagarto.elf: warning: sh_link not set for section
`.ARM.exidx' ...
This is not an error. Some toolchains generate this. Google for it,
lots of
Post by Gregory Nuttpeople see it and it is apparently not harmful. But I don't see it
with
Post by Gregory Nuttthe toolchain that I use.
undefined reference to `devnull_register' up_initialize.c
Defined in the file drivers/dev_null.c. Either you need to add
dev_null.c in
Post by Gregory Nuttyour project or remove the call from up_initialize.c.
undefined reference to `lowconsole_init' up_initialize.c
Similar comments. lowconsole_init is defined in
drivers/serial/lowconsole.c
Post by Gregory Nuttundefined reference to `mkfatfs' up_usbstrg.c
Defined in fs/fat/fs_mkfatfs.c
undefined reference to `ramdisk_register' up_usbstrg.c
Defined in drivers/ramdisk.c
no return statement in function returning non-void lpc313x_i2c.c
This is fixed in CVS.
Greg