A dockerized environment to develop and deploy yocto based BSPs
A self contained bash script that given a configuration folder creates a Docker machine with code-server and a ready made yocto host development environment based on a specific Ubuntu version.
Here an example of a project using it: https://github.com/GoChik/yocto-env
The environment works on Linux, MAC-OS and Windows (tested with Docker for windows and WSL1/2). It requires the bash shell, Docker and jq.
Let's suppose you are going to work on a yocto based project named foo. Download the released script and put it alongside your environment folder. At this point your setup should look like this:
.
└── dev-env_1.0.sh
└── foo
└── manifest.json
└── defconfig
├── bblayers.conf.sample
└── local.conf.sample
bblayers.conf.sample and local.conf.sample are respectively the default bblayers.conf file and the local.conf file.
manifest.json Is the file describing which host machine, extra host packages, the default yocto maachine to use and where to fetch your layers from. It looks like this:
{
"host_distro": "ubuntu-16.04",
"extra_pkgs": ["cvs", "gdb", "device-tree-compiler"],
"machine": "raspberrypi0-wifi",
"layers": [
{
"method": "checkout",
"path": "poky",
"args":["https://git.yoctoproject.org/git/poky", "dunfell"]
},
{
"method": "checkout",
"path": "meta-openembedded",
"args": ["https://github.com/openembedded/meta-openembedded.git", "dunfell"]
},
{
"method": "checkout",
"path": "meta-raspberrypi",
"args": ["https://github.com/agherzan/meta-raspberrypi.git", "dunfell", "67baec35a3cabb0b92dea31d71c59752ae8123f7"]
}
]
}Nou you should be all set. execute the script as following to build your development machine:
$ ./dev-env_1.0.sh fooOnce completed setup your ssh keys if needed and then start the yocto environment with:
$ yocto-envThe yocto-env script will fetch layers you have specified in the manifest to the version or branch specified. If the layer folders are already populated it will not fetch the repo even if the version you are using is not the same one as the manifest one.
Once you are done with the current session close the vm terminal. Your work is saved in a docker volume named like your environment name (foo in this case)
