<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
   <TITLE>vxWorks Port of NTP</TITLE>
   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; Linux 2.0.30 i586) [Netscape]">
</HEAD>
<BODY LINK="#00008B" VLINK="#8B0000">

<H1>VxWorks port of NTP </H1>

<P>Creating a port for vxWorks posed some problems. This port may help
as a starting point for similar ports to real-time OS's and other embeddable
kernels, particularly where main() is not allowed, and where the configure
scripts need to be altered. </P>

<H1><B>Configuration issues</B></H1>

<P>I decided to do as little invasive surgery as possible on the NTP code,
so I brought the vxWorks header tree in line with the standard unix tree.
The following changes were needed, as a side effect these changes will
allow for easy porting of other autoconfigure enabled code. </P>

<P>Where I have 386 you will need to put in your target type. The vxWorks
tree entry point is /usr/wind. </P>

<P><BLINK>WARNING: Check you are not overwriting files, before entering
the following: there should be no conflict, but check first... </BLINK></P>

<P>export CC=&quot;cc386 -nostdlib -m486 -DCPU=I80486 -I/usr/wind/target/h&quot;
<BR>
export RANLIB=ranlib386 <BR>
export AR=ar386 <BR>
export VX_KERNEL=/usr/wind/target/config/ims_std_bsp/vxWorks <BR>
cd /usr/wind/target/sys <BR>
ln -s ../signal.h <BR>
ln -s ../time.h <BR>
ln -s socket.h sockio.h <BR>
ln -s ../selectLib.h select.h <BR>
ln -s ../timers.h <BR>
touch file.h param.h resource.h utsname.h var.h ../netdb.h ../a.out.h ../termios.h
<BR>
echo &quot; ******ADD #include \&quot;sys/times.h\&quot; to sys/time.h
&quot; </P>

<P>The configure script must be changed in the following way to get the
linking tests to work, once in the correct directory issue the following
commands: <BR>
sed -e 's%main.*()%vxmain()%' configure &gt; configure.vxnew <BR>
mv configure.vxnew configure <BR>
chmod 755 configure </P>

<P><BR>
The <A HREF="../../configure.in">configure.in </A>file needed to be altered
to allow for a host-target configuration to take place. </P>

<UL>
<LI>The define SYS_VXWORKS was added to the compilation flags. </LI>

<LI>Little endianess is set if the target is of type iX86. </LI>

<LI>The size of char, integer, long values are all set. If Wind River ever
changes these values they will need to be updated. </LI>

<LI>clock_settime() is defined to be used for setting the clock. </LI>

<LI>The Linking flags have -r added to allow for relinking into the vxWorks
kernel </LI>
</UL>

<P>Unfortunately I have had to make use of the <A HREF="../../include/ntp_machine.h">ntp_machine.h
</A>file to add in the checks that would have been checked at linking stage
by autoconf, a better method should be devised. </P>

<UL>
<LI>There is now a NO_MAIN_ALLOWED define that simulates command line args,
this allows the use of the normal startup sysntax. </LI>

<LI>POSIX timers have been added. </LI>

<LI>Structures normally found in netdb.h have been added with, the corresponding
code is in <A HREF="../../libntp/machines.c">machines.c </A>. Where possible
the defines for these have been kept non-vxWorks specific.</LI>
</UL>

<P>Unfortunately there are still quite a few SYS_VXWORKS type defines in
the source, but I have eliminated as many as possible. You have the choice
of using the usrtime.a library avaliable from the vxworks archives or forgoing
adjtime() and using the clock_[get|set]time().The <A HREF="../../include/ntp_machine.h">ntp_machine.h
</A>file clearly marks how to do this. </P>

<H1><B>Compilation issues</B> </H1>

<P>You will need autoconf and automake ... available free from the gnu
archives worldwide. </P>

<P>The variable arch is the target architecture (e.g. i486) </P>

<P>mkdir A.vxworks (or whatever....) <BR>
cd A.vxworks <BR>
../configure --target=arch-wrs-vxworks [any other options] <BR>
make </P>

<P>The program should proceed to compile without problem. The daemon xntpd,
ntpdate, ntptrace, xntpdc, ntpq programs and of course the libraries are
all fully ported. The other utilities are not, but they should be easy
to port. </P>

<H1>Running the software </H1>

<P>Load in the various files, call them in the normal vxWorks function
type manner. Here are some examples. Refer to the man pages for further
information. </P>

<P>ld &lt; ntpdate/ntpdate <BR>
ld &lt; xntpd/xntpd <BR>
ld &lt; ntptrace/ntptrace <BR>
ld &lt; ntpq/ntpq <BR>
ld &lt; xntpdc/xntpdc <BR>
ntpdate (&quot;-b&quot;, &quot;192.168.0.245&quot;) <BR>
sp(xntpd, &quot;-c&quot;, &quot;/export/home/casey/xntp/ntp.conf&quot;)
<BR>
xntpdc(&quot;-c&quot;, &quot;monlist&quot;, &quot;192.168.0.244&quot;)
<BR>
ntpq(&quot;-c&quot;, &quot;peers&quot;, &quot;192.168.0.244&quot;) <BR>
ntptrace(&quot;192.168.0.244&quot;) <BR>
</P>

<H1>Bugs and such </H1>

<P>Should you happen across any bugs, please let me know, or better yet
fix them and submit a patch. <A HREF="http://www.ccii.co.za">CCII Systems
(Pty) Ltd</A>, my employers, have sponsored the time to this port, we would
be quite willing to negotiate to do further work. Please let me know how
it goes, I would be most interested in offsets and configurations. </P>

<P><BR>
</P>

<P><A HREF="http://www.ee.uct.ac.za/~casey">Casey Crellin</A> <BR>
<A HREF="mailto:casey@ccii.co.za">casey@ccii.co.za</A> </P>

<P><BR>
</P>

</BODY>
</HTML>
