From cb46448a1fc3c8f55529e74d3c7b0809ca036992 Mon Sep 17 00:00:00 2001 From: Aidan Date: Thu, 10 Oct 2024 16:36:52 -0700 Subject: [PATCH 1/7] Added meta recipie / updated README.md and conf --- README.md | 74 +++++++++++++++++++- conf/layer.conf | 8 +++ recipes-examples/wolftpm/wolftpm-examples.bb | 69 ++++++++++++++++++ 3 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 recipes-examples/wolftpm/wolftpm-examples.bb diff --git a/README.md b/README.md index e660af1..490dcd3 100644 --- a/README.md +++ b/README.md @@ -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. @@ -342,6 +341,79 @@ to add a DNS server to /etc/resolv.conf like such with root perms echo "nameserver 8.8.8.8" >> /etc/resolv.conf ``` +wolfTPM examples +---------------- + +Several wolfTPM example application recipes are included in this layer. These +include: +- attestation +- gpio +- pcr +- tls +- bench +- boot +- keygen +- csr +- endorsement +- firmware +- nvram +- management +- native +- pkcs7 +- seal +- wrap + +The recipes for these applications are located at: + +``` +meta-wolfssl/recipes-examples/wolftpm/wolftpm-examples.bb +``` + +This can be compiled with bitbake: + +``` +$ bitbake wolftpm-examples +``` + +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. You would need to do something like this for wolfssl, wolftpm, and wolftpm-examples: + +- For Dunfell and newer versions of Yocto +``` +IMAGE_INSTALL:append = " wolfssl wolftpm wolftpm-examples " +``` + +- For versions of Yocto older than Dunfell +``` +IMAGE_INSTALL_append = " wolfssl wolftpm wolftpm-examples " +``` + +When your image builds, these will be installed to the '/usr/bin' system +directory. When inside your executing image, you can run them from the +terminal. + +additional information +---------------------- + +Use to re-source your build environment +``` +source ../poky/oe-init-build-env +``` + +Check for active bitbake processes +``` +ps aux | grep bitbake +``` + +to kill any processes +``` +kill +``` + +Dependencies and More +--------------------- + wolfProvider ------------ To build wolfProvider view the instructions in this [README](recipes-wolfssl/wolfprovider/README.md) diff --git a/conf/layer.conf b/conf/layer.conf index f1df7d7..df8c0e6 100644 --- a/conf/layer.conf +++ b/conf/layer.conf @@ -1,6 +1,9 @@ # We have a conf and classes directory, add to BBPATH BBPATH := "${LAYERDIR}:${BBPATH}" +# Add specific `wolf*` to run bitbake +IMAGE_INSTALL:append = "wolftpm wolfssl wolftpm-examples " + # We have a packages directory, add to BBFILES BBFILES += "${LAYERDIR}/recipes-wolfssl/wolfssl/*.bb \ ${LAYERDIR}/recipes-wolfssl/wolfssl/*.bbappend" @@ -75,6 +78,11 @@ BBFILES += "${@bb.utils.contains('IMAGE_INSTALL', \ '${LAYERDIR}/recipes-examples/wolfengine/wolfenginetest/*.bb ${LAYERDIR}/recipes-examples/wolfengine/wolfenginetest/*.bbappend', \ '', d)}" +BBFILES += "${@bb.utils.contains('IMAGE_INSTALL', \ + 'wolftpm-examples', \ + '${LAYERDIR}/recipes-examples/wolftpm/*.bb ${LAYERDIR}/recipes-examples/wolftpm/*.bbappend', \ + '', d)}" + # Uncomment if building bind with wolfSSL. #BBFILES += "${LAYERDIR}/recipes-connectivity/bind/*.bbappend" diff --git a/recipes-examples/wolftpm/wolftpm-examples.bb b/recipes-examples/wolftpm/wolftpm-examples.bb new file mode 100644 index 0000000..326f3fe --- /dev/null +++ b/recipes-examples/wolftpm/wolftpm-examples.bb @@ -0,0 +1,69 @@ +SUMMARY = "Examples for wolfTPM" +DESCRIPTION = "This recipe provides examples for wolfTPM" +HOMEPAGE = "https://www.wolfssl.com/products/wolfssl" + +LICENSE = "GPL-2.0-only" +LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263" +SRC_URI = "git://github.com/wolfSSL/wolfTPM/examples.git;nobranch=1;protocol=https;rev=a5f6c912ac6903872d9666238440a76bc9f92517" + +DEPENDS += "wolfssl wolftpm" + +S = "${WORKDIR}/git/wolfTPM/examples" + +do_compile() { + # Iterate through each directory and compile C files + for dir in attestation \ + gpio \ + pcr \ + tls \ + bench \ + boot \ + keygen \ + csr \ + endorsement \ + firmware \ + nvram \ + management \ + native \ + pkcs7 \ + seal \ + wrap \ + timestamp; do + for src in ${S}/$dir/*.c; do + exe_name=$(basename $src .c) + ${CC} $src -o ${D}/usr/bin/$exe_name ${CFLAGS} ${LDFLAGS} -lwolfssl -lwolfTPM -ldl + done + done +} + +do_install() { + install -d ${D}/usr/bin + for dir in attestation \ + gpio \ + pcr \ + tls \ + bench \ + boot \ + keygen \ + csr \ + endorsement \ + firmware \ + nvram \ + management \ + native \ + pkcs7 \ + seal \ + wrap \ + timestamp; do + for src in ${S}/$dir/*.c; do + exe_name=$(basename $src .c) + install -m 0755 ${D}/usr/bin/$exe_name ${D}/usr/bin/ + done + done + + install -d ${D}/usr/include/wolftpm + install -m 0644 ${S}/tpm_test_keys.h ${D}/usr/include/wolftpm/ + install -m 0644 ${S}/tpm_test.h ${D}/usr/include/wolftpm/ +} + +PACKAGES = "${PN} ${PN}-dev" From 39e261d16474c47ee3f75af6e56510432c309212 Mon Sep 17 00:00:00 2001 From: Aidan Date: Thu, 10 Oct 2024 19:35:22 -0700 Subject: [PATCH 2/7] Modified the paths for tpm --- README.md | 18 ------------------ conf/layer.conf | 2 +- recipes-examples/wolftpm/wolftpm-examples.bb | 4 ++-- 3 files changed, 3 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 490dcd3..18cb2dc 100644 --- a/README.md +++ b/README.md @@ -393,24 +393,6 @@ When your image builds, these will be installed to the '/usr/bin' system directory. When inside your executing image, you can run them from the terminal. -additional information ----------------------- - -Use to re-source your build environment -``` -source ../poky/oe-init-build-env -``` - -Check for active bitbake processes -``` -ps aux | grep bitbake -``` - -to kill any processes -``` -kill -``` - Dependencies and More --------------------- diff --git a/conf/layer.conf b/conf/layer.conf index df8c0e6..ca6a38e 100644 --- a/conf/layer.conf +++ b/conf/layer.conf @@ -2,7 +2,7 @@ BBPATH := "${LAYERDIR}:${BBPATH}" # Add specific `wolf*` to run bitbake -IMAGE_INSTALL:append = "wolftpm wolfssl wolftpm-examples " +IMAGE_INSTALL:append = " wolftpm wolfssl wolftpm-examples " # We have a packages directory, add to BBFILES BBFILES += "${LAYERDIR}/recipes-wolfssl/wolfssl/*.bb \ diff --git a/recipes-examples/wolftpm/wolftpm-examples.bb b/recipes-examples/wolftpm/wolftpm-examples.bb index 326f3fe..38135b1 100644 --- a/recipes-examples/wolftpm/wolftpm-examples.bb +++ b/recipes-examples/wolftpm/wolftpm-examples.bb @@ -4,11 +4,11 @@ HOMEPAGE = "https://www.wolfssl.com/products/wolfssl" LICENSE = "GPL-2.0-only" LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263" -SRC_URI = "git://github.com/wolfSSL/wolfTPM/examples.git;nobranch=1;protocol=https;rev=a5f6c912ac6903872d9666238440a76bc9f92517" +SRC_URI = "git://github.com/wolfSSL/wolfTPM.git;nobranch=1;protocol=https;rev=a5f6c912ac6903872d9666238440a76bc9f92517" DEPENDS += "wolfssl wolftpm" -S = "${WORKDIR}/git/wolfTPM/examples" +S = "${WORKDIR}/git" do_compile() { # Iterate through each directory and compile C files From 7fa9060df30742182cf96eab8c144c2a04ef2bcc Mon Sep 17 00:00:00 2001 From: Aidan Date: Tue, 15 Oct 2024 13:26:26 -0700 Subject: [PATCH 3/7] Adds wolftpm_%.bbappnd to move examples --- README.md | 29 ++++---- conf/layer.conf | 8 --- recipes-examples/wolftpm/wolftpm-examples.bb | 69 -------------------- recipes-wolfssl/wolftpm/wolftpm_%.bbappend | 34 ++++++++++ 4 files changed, 51 insertions(+), 89 deletions(-) delete mode 100644 recipes-examples/wolftpm/wolftpm-examples.bb create mode 100644 recipes-wolfssl/wolftpm/wolftpm_%.bbappend diff --git a/README.md b/README.md index 18cb2dc..2e89c90 100644 --- a/README.md +++ b/README.md @@ -341,7 +341,7 @@ to add a DNS server to /etc/resolv.conf like such with root perms echo "nameserver 8.8.8.8" >> /etc/resolv.conf ``` -wolfTPM examples +wolfTPM Examples ---------------- Several wolfTPM example application recipes are included in this layer. These @@ -364,37 +364,42 @@ include: - wrap The recipes for these applications are located at: - ``` -meta-wolfssl/recipes-examples/wolftpm/wolftpm-examples.bb +meta-wolfssl/recipes-wolfssl/wolftpm/wolftpm_%.bbappend ``` -This can be compiled with bitbake: +This can be compiled with bitbake using: ``` -$ bitbake wolftpm-examples +$ 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. You would need to do something like this for wolfssl, wolftpm, and wolftpm-examples: +To install wolfTPM examples into your image, you will need to edit your +"build/conf/local.conf" file with the neccesary options. There are two +steps needed in order to install wolfTPM's examples into your image. + +1. You need to first add wolfTPM to your "IMAGE_INSTALL" variable like so: - For Dunfell and newer versions of Yocto ``` -IMAGE_INSTALL:append = " wolfssl wolftpm wolftpm-examples " +IMAGE_INSTALL:append = " wolftpm " ``` - For versions of Yocto older than Dunfell ``` -IMAGE_INSTALL_append = " wolfssl wolftpm wolftpm-examples " +IMAGE_INSTALL_append = " wolftpm " ``` When your image builds, these will be installed to the '/usr/bin' system directory. When inside your executing image, you can run them from the terminal. -Dependencies and More ---------------------- +2. You then need to enable the examples in your image by +setting `ENABLE_WOLFTPM_EXAMPLES` to 1 in your local.conf like so: + +``` +ENABLE_WOLFTPM_EXAMPLES = "1" +``` wolfProvider ------------ diff --git a/conf/layer.conf b/conf/layer.conf index ca6a38e..f1df7d7 100644 --- a/conf/layer.conf +++ b/conf/layer.conf @@ -1,9 +1,6 @@ # We have a conf and classes directory, add to BBPATH BBPATH := "${LAYERDIR}:${BBPATH}" -# Add specific `wolf*` to run bitbake -IMAGE_INSTALL:append = " wolftpm wolfssl wolftpm-examples " - # We have a packages directory, add to BBFILES BBFILES += "${LAYERDIR}/recipes-wolfssl/wolfssl/*.bb \ ${LAYERDIR}/recipes-wolfssl/wolfssl/*.bbappend" @@ -78,11 +75,6 @@ BBFILES += "${@bb.utils.contains('IMAGE_INSTALL', \ '${LAYERDIR}/recipes-examples/wolfengine/wolfenginetest/*.bb ${LAYERDIR}/recipes-examples/wolfengine/wolfenginetest/*.bbappend', \ '', d)}" -BBFILES += "${@bb.utils.contains('IMAGE_INSTALL', \ - 'wolftpm-examples', \ - '${LAYERDIR}/recipes-examples/wolftpm/*.bb ${LAYERDIR}/recipes-examples/wolftpm/*.bbappend', \ - '', d)}" - # Uncomment if building bind with wolfSSL. #BBFILES += "${LAYERDIR}/recipes-connectivity/bind/*.bbappend" diff --git a/recipes-examples/wolftpm/wolftpm-examples.bb b/recipes-examples/wolftpm/wolftpm-examples.bb deleted file mode 100644 index 38135b1..0000000 --- a/recipes-examples/wolftpm/wolftpm-examples.bb +++ /dev/null @@ -1,69 +0,0 @@ -SUMMARY = "Examples for wolfTPM" -DESCRIPTION = "This recipe provides examples for wolfTPM" -HOMEPAGE = "https://www.wolfssl.com/products/wolfssl" - -LICENSE = "GPL-2.0-only" -LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263" -SRC_URI = "git://github.com/wolfSSL/wolfTPM.git;nobranch=1;protocol=https;rev=a5f6c912ac6903872d9666238440a76bc9f92517" - -DEPENDS += "wolfssl wolftpm" - -S = "${WORKDIR}/git" - -do_compile() { - # Iterate through each directory and compile C files - for dir in attestation \ - gpio \ - pcr \ - tls \ - bench \ - boot \ - keygen \ - csr \ - endorsement \ - firmware \ - nvram \ - management \ - native \ - pkcs7 \ - seal \ - wrap \ - timestamp; do - for src in ${S}/$dir/*.c; do - exe_name=$(basename $src .c) - ${CC} $src -o ${D}/usr/bin/$exe_name ${CFLAGS} ${LDFLAGS} -lwolfssl -lwolfTPM -ldl - done - done -} - -do_install() { - install -d ${D}/usr/bin - for dir in attestation \ - gpio \ - pcr \ - tls \ - bench \ - boot \ - keygen \ - csr \ - endorsement \ - firmware \ - nvram \ - management \ - native \ - pkcs7 \ - seal \ - wrap \ - timestamp; do - for src in ${S}/$dir/*.c; do - exe_name=$(basename $src .c) - install -m 0755 ${D}/usr/bin/$exe_name ${D}/usr/bin/ - done - done - - install -d ${D}/usr/include/wolftpm - install -m 0644 ${S}/tpm_test_keys.h ${D}/usr/include/wolftpm/ - install -m 0644 ${S}/tpm_test.h ${D}/usr/include/wolftpm/ -} - -PACKAGES = "${PN} ${PN}-dev" diff --git a/recipes-wolfssl/wolftpm/wolftpm_%.bbappend b/recipes-wolfssl/wolftpm/wolftpm_%.bbappend new file mode 100644 index 0000000..3934d52 --- /dev/null +++ b/recipes-wolfssl/wolftpm/wolftpm_%.bbappend @@ -0,0 +1,34 @@ +# For wolfTPM Examples +WOLFTPM_DIR = "${S}/examples" +WOLFTPM_TARGET_DIR = "/home/root/wolftpm/examples" +WOLFTPM_TEST_TARGET_DIR = "${D}${WOLFTPM_TARGET_DIR}" + +python () { + distro_version = d.getVar('DISTRO_VERSION', True) + wolftpm_dir = d.getVar('WOLFTPM_DIR', True) + wolftpm_test_target_dir = d.getVar('WOLFTPM_TEST_TARGET_DIR', True) + + bb.note("Installing Examples Directory for wolfTPM") + installDir = 'install -m 0755 -d "%s"\n' % (wolftpm_test_target_dir) + cpWolftpmExamples = 'cp -r %s/* %s\n' % (wolftpm_dir, wolftpm_test_target_dir) + + d.appendVar('do_install', installDir) + d.appendVar('do_install', cpWolftpmExamples) + + # Append to FILES:${PN} within the Python function + files_var = 'FILES:' + d.getVar('PN', True) + wolftpm_example_files = wolftpm_test_target_dir + '/*' + + pn = d.getVar('PN', True) + if distro_version and (distro_version.startswith('2.') or distro_version.startswith('3.')): + files_var_name = 'FILES_' + pn + else: + files_var_name = 'FILES:' + pn + + current_files = d.getVar(files_var_name, True) or "" + new_files = current_files + ' ' + wolftpm_example_files + d.setVar(files_var_name, new_files) +} + +# Python Specific option +export PYTHONDONTWRITEBYTECODE = "1" From 9568c19088e9b1c37932ae3f4c0875243d29f280 Mon Sep 17 00:00:00 2001 From: Aidan Date: Thu, 17 Oct 2024 13:19:26 -0700 Subject: [PATCH 4/7] .bbappend for wolftpm to move over examples / readme update / option to disable or enable examples --- README.md | 21 ++------ recipes-wolfssl/wolftpm/wolftpm_%.bbappend | 61 ++++++++++++---------- 2 files changed, 37 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index 2e89c90..c913a54 100644 --- a/README.md +++ b/README.md @@ -344,24 +344,9 @@ echo "nameserver 8.8.8.8" >> /etc/resolv.conf wolfTPM Examples ---------------- -Several wolfTPM example application recipes are included in this layer. These -include: -- attestation -- gpio -- pcr -- tls -- bench -- boot -- keygen -- csr -- endorsement -- firmware -- nvram -- management -- native -- pkcs7 -- seal -- wrap +Several wolfTPM example application recipes are included in this layer. These include: + +TODO The recipes for these applications are located at: ``` diff --git a/recipes-wolfssl/wolftpm/wolftpm_%.bbappend b/recipes-wolfssl/wolftpm/wolftpm_%.bbappend index 3934d52..1d4089c 100644 --- a/recipes-wolfssl/wolftpm/wolftpm_%.bbappend +++ b/recipes-wolfssl/wolftpm/wolftpm_%.bbappend @@ -1,33 +1,40 @@ # For wolfTPM Examples -WOLFTPM_DIR = "${S}/examples" -WOLFTPM_TARGET_DIR = "/home/root/wolftpm/examples" -WOLFTPM_TEST_TARGET_DIR = "${D}${WOLFTPM_TARGET_DIR}" +WOLFTPM_TEST_DIR = "${S}/examples" +WOLFTPM_DIR = "/home/root/wolftpm/examples" +WOLFTPM_TEST_TARGET_DIR = "${D}${WOLFTPM_DIR}" python () { - distro_version = d.getVar('DISTRO_VERSION', True) - wolftpm_dir = d.getVar('WOLFTPM_DIR', True) - wolftpm_test_target_dir = d.getVar('WOLFTPM_TEST_TARGET_DIR', True) - - bb.note("Installing Examples Directory for wolfTPM") - installDir = 'install -m 0755 -d "%s"\n' % (wolftpm_test_target_dir) - cpWolftpmExamples = 'cp -r %s/* %s\n' % (wolftpm_dir, wolftpm_test_target_dir) - - d.appendVar('do_install', installDir) - d.appendVar('do_install', cpWolftpmExamples) - - # Append to FILES:${PN} within the Python function - files_var = 'FILES:' + d.getVar('PN', True) - wolftpm_example_files = wolftpm_test_target_dir + '/*' - - pn = d.getVar('PN', True) - if distro_version and (distro_version.startswith('2.') or distro_version.startswith('3.')): - files_var_name = 'FILES_' + pn - else: - files_var_name = 'FILES:' + pn - - current_files = d.getVar(files_var_name, True) or "" - new_files = current_files + ' ' + wolftpm_example_files - d.setVar(files_var_name, new_files) + enable_wolftpm_examples = d.getVar('ENABLE_WOLFTPM_EXAMPLES', True) + + if enable_wolftpm_examples == "1": + distro_version = d.getVar('DISTRO_VERSION', True) + wolftpm_test_dir = d.getVar('WOLFTPM_TEST_DIR', True) + wolftpm_test_target_dir = d.getVar('WOLFTPM_TEST_TARGET_DIR', True) + + bb.note("Installing Examples Directory for wolfTPM") + installDir = 'install -m 0755 -d "%s"\n' % (wolftpm_test_target_dir) + cpWolftpmExamples = 'cp -r %s/* %s\n' % (wolftpm_test_dir, wolftpm_test_target_dir) + + d.appendVar('do_install', installDir) + d.appendVar('do_install', cpWolftpmExamples) + + # Remove the unwanted file + d.appendVar('do_install', 'rm -f %s/run_examples.sh\n' % wolftpm_test_target_dir) + + # Append to FILES:${PN} within the Python function + files_var = 'FILES:' + d.getVar('PN', True) + wolftpm_example_files = wolftpm_test_target_dir + '/*' + + pn = d.getVar('PN', True) + wolftpm_dir = d.getVar('WOLFTPM_DIR', True) + if distro_version and (distro_version.startswith('2.') or distro_version.startswith('3.')): + files_var_name = 'FILES_' + pn + else: + files_var_name = 'FILES:' + pn + + current_files = d.getVar(files_var_name, True) or "" + new_files = current_files + ' ' + wolftpm_dir + '/*' + d.setVar(files_var_name, new_files) } # Python Specific option From 8e7604e9287db01f1562dcab3e08db605599343e Mon Sep 17 00:00:00 2001 From: Aidan Date: Thu, 24 Oct 2024 16:37:14 -0700 Subject: [PATCH 5/7] wolftpm examples now in usr/bin added readme for wolftpm examples --- README.md | 45 --------------- conf/layer.conf | 2 +- recipes-examples/wolftpm/README.md | 62 +++++++++++++++++++++ recipes-examples/wolftpm/wolftpm_%.bbappend | 23 ++++++++ recipes-wolfssl/wolftpm/wolftpm_%.bbappend | 41 -------------- 5 files changed, 86 insertions(+), 87 deletions(-) create mode 100644 recipes-examples/wolftpm/README.md create mode 100644 recipes-examples/wolftpm/wolftpm_%.bbappend delete mode 100644 recipes-wolfssl/wolftpm/wolftpm_%.bbappend diff --git a/README.md b/README.md index c913a54..ee35f71 100644 --- a/README.md +++ b/README.md @@ -341,51 +341,6 @@ to add a DNS server to /etc/resolv.conf like such with root perms echo "nameserver 8.8.8.8" >> /etc/resolv.conf ``` -wolfTPM Examples ----------------- - -Several wolfTPM example application recipes are included in this layer. These include: - -TODO - -The recipes for these applications are located at: -``` -meta-wolfssl/recipes-wolfssl/wolftpm/wolftpm_%.bbappend -``` - -This can be compiled with bitbake using: - -``` -$ bitbake wolftpm -``` - -To install wolfTPM examples into your image, you will need to edit your -"build/conf/local.conf" file with the neccesary options. There are two -steps needed in order to install wolfTPM's examples into your image. - -1. You need to first add wolfTPM to your "IMAGE_INSTALL" variable like so: - -- For Dunfell and newer versions of Yocto -``` -IMAGE_INSTALL:append = " wolftpm " -``` - -- For versions of Yocto older than Dunfell -``` -IMAGE_INSTALL_append = " wolftpm " -``` - -When your image builds, these will be installed to the '/usr/bin' system -directory. When inside your executing image, you can run them from the -terminal. - -2. You then need to enable the examples in your image by -setting `ENABLE_WOLFTPM_EXAMPLES` to 1 in your local.conf like so: - -``` -ENABLE_WOLFTPM_EXAMPLES = "1" -``` - wolfProvider ------------ To build wolfProvider view the instructions in this [README](recipes-wolfssl/wolfprovider/README.md) diff --git a/conf/layer.conf b/conf/layer.conf index f1df7d7..a975f01 100644 --- a/conf/layer.conf +++ b/conf/layer.conf @@ -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', \ '', d)}" BBFILES += "${@bb.utils.contains('IMAGE_INSTALL', \ diff --git a/recipes-examples/wolftpm/README.md b/recipes-examples/wolftpm/README.md new file mode 100644 index 0000000..d58e914 --- /dev/null +++ b/recipes-examples/wolftpm/README.md @@ -0,0 +1,62 @@ +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 " +``` + +- For versions of Yocto older than Dunfell +``` +IMAGE_INSTALL_append = " wolftpm " +``` + +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. + +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. diff --git a/recipes-examples/wolftpm/wolftpm_%.bbappend b/recipes-examples/wolftpm/wolftpm_%.bbappend new file mode 100644 index 0000000..bb279c3 --- /dev/null +++ b/recipes-examples/wolftpm/wolftpm_%.bbappend @@ -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" diff --git a/recipes-wolfssl/wolftpm/wolftpm_%.bbappend b/recipes-wolfssl/wolftpm/wolftpm_%.bbappend deleted file mode 100644 index 1d4089c..0000000 --- a/recipes-wolfssl/wolftpm/wolftpm_%.bbappend +++ /dev/null @@ -1,41 +0,0 @@ -# For wolfTPM Examples -WOLFTPM_TEST_DIR = "${S}/examples" -WOLFTPM_DIR = "/home/root/wolftpm/examples" -WOLFTPM_TEST_TARGET_DIR = "${D}${WOLFTPM_DIR}" - -python () { - enable_wolftpm_examples = d.getVar('ENABLE_WOLFTPM_EXAMPLES', True) - - if enable_wolftpm_examples == "1": - distro_version = d.getVar('DISTRO_VERSION', True) - wolftpm_test_dir = d.getVar('WOLFTPM_TEST_DIR', True) - wolftpm_test_target_dir = d.getVar('WOLFTPM_TEST_TARGET_DIR', True) - - bb.note("Installing Examples Directory for wolfTPM") - installDir = 'install -m 0755 -d "%s"\n' % (wolftpm_test_target_dir) - cpWolftpmExamples = 'cp -r %s/* %s\n' % (wolftpm_test_dir, wolftpm_test_target_dir) - - d.appendVar('do_install', installDir) - d.appendVar('do_install', cpWolftpmExamples) - - # Remove the unwanted file - d.appendVar('do_install', 'rm -f %s/run_examples.sh\n' % wolftpm_test_target_dir) - - # Append to FILES:${PN} within the Python function - files_var = 'FILES:' + d.getVar('PN', True) - wolftpm_example_files = wolftpm_test_target_dir + '/*' - - pn = d.getVar('PN', True) - wolftpm_dir = d.getVar('WOLFTPM_DIR', True) - if distro_version and (distro_version.startswith('2.') or distro_version.startswith('3.')): - files_var_name = 'FILES_' + pn - else: - files_var_name = 'FILES:' + pn - - current_files = d.getVar(files_var_name, True) or "" - new_files = current_files + ' ' + wolftpm_dir + '/*' - d.setVar(files_var_name, new_files) -} - -# Python Specific option -export PYTHONDONTWRITEBYTECODE = "1" From 9530fc6738c0a1b63de4aa06ac8d2d77a4571e86 Mon Sep 17 00:00:00 2001 From: Aidan Date: Thu, 24 Oct 2024 19:54:26 -0700 Subject: [PATCH 6/7] Updated the readme with QEMU information --- README.md | 59 ++++++++++++++++++++++++++++++ recipes-examples/wolftpm/README.md | 36 ++++++++++-------- 2 files changed, 79 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index ee35f71..29db171 100644 --- a/README.md +++ b/README.md @@ -341,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) diff --git a/recipes-examples/wolftpm/README.md b/recipes-examples/wolftpm/README.md index d58e914..d352ca4 100644 --- a/recipes-examples/wolftpm/README.md +++ b/recipes-examples/wolftpm/README.md @@ -1,8 +1,8 @@ wolfTPM Examples ================ -Several wolfTPM example applications are included -in this layer, these include: +Several wolfTPM example applications are included in this +layer, these include: - attestation - endorsement @@ -33,10 +33,9 @@ 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: +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 ``` @@ -48,15 +47,20 @@ IMAGE_INSTALL:append = " wolftpm " IMAGE_INSTALL_append = " wolftpm " ``` -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. +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: -The examples can be excluded from your build by -deleting the recipe `wolftpm_%bbappend`. +``` +$ 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 [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. +Refer to the [meta-wolfssl README](https://github.com/wolfSSL/meta-wolfssl/blob/master/README.md) for more information on setting up your layer. From 0e7cb36e8a637dfc1ccc7c6ce7acd84133312da3 Mon Sep 17 00:00:00 2001 From: Aidan Date: Mon, 28 Oct 2024 14:04:13 -0700 Subject: [PATCH 7/7] Added to have image isntall argument --- conf/layer.conf | 7 ++- recipes-examples/wolftpm/README.md | 25 +++++------ recipes-examples/wolftpm/wolftpm-examples.bb | 45 ++++++++++++++++++++ 3 files changed, 64 insertions(+), 13 deletions(-) create mode 100644 recipes-examples/wolftpm/wolftpm-examples.bb diff --git a/conf/layer.conf b/conf/layer.conf index a975f01..064bbe3 100644 --- a/conf/layer.conf +++ b/conf/layer.conf @@ -37,7 +37,12 @@ BBFILES += "${@bb.utils.contains('IMAGE_INSTALL', \ BBFILES += "${@bb.utils.contains('IMAGE_INSTALL', \ 'wolftpm', \ - '${LAYERDIR}/recipes-wolfssl/wolftpm/*.bb ${LAYERDIR}/*/wolftpm/*.bbappend', \ + '${LAYERDIR}/recipes-wolfssl/wolftpm/*.bb ${LAYERDIR}/recipes-wolfssl/wolftpm/*.bbappend', \ + '', d)}" + +BBFILES += "${@bb.utils.contains('IMAGE_INSTALL', \ + 'wolftpm-examples', \ + '${LAYERDIR}/recipes-examples/wolftpm/*.bb ${LAYERDIR}/recipes-examples/wolftpm/*.bbappend', \ '', d)}" BBFILES += "${@bb.utils.contains('IMAGE_INSTALL', \ diff --git a/recipes-examples/wolftpm/README.md b/recipes-examples/wolftpm/README.md index d352ca4..6cf4d07 100644 --- a/recipes-examples/wolftpm/README.md +++ b/recipes-examples/wolftpm/README.md @@ -24,43 +24,44 @@ layer, these include: The recipe for these applications is located at: ``` -meta-wolfssl/recipes-examples/wolftpm/wolftpm_%.bbappend +meta-wolfssl/recipes-examples/wolftpm/wolftpm-examples.bb ``` -This can be compiled with bitbake using: +You'll need to compile wolTPM and the examples directory. +This can be done with these commands in the build directory: ``` $ bitbake wolftpm +$ bitbake wolftpm-examples ``` 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: +`wolftpm` and `wolftpm-examples` to your "IMAGE_INSTALL" +variable like so: - For Dunfell and newer versions of Yocto ``` -IMAGE_INSTALL:append = " wolftpm " +IMAGE_INSTALL:append = " wolftpm wolftpm-examples" ``` - For versions of Yocto older than Dunfell ``` -IMAGE_INSTALL_append = " wolftpm " +IMAGE_INSTALL_append = " wolftpm wolftpm-examples" ``` 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: + +For example, we can run the benchmark from the examples +directory like so: ``` -$ cd wrap -$ ./wrap_test +$ cd bench +$ ./bench ``` -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. diff --git a/recipes-examples/wolftpm/wolftpm-examples.bb b/recipes-examples/wolftpm/wolftpm-examples.bb new file mode 100644 index 0000000..5810f61 --- /dev/null +++ b/recipes-examples/wolftpm/wolftpm-examples.bb @@ -0,0 +1,45 @@ +SUMMARY = "wolfTPM Examples Directory" +DESCRIPTION = "wolfTPM examples directory used to demonstrate \ + features of a TPM 2.0 module" +HOMEPAGE = "https://www.wolfssl.com/products/wolftpm" +BUGTRACKER = "https://github.com/wolfssl/wolftpm/issues" +SECTION = "libs" + +LICENSE = "GPL-2.0-only" +LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263" +S = "${WORKDIR}/git" +DEPENDS += "wolfssl" + +SRC_URI = "git://github.com/wolfssl/wolfTPM.git;nobranch=1;protocol=https;rev=1fa15951eb91a8fe89b3326077b9be6fb105edeb" + +do_configure[noexec] = "1" +do_compile[noexec] = "1" + +WOLFTPM_EXAMPLES_DIR = "${datadir}/wolftpm-examples" +WOLFTPM_EXAMPLES_INSTALL_DIR = "${D}${WOLFTPM_EXAMPLES_DIR}" +WOLFTPM_EXAMPLES_README = "README.txt" +WOLFTPM_EXAMPLES_README_DIR = "${WOLFTPM_EXAMPLES_INSTALL_DIR}/${WOLFTPM_EXAMPLES_README}" + +python () { + distro_version = d.getVar('DISTRO_VERSION', True) + wofltpm_examples_dir = d.getVar('WOLFTPM_EXAMPLES_DIR', True) + wolftpm_examples_install_dir = d.getVar('WOLFTPM_EXAMPLES_INSTALL_DIR', True) + wolftpm_examples_readme_dir = d.getVar('WOLFTPM_EXAMPLES_README_DIR', True) + + bb.note("Installing dummy file for wolfTPM examples") + installDir = 'install -m 0755 -d "%s"\n' % wolftpm_examples_install_dir + makeDummy = 'echo "This is a dummy package" > "%s"\n' % wolftpm_examples_readme_dir + + d.appendVar('do_install', installDir) + d.appendVar('do_install', makeDummy) + + pn = d.getVar('PN', True) + if distro_version and (distro_version.startswith('2.') or distro_version.startswith('3.')): + files_var_name = 'FILES_' + pn + else: + files_var_name = 'FILES:' + pn + + current_files = d.getVar(files_var_name, True) or "" + new_files = current_files + ' ' + wofltpm_examples_dir + '/*' + d.setVar(files_var_name, new_files) +}