<html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><style>body { line-height: 1.5; }blockquote { margin-top: 0px; margin-bottom: 0px; margin-left: 0.5em; }body { font-size: 10.5pt; font-family: ????; color: rgb(0, 0, 0); line-height: 1.5; }</style></head><body>
<div><span></span>Dear Chris,</div><div>For now, I use rtems-ld to generate my application. I have my base kernel, bkv01.elf, and my application, dl-01.c. </div><div><br></div><div>First, I compiled my application without linking: </div><div># <span style="background-color: rgba(0, 0, 0, 0); font-size: 10.5pt; line-height: 1.5;">arm-rtems4.11-gcc ${CFLAGS1} -o dl-01.o -c dl-01.c</span></div><div><span style="background-color: rgba(0, 0, 0, 0); font-size: 10.5pt; line-height: 1.5;">Then, I used rtems-ld to generate my loadable RAP: (something like below, please ignore the libs I added)</span></div><div><span style="background-color: rgba(0, 0, 0, 0); font-size: 10.5pt; line-height: 1.5;"># </span><span style="background-color: rgba(0, 0, 0, 0); font-size: 10.5pt; line-height: 1.5;">rtems-ld -v --base bkv01.elf -e hello_world dl-01.o  -o app01.rap -L /opt/rtems-4.11.1-release/4.11-bsp/arm-rtems4.11/xilinx_zynq_zedboard/lib/ -lbsd -lrtemsbsp -lrtemscpu -ljffs2 -lrtems++ -lz</span></div><div><span style="background-color: rgba(0, 0, 0, 0); font-size: 10.5pt; line-height: 1.5;"><br></span></div><div><span style="color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">base-image: bkv01.elf<br>cache:load-sym: object files: 1<br>cache:load-sym: symbols: 10688<br>Finding libraries:<br> found: ./libbsd.a<br> found: /opt/rtems-4.11.1-release/4.11-bsp/arm-rtems4.11/xilinx_zynq_zedboard/lib/librtemsbsp.a<br> found: /opt/rtems-4.11.1-release/4.11-bsp/arm-rtems4.11/xilinx_zynq_zedboard/lib/librtemscpu.a<br> found: /opt/rtems-4.11.1-release/4.11-bsp/arm-rtems4.11/xilinx_zynq_zedboard/lib/libjffs2.a<br> found: /opt/rtems-4.11.1-release/4.11-bsp/arm-rtems4.11/xilinx_zynq_zedboard/lib/librtems++.a<br> found: /opt/rtems-4.11.1-release/4.11-bsp/arm-rtems4.11/xilinx_zynq_zedboard/lib/libz.a<br>cc::stdlib: libgcc.a<br>cc::stdlib: libssp.a<br>cc::stdlib: libc.a<br>cache:load-sym: object files: 4513<br>cache:load-sym: symbols: 12987<br>resolver:resolving:  undefines, unresolved: 1<br>resolver:resolve  :    |- hello_world<br>resolver:resolved :    |   `--> dl-01.o (unresolved: 1)<br>resolver:resolved :    +-- referenced objects: 1<br>resolver:resolving:  ] undefines ==> dl-01.o<br>resolver:resolving:  dl-01.o, unresolved: 7<br>resolver:resolve  :     |- __getreent<br>resolver:resolved :     |   `--> bkv01.elf (base)<br>resolver:resolve  :     |- fprintf<br>resolver:resolved :     |   `--> bkv01.elf (base)<br>resolver:resolve  :     |- puts<br>resolver:resolved :     |   `--> bkv01.elf (base)<br>resolver:resolve  :     |- rtems_status_text<br>resolver:resolved :     |   `--> bkv01.elf (base)<br>resolver:resolve  :     |- rtems_task_create<br>resolver:resolved :     |   `--> bkv01.elf (base)<br>resolver:resolve  :     |- rtems_task_delete<br>resolver:resolved :     |   `--> bkv01.elf (base)<br>resolver:resolve  :     |- rtems_task_start<br>resolver:resolved :     |   `--> bkv01.elf (base)<br>resolver:resolved :     +-- referenced objects: 0<br>resolver:resolving: top: dl-01.o<br>resolver:resolving:  dl-01.o is resolved or resolving<br>resolver:resolving: dependents: 1<br>  1: dl-01.o<br>outputter:application: app01.rap<br>rap::layout: total:654 text:380 const:178 ctor:0 dtor:0 data:0 bss:0 symbols:12 (1) strings:26 relocs:59<br>rap:output: machine=0<br>rap:output: header=12<br>rap:output: .text: offset=177 size=380<br>rap:output: .const: offset=557 size=178<br>rap:output: .ctor: offset=735 size=0<br>rap:output: .dtor: offset=735 size=0<br>rap:output: .data: offset=735 size=0<br>rap:output: strtab=735<br>rap:output: symbols=761<br>rap:output: relocs=773<br>rap: objects: 1, size: 881, compression: 54.7%<br></span></div><div><span style="background-color: rgba(0, 0, 0, 0); font-size: 10.5pt; line-height: 1.5;"><br></span></div><div><span style="background-color: rgba(0, 0, 0, 0); font-size: 10.5pt; line-height: 1.5;">And, I got the RAP format file I want. This RAP would be downloaded into my system filesystem via FTP (just make rtems as server, and my host as client). </span></div><div><span style="background-color: rgba(0, 0, 0, 0); font-size: 10.5pt; line-height: 1.5;">Finally, I loaded this RAP file with dlopen, then an error came up:</span></div><div>    dlopen failed: global symbol not found: puts</div><div><br></div><div>Is there something wrong with my attempt? If so, please give my some advise, thanks a lot.</div><div><br></div><div>Best wishes,</div>
<div><br></div><hr style="width: 210px; height: 1px;" color="#b5c4df" size="1" align="left">
<div><span><div style="MARGIN: 10px; FONT-FAMILY: verdana; FONT-SIZE: 10pt"><div>xuelin.tian@qkmtech.com</div></div></span></div>
<blockquote style="margin-top: 0px; margin-bottom: 0px; margin-left: 0.5em;"><div> </div><div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm"><div style="PADDING-RIGHT: 8px; PADDING-LEFT: 8px; FONT-SIZE: 12px;FONT-FAMILY:tahoma;COLOR:#000000; BACKGROUND: #efefef; PADDING-BOTTOM: 8px; PADDING-TOP: 8px"><div><b>From:</b> <a href="mailto:chrisj@rtems.org">Chris Johns</a></div><div><b>Date:</b> 2016-12-29 16:52</div><div><b>To:</b> <a href="mailto:salpha.2004@gmail.com">Saeed Ehteshamifar</a>; <a href="mailto:xuelin.tian@qkmtech.com">xuelin.tian@qkmtech.com</a></div><div><b>CC:</b> <a href="mailto:users@rtems.org">users@rtems.org</a></div><div><b>Subject:</b> Re: rtems dynamic loading with waf</div></div></div><div><div>On 28/12/16 9:36 pm, Saeed Ehteshamifar wrote:</div>
<div>> Dear Xuelin,</div>
<div>> </div>
<div>> I share the pointers I emailed you here. Maybe it'd be useful for</div>
<div>> someone else too.</div>
<div>> Instructions on how to build a DL app via WAF can be found at:</div>
<div>> http://rtems-fi.blogspot.com/2016/08/dynamic-linking-in-rtems.html</div>
<div> </div>
<div>The blog post is not correct about loading being restricted due to</div>
<div>transferring object files on the fly. RTEMS will load any available obj</div>
<div>file and object files do not need to be bound into the base image using</div>
<div>tar, they just need to be available in a suitable file system. The</div>
<div>examples and tests bind the object files into the base image because we</div>
<div>cannot assume available media on a target, eg a simulator. A target with</div>
<div>a file system such as JFFS and networking could be updated externally</div>
<div>and the object files loaded from the JFFS file system.</div>
<div> </div>
<div>The fact we require the same compiler flags to build the loadable object</div>
<div>file is a requirement, important and a feature. Code loaded by RTEMS's</div>
<div>libdl is the same as statically linked code so the performance is the</div>
<div>same. There is no difference in call overheads or access to global data</div>
<div>and this means you get the same performance as being statically linked.</div>
<div>RTEMS is a single address space and we need all code to be built the</div>
<div>same way, I consider anything else as risky.</div>
<div> </div>
<div>> Disclaimer: An "unresolved external" error was encountered at run-time,</div>
<div>> after building the DL app via the above instructions.</div>
<div> </div>
<div>The shell command should be able to print a list of unresolved symbols.</div>
<div> </div>
<div>> The link also encompasses instructions on how to build a DL app via OMK,</div>
<div>> as an alternative to WAF. The OMK DL app ran without an error.</div>
<div>> </div>
<div>> It'd be nice if you, or anyone who successfully builds a DL app via WAF,</div>
<div>> share the code/instructions here because AFAIK there's no such example</div>
<div>> in the RTEMS repository/wiki.</div>
<div> </div>
<div>The following is the waf build script I used to develop libdl.</div>
<div> </div>
<div>https://git.rtems.org/chrisj/rtl.git/tree/wscript</div>
<div> </div>
<div>The libdl support and building for it is complicated and there is a wide</div>
<div>of things that are possible. Good documentation is needed and something</div>
<div>I would like to see exist.</div>
<div> </div>
<div>Chris</div>
</div></blockquote>
</body></html>