Note: These instructions assume you are using the Juno platform; it should be relatively trivial to adapt them to other platforms too.
Follow the instructions here to select a prebuilt OpenEmbedded configuration. This will download board firmware to a subdirectory in your workspace and will also place a filesystem image in the root of your workspace.
Burn this filesystem image to a USB stick, for example using `dd', then remount the USB stick so that you can see its `boot' and `rootfs' partitions on your host PC.
`dd'
`boot'
`rootfs'
Delete everything in the `boot' partition of the USB stick.
From the subdirectory in your workspace containing the downloaded board firmware, copy these two files to the `boot' partition of the USB stick:
`/SOFTWARE/Image'
`/SOFTWARE/juno[-r1|-r2].dtb'
Note: For the second file, copy the file corresponding to your revision of the Juno board, i.e. `juno.dtb' fo r0, `juno-r1.dtb' for r1, or `juno-r2.dtb' for r2.
`juno.dtb'
`juno-r1.dtb'
`juno-r2.dtb'
Next create a new EDK II UEFI startup script for Linux in the `boot' partition of the USB stick:
$ printf "Image dtb=juno[-r1|-r2].dtb initrd=ramdisk.img console=ttyAMA0,115200n8 root=/dev/sda2 rw rootwait earlyprintk=pl011,0x7ff80000 debug user_debug=31 androidboot.hardware=juno loglevel=9 sky2.mac_address=0xAA,0xBB,0xCC,0xDD,0xEE,0xFF" > startup.nsh
Note: Replace `juno[-r1|-r2].dtb' with the name of the second file that you copied earlier.
`juno[-r1|-r2].dtb'
Issue a `sync' command on your host PC, remove the USB stick, insert it into the Juno, and power cycle the board.
`sync'
UEFI should now boot the Linux kernel after its automatic countdown completes.
You can also manually invoke the startup script, for example if the USB stick is identified as `FS2' in your EDK-II UEFI environment:
`FS2'
Shell> FS2:\startup.nsh