| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- Compilation and pre-built binaries FAQ
- ======================================
- What is the best pre-built binary for my system or device?
- ----------------------------------------------------------
- None. The best binary is compiled by yourself using a toolchain that is
- optimized for your system or device in every respect.
- How do I compile my own binary?
- -------------------------------
- On a full blown desktop system this is relativly easy. If not already done so,
- install a C compiler (e.g. gcc or clang) through your packet manager, e.g.
- "sudo apt-get install gcc" (Debian/Ubuntu) or "sudo yum install gcc"
- (RedHat/Fedora).
- Then cd to your vlmcsd directory and type "make". vlmcs and vlmcsd will
- be built right away for your local system.
- If you installed gcc and it is not the default compiler for your OS or
- distribution, you may need to type "make CC=gcc" to explicitly select a
- specific C compiller.
- How do I compile a binary for my embedded device?
- -------------------------------------------------
- What you need is cross-compiling toolchain for your device. It consists of a
- C compiler, libraries, header files and some tools (called binutils). The
- toolchain must match the device in processor architecture, endianess, ABI,
- library and header files version, library configuration, ...
- If the endianess or ABI differs or the version of some library between
- toolchain and device differs too much, the resulting binary does not run
- on your device.
- Once you have a proper toolchain (probably found on the Internet for download),
- unpack it to any directory and type
- "make CC=/path/to/toolchain/bindir/c-compiler-binary"
- Building vlmcsd for using a cross-compiling toolchain is as easy as building
- vlmcsd for your local machine. The only question is, whether this you have
- a toolchain that actually matches your device.
- Whenever you change any parameter of the make command line, you must "clean"
- the source directory from intermediate files and output from previous runs
- of make. You can do so by typeing "make clean" or force make to behave as if
- the directory were clean by adding -B to the command line, e.g.
- "make -B CC=/path/to/toolchain/bindir/c-compiler-binary"
- I have downloaded several promising toolchains for my device but they all
- don't work. Can I create my own toolchain?
- -------------------------------------------------------------------------
- You can use tools like buildroot or OpenWRT. Both are able to create toolchains
- for many embedded devices. But this is out of the scope of this document.
- If you are unable to walk through thousands of configuration options and make
- the right choice, you may probably want to try the pre-built binaries.
- How to choose a pre-built binary?
- ---------------------------------
- The directory structure for the binaries is
- binaries
- +
- +--<operating system>
- +
- +--<cpu arch>
- +
- +--<endianess> (omitted if CPU or OS does not allow multi-endianess)
- +
- +--<C-library>
- <C-library> can also be "static". That means no special library is required.
- Static binaries are much bigger and need more RAM than dynamic binaries but
- are more likely to run on your system. Use a static binary only, if none of
- the dynmic binaries run.
- Don't get confused when a binary is named after an OS or a specific device,
- e.g. the name contains "openwrt", "tomato" or "Fritzbox". This does not mean
- that the binary will run only on that OS or on that device. It is a hint only
- where I got or built the toolchain from.
- How to determine the endianess of my system?
- --------------------------------------------
- - All Intel CPUs (x86, x32, x64) are little-endian only
- - Windows is little-endian only even if the CPU support big-endian
- - big-endian ARM is extremely uncommon. You can safely assume little-endian
- - little-endian PowerPC virtually does not exist since only newer POWER7
- and POWER8 CPUs support it. Always assume big-endian.
- - For MIPS both little-endian and big-endian are common. Most Broadcomm and
- TI chips run little-endian. Most Atheros and Ikanos CPUs run big-endian.
- Try typing
- echo -n I | od -o | awk 'FNR==1{ print substr($2,6,1)}'
- This returns 1 for little-endian systems and 0 for big-endian systems. However
- some devices do not have the od command and thus this method won't work.
|