VxWorks under Linux

January 24, 2019

Linux hosted cross compilers for VxWorks

These notes were written back in 2013. It is 2019 and I am still using these compilers under Fedora 29, which amazes even me. These are gcc 2.8.1 built to generate a.out format as the legacy VxWorks I use expects and requires.

Long ago (maybe as long ago as 1999), I fetched the gcc and binutils soures and built a set of cross compilers and tools to support the VxWorks 5.0.1 and 5.3.1 projects (m68k and pc486) here at the observatory.

If you want to download the compilers I built nearly 20 years ago, you are welcome to do so. We are still using them on a regular basis, and they work just fine. We are currently using them under Fedora 19 on x86_64 systems. If you are used to compiling on creaky old sun workstations, you will find them to be wonderfully fast!

To use them, you should put them at /u1/wind/host/linux, i.e. make this directory (or series of directories) and untar the files there. This will just work, if you put them elsewhere, you are going to discover that there are some path names built into the compilers (as I recall anyway) and you will get strange errors and in general be unhappy.

You can of course put them into /opt someplace and let the path I recommend be a link to wherever you put them. On my systems I have a partition called /u1 and keeping compilers in this partition preserves them across major system upgrades (i.e. it fits in with my way of doing system administration).

I use a script I call "vxmake" to set appropriate environment variables and then invoke make. There are certainly other ways to skin this cat. Some people will prefer to put the environment settings into their .bashrc. I like keeping my normal environment clean and just setting up the vxworks environment when I run make. Here is what my vxmake script looked like at some point in time, but use the link above to download a current version.

#! /bin/sh
    export WIND_HOST_TYPE=linux
    export WIND_BASE=/u1/wind

    export VX_VW_BASE=/u1/wind/target

    export PATH=/u1/wind/host/linux/bin:$PATH
    export GCC_EXEC_PREFIX=/u1/wind/host/linux/lib/gcc-lib/

if [ -f ".vwx86" ]; then
	export VX_TARGET_CPU=I80486
else
	export VX_TARGET_CPU=MC68030
fi

# since this is linux, this is Gnu make
make $*
Notice that I use a hidden file to trigger an environment variable setting, there are certainly better ways to do this. This ain't necessarily pretty, but it gets the job done. If I had it all to do over again, I would do it differently, but ...

Actually if you download my vxmake file using the link above, you will see that there are some other tricks of this sort to specify vxworks versions.


Have any comments? Questions? Drop me a line!

Adventures in Computing / [email protected]