Last week I was presenting as a guest at the 8th International System-on-Chip Conference, discussing "Creating Coherence in SoC Linux". It was a lot of fun talking to a very knowledgable group of embedded system designers.
One of the points I raised was that I have been working on operating systems since about 1980 or so, and Linux is fundamentally different than any OS I have ever worked with, and how this affects embedded developers.
Every other OS I know about is either a complete and working binary, or you have source code which can be built built into a working binary. If you get sources, you also get a way to compile and link those binaries and create a bootable image. They may not be perfect, but they work.
For example, around 1986 I was working at Sequent Computer Systems in the OS group doing builds, and we moved from a BSD based Unix to one based on AT&T's System V. The System V sources came with scripts which walked the source directory and invoked the make command to compile stuff.
What we needed to do at Sequent was to take this monster script and modify it:
- Cross-compile for two different machine architectures.
- Do as much compiling in parallel as possible.
- Run it on machines based on the Intel i386.
- Do a complete build every night without fail.
But once we were done, we had a complete operating system source with a way to build it. It worked for us, since the various components would not change unless we changed them.
But Linux is, as I said, totally different. Linux is just a kernel and there is no official way to build a whole operating system.
Embedded developers ideally should be able to build the whole OS from sources. Why?
- You want to selectively patch different components without a lot of effort to pick up sources for the bits you want to update.
- You may want to freeze a certain subsystem, when the rest of a binary distro may move everything forward. A source build makes this easier.
- You might want to play with compiler options to wring the best performance out for your device. You want to run these options across all of the OS sources.
With no official build system or methodology, you either need to create one or adopt one.
Of course, I suggest you adopt the one in the Yocto Project. And even better, join the community to enhance it.
Next time I'm going to pick on the idea of how to build Linux and what your options are. This is enough for now.