In OpenEmbedded we had long discussions how to get minimal images few times, there were developers which worked on getting smallest possible working ones — one of them was Matthias Hentges which
essential-to-boot image was 3.5M jffs2 and had everything needed to use WiFi on Sharp Zaurus SL-C1000 (akita).
Finally Richard Purdie added
task-base into OpenEmbedded repository as new idea to generate rootfs images. First version was far from perfect but show a way. We improved it a lot since then so now it support:
- Linux 2.4/2.6
- power management systems: APM, ACPI
- wireless connectivity: Bluetooth, Wifi, Irda
- USB host and gadget (gadget only under 2.6 because 2.4 lack any)
- screen in machines which have them
- PCI, PCMCIA/CF bus
- internal storage for models with microdrives or hard disks (‘ext2’ feature)
- NFS for nfsroot installations
Any new features are easy to add.
Why switch from
task-base is required now for all target devices and distributions? Reason is simple — this allow much better integration of them and leverage possibility of forgetting something. For example in past one of our distributions supported WPA ‘out of box’ but there were problems with some methods of encryption — it was fixed by update with few extra kernel modules added. Now imagine that you have to change this thing for all distributions and have to check which of them support wireless with WPA capable drivers — nightmare… Instead of it you change
task-base recipe and every distro will get this update for free.
Another bonus which distro/machine maintainers get with
task-base is simplify of configurations. There is no need to specify all tools again and again, thinking which parts of rootfs should be specified in machine config and which in distribution one. Instead of it only features of target and distro has to be defined and
task-base will handle rest of it.
Few months ago I was working on creating new distribution called
celinux-test for CELF. Main target of it was
omap5912osk developer board. I decided to use
task-base from beginning.
Cleaning machine and distro config
omap5912osk.conf was long because this board has modular kernel so lot of modules need to be present in rootfs. I started from definition of MACHINE_FEATURES and switch to
MACHINE_FEATURES = "kernel26 pcmcia usbhost"
MACHINE_TASK_PROVIDER = "task-base"
Then I build
bootstrap-image and compared amount of packages installed with a list from older rootfs. Some tools were lacking so I checked them and added proper features to
celinux-test distribution config:
DISTRO_FEATURES = "nfs pcmcia usbhost"
bootstrap-image gave me rootfs which contained nearly same set of packages as old image. New one got some additional pcmcia modules,
usbutils but every needed utils present in older images were present.
Cleaning of configs allow to remove all BOOTSTRAP_* variables. But how to add some packages into rootfs without them? There is solution —
MACHINE_EXTRA_RDEPENDS/MACHINE_EXTRA_RRECOMMENDS and same for distros:
DISTRO_EXTRA_RDEPENDS/DISTRO_EXTRA_RRECOMMENDS. Everything from them will get added into