This guide walks you through the process of builidng buildng TF-M secure and non-secure binaries, merging them the outputs into a single file, and running the resulting firmware image in QEMU 4.0.
...
For system requirements to build TF-M, see `tfm_build_instruction.txt
` in the `docs
` folder (system setup is out of scope for this guide).
Build TF-M binaries
Test with GNU GCC 7.3.1 (7-2018-q2-update) and TF-M hash `88661e56612d51811b6ea7b14ae6467128967bb2
`.
...
Info |
---|
If building on OS X, you need to install the coreutils package via ` |
Merging `tfm_s.axf` and `tfm_ns.axf`
Builds that include the bootloader result in a `tfm_full.bin
` file in the build folder, as well as a version signed by `imgtool.py
` for use with mcu-boot
...
Info |
---|
If ` |
QEMU
ARMv8 support was added to QEMU 4.0, along with `machine
` support for the Musca and MPS2 development boards.
...
If you have an older version, see the appendix in this document on how to build QEMU from source.
Running in QEMU
Tested using qemu 4.0.0 release (required for ARMv8 support), and MPS2 `AN521
` as a machine target.
...
Code Block | ||
---|---|---|
| ||
[Sec Thread] Secure image initializing! #### Execute test suites for the Secure area #### Running Test Suite PSA protected storage S interface tests (TFM_SST_TEST_2XXX)... > Executing 'TFM_SST_TEST_2001' Description: 'Set interface' TEST PASSED! > Executing 'TFM_SST_TEST_2002' Description: 'Set interface with create flags' ... |
Debugging with QEMU
Tested using qemu 4.0.0 release (required for ARMv8 support), and MPS2 `AN521
` as a machine target.
...
Code Block | ||
---|---|---|
| ||
$ gdb -s app/tfm_ns.axf -ex "target remote tcp:localhost:1234" (gdb) break main Breakpoint 1 at 0x10111c: file /Users/kevin/Dropbox/linaro/code/tfm/trusted-firmware-m/app/main_ns.c, line 115. (gdb) layout asm (gdb) continue |
Appendix: Building QEMU from source (Optional)
Depending on your platform or distro you may need to build QEMU from source.
...