Here are Yocto recipies that build a working system image for the Intel Edison based on Yocto Morty and later. Yocto, of course, is a build system, that downloads sources for a build environment, builds these, then downloads sources of a complete linux distribution, builds, packages (in this case as DEB’s) and installs them to the system image. It also builds a crosscompile environment (SDK) so you can devellop locally and deploy to the remote Edison. Using for instance Qt Creator, you can develop locally for your host machine and debug, or build for the remote Edison and remote debug. Qt Creator will upload the executable and start gdbserver for you. When your application works well, you can create a recipy and add it automatically to your system image.
The Edison comes of course with a system image preloaded based on Yocto Dizzy (Dizzy is the name of the version). Some of the recipies no longer build as the sources have disappeared. The branches starting with dizzy- have been updated by me, with either the broken recipies pointing to new sources, new versions of the sources, or otherwise removed. I haven’t build these recently, so more stuff might have broke. If so, let me know. As far as I’m concerned, the only interesting version right now is dizzy-rt that builds a preempt_rt version of the original 3.10.17 kernel.
The system image consists of a few distinct image files that you can find under
U-Boot (the boot loader)
For the Morty branches this needs to be generated outside Yocto as the recipe is not working well. It is a one time task to update U-Boot so you only need to build that once. Nevertheless, the Pyro and Rocko branches build U-Boot just fine.
Linux kernel with initramsfs
We need an initramfs because some kernel modules need to loaded late. To do this they can not be built-in. Unfortunately some of these modules are needed to access the sd card, where we have the root file system. To solve the ckicken-egg problems, the initramsfs holds a copy of the necessary modules, loads these, then mounts the sd card. It then performs a switch_root, continuing the boot from the sd card as if nothing happend.
Some people call initramfs initrd. Although they appear the same, they are different. Initramfs is a file system, Initrd a ram disk. Initramfs gets loaded into the kernel earlier. In our case we even build the Initramfs cpio into the kernel. Yocto does that by building a kernel and its modules. Then packing the necessary modules into a cpio, pass that to the kernel build system and build the kernel again.
Of course if script in the initramfs cannot find the rootfs, or the rootfs won’t boot, the initramfs can provide a busybox shell from which you can try to fix things.
Rootfs An ext4 formatted file system, containing the remaining kernel modules, systemd for maintaining services and other well known linux user space tools.
During boot firmware in ROM loads certain stuff (ifwi) that we unfortunately can’t touch. After this it loads U-Boot. U-Boot then normally loads and boots the kernel that if finds on
To boot from sd card or usb, you will need to interrupt u-boot while booting from a terminal by pressing ESC and enter the command
run edsboot or
run usbboot to boot from
/dev/sda respectively. If you don’t manually interrupt, your old image will boot.
After boot you can login, connect to ethernet (if you have a supported USB ethernet adapter) or connect to wifi (or both at the same time and the newer version of
connman supports this) and start securing your device. You need to use a terminal program to connect via USB to the Edison for this, at least until you have wifi or ethernet working. I have used screen and Gnome Terminal (which works a bit better as you have a line buffer that you can scroll up).
© 2018 Ferry Toth