在 Mbed 上运行 Libsodium (Nucleo L476RG) - 在 ISR 上下文中不允许互斥



我正在尝试在 Mbed 板上运行一些使用 libsodium 的代码。 当只包含库并运行sodium_init()时,mbed sterm会抛出以下错误:

++ MbedOS Error Info ++
Error Status: 0x80010133 Code: 307 Module: 1
Error Message: Mutex: 0x200027EC, Not allowed in ISR context
Location: 0x80026B5
Error Value: 0x200027EC
Current Thread: main  Id: 0x20000EF0 Entry: 0x800257F StackSize: 0x1000 StackMem: 0x200017B8 SP: 0x100004C8 
For more info, visit: https://mbed.com/s/error?error=0x80010133&tgt=NUCLEO_L476RG
-- MbedOS Error Info --

似乎libsodium 试图使用某种不允许的互斥锁。不是libsodium 或 Mbed OS 方面的专家,是什么导致了这个问题? libsodium 文档指出

使用 ARM 嵌入式处理器的 GNU 工具交叉编译到 ARM

是可能的。但是,他们也指出,

如果侧信道是一个问题,不建议在 ARM Cortex M0、M3 和 M4 CPU 上使用 libsodium 。

这有关系吗?有没有办法编译适用于Nucleo板的libsodium ?

首先,检查您运行的是最新版本的编译器工具链。看起来这是当前版本中修复的错误。

如果这不起作用,或者如果它不是一个选项,您可以尝试将--without-pthreads添加到编译标志中。

该 CPU 是 Cortex M4,因此如果物理安全性是线程模型的一部分,则有关侧通道的警告仍然适用。

对于这个平台,libhydrogen可能是比libsodium更好的选择。

最新更新