mirror of
				https://github.com/Wind4/vlmcsd.git
				synced 2025-11-04 00:23:21 +08:00 
			
		
		
		
	
		
			
	
	
		
			111 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			111 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								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.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |