Introduction to uClinux
As mentioned in the previous post, I’ve decided to work on μClinux kernel porting as my project in AESTE. I will briefly introduce it in this post. μClinux (Micro-Controller Linux) is a linux kernel targeted for embedded devices without memory management unit. μClinux was first implemented in DragonBall integrated microprocessor, Motorola MC68328 back in 1998, and it has now ported to many embedded systems in various areas. Examples of these devices include Apple iPod, Sigma Designs EM8500 based DVD players, IntelliCom remote control system, StarDot NetCam, Aplio/PRO IP Phone, SnapGear LITE2 VPN/Router, etc.
Being an embedded kernel, μClinux is small in terms of kernel size, owning to its lightweight C library, μClibc. Furthermore, the ability of execute-in-place (XIP) in μClinux removes the need to load executable in Random Access Memory (RAM) and thus greatly reduces the RAM requirement. There are other prominent features, such as multi-tasking, full Linux Application Programming Interface (API), and not to mention the support of various processor architecture.
The lack of memory management in μClinux possesses few design considerations. With Virtual Memory (VM) in conventional linux, the stack of a running process can be grown whenever needed, whereas the stack size in μClinux must be allocated at compile time. On the other hand, μClinux does not implement fork() as in Linux; instead it implements vfork(), in which the parent execution is stopped and new memory is created before the child process is executed.