Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Yocto Linux meta recipe for wolfTPM examples #92

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 59 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,6 @@ looks as follows:
Testing Wolfssl-py and Wolfcrypt-py
-----------------------------------


To test the python wrapper for wolfSSL and wolfcrypt in a yocto build it will
require python3, python3-pytest, python3-cffi and wolfSSL are built on the target system.

Expand Down Expand Up @@ -342,6 +341,65 @@ to add a DNS server to /etc/resolv.conf like such with root perms
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
```

Running Image on the QEMU
-------------------------

To run meta-wolfssl image on the QEMU (Quick EMUlator) you can follow these
general steps. For this example we will use the Yocto Project Poky.

1. Initialize the Build
This can be done by running these commands:

```
$ cd poky
$ source oe-init-build-env
```

This will initialize the build environment and let you run
bitbake in the build directory.

2. Run bitbake
Next you can run bitbake to build the OS image that you want. Make sure
you have the correct variables added in the `local.conf` For this example
we will run `core-image-base`. Which can be built by running this comamnd
from the `build` directoy:

```
$ bitbake core-image-base
```

This will run bitbake and build the image with your added
meta-wolfssl recipes.

3. Run the Image in QEMU
You can now simulate your image with the QEMU This can be done by running
the qemu that comes in your Yocto Project the default system is usually
`qemux86-64` but you can find what its set to by looking at your `local.conf`.
We can run this command to start the emulator:

```
$ runqemu qemux86-64
```

4. Run Your Recipes
Now that you are in the QEMU you can navigate your way to the `usr/bin`
directory which contains the your wolfssl your applications. Lets say we
included these images in our `local.conf`

```
IMAGE_INSTALL:append = " wolfssl wolfcrypttest wolfcryptbenchmark "
```

In that case we can run wolfcrypttest and wolfcryptbenchmark examples from
the `usr/bin` directory like so:

```
$ ./wolfcrypttest
$ ./wolfcryptbenchmark
```

This will run the wolfcrypt test and benchmark examples from the QEMU.

wolfProvider
------------
To build wolfProvider view the instructions in this [README](recipes-wolfssl/wolfprovider/README.md)
Expand Down
2 changes: 1 addition & 1 deletion conf/layer.conf
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ BBFILES += "${@bb.utils.contains('IMAGE_INSTALL', \

BBFILES += "${@bb.utils.contains('IMAGE_INSTALL', \
'wolftpm', \
'${LAYERDIR}/recipes-wolfssl/wolftpm/*.bb ${LAYERDIR}/recipes-wolfssl/wolftpm/*.bbappend', \
'${LAYERDIR}/recipes-wolfssl/wolftpm/*.bb ${LAYERDIR}/*/wolftpm/*.bbappend', \
aidangarske marked this conversation as resolved.
Show resolved Hide resolved
'', d)}"

BBFILES += "${@bb.utils.contains('IMAGE_INSTALL', \
Expand Down
66 changes: 66 additions & 0 deletions recipes-examples/wolftpm/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
wolfTPM Examples
================

Several wolfTPM example applications are included in this
layer, these include:

- attestation
- endorsement
- keygen
- pcr
- seal
- bench
- firmware
- management
- pkcs7
- timestamp
- boot
- gpio
- native
- tls
- wrap
- csr
- nvram

The recipe for these applications is located at:
```
meta-wolfssl/recipes-examples/wolftpm/wolftpm_%.bbappend
```

This can be compiled with bitbake using:

```
$ bitbake wolftpm
```

To install these applications into your image, you will
need to edit your "build/conf/local.conf" file and add
them to the "IMAGE_INSTALL" variable like so:

- For Dunfell and newer versions of Yocto
```
IMAGE_INSTALL:append = " wolftpm "
aidangarske marked this conversation as resolved.
Show resolved Hide resolved
```

- For versions of Yocto older than Dunfell
```
IMAGE_INSTALL_append = " wolftpm "
aidangarske marked this conversation as resolved.
Show resolved Hide resolved
```

When your image builds, these will be installed to the
`/usr/bin/examples` system directory. When inside your
executing image, you can run them from the terminal.
For example, we can run the wrap test like so from the
examples directory:

```
$ cd wrap
$ ./wrap_test
```

The examples can be excluded from your build by deleting
the recipe `wolftpm_%bbappend`.

Refer to the [wolfTPM Examples README](https://github.com/wolfSSL/wolfTPM/blob/master/examples/README.md) for more information on the examples directory.

Refer to the [meta-wolfssl README](https://github.com/wolfSSL/meta-wolfssl/blob/master/README.md) for more information on setting up your layer.
23 changes: 23 additions & 0 deletions recipes-examples/wolftpm/wolftpm_%.bbappend
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#wolfTPM Examples
WOLFTPM_EXAMPLES_DIR = "${B}/examples"
WOLFTPM_INSTALL_DIR = "${D}${bindir}"

# Bash dependency for .sh
RDEPENDS:${PN} += "bash"

python () {
# Get the environment variables
wolftpm_examples_dir = d.getVar('WOLFTPM_EXAMPLES_DIR', True)
wolftpm_install_dir = d.getVar('WOLFTPM_INSTALL_DIR', True)

bbnote = 'bbnote "Installing wolfTPM Examples"\n'
installDir = 'install -m 0755 -d "%s"\n' % (wolftpm_install_dir)
cpExamples = 'cp -r "%s/" "%s/"\n' % (wolftpm_examples_dir, wolftpm_install_dir)

d.appendVar('do_install', bbnote)
d.appendVar('do_install', installDir)
d.appendVar('do_install', cpExamples)
}

# Ensure consistent locale
export LC_ALL = "C"