55c5081486
In particular, order of LOAD_USS and LOAD_APP_SIZE is not required, but the need to send both is documented. This is followed up with adjustment in the host programs' Go code, to try to reinforce this. LoadApp() will take the secretPhrase parameter (to be hashed as USS), and loadUSS() will be unexported. Correct CMD/RSP lengths in pseudo-code. |
||
---|---|---|
.. | ||
blake2s | ||
firmware.lds | ||
lib.c | ||
lib.h | ||
main.c | ||
Makefile | ||
proto.c | ||
proto.h | ||
README.md | ||
start.S | ||
types.h |
Tillitis Key firmware
Build the firmware
You need Clang with 32 bit RISC-V support. You can check this with:
$ llc --version | grep riscv32
riscv32 - 32-bit RISC-V
or just try building.
Build the FPGA bitstream with the firmware using make
in the
hw/application_fpga
directory.
If your available objcopy
and size
commands is anything other than
the default llvm-objcopy-14
and llvm-size-14
define OBJCOPY
and
SIZE
to whatever they're called on your system.
Using QEMU
Checkout the mta1
branch of our version of the
qemu and build:
$ git clone -b mta1 https://github.com/tillitis/qemu
$ mkdir qemu/build
$ cd qemu/build
$ ../configure --target-list=riscv32-softmmu --disable-werror
$ make -j $(nproc)
(Built with warnings-as-errors disabled, see this issue.)
Run it like this:
$ /path/to/qemu/build/qemu-system-riscv32 -nographic -M mta1_mkdf,fifo=chrid -bios firmware.elf \
-chardev pty,id=chrid
This attaches the FIFO to a tty, something like /dev/pts/16
which
you can use with host software to talk to the firmware.
To quit QEMU you can use: Ctrl-a x
(see Ctrl-a ?
for other commands).
Debugging? Use the HTIF console by removing -DNOCONSOLE
from the
CFLAGS
and using the helper functions in lib.c
for printf-like
debugging.
You can also use the qemu monitor for debugging, e.g. info registers
, or run qemu with -d in_asm
or -d trace:riscv_trap
.
Happy hacking!