Mbed上运行的Libsodium(Nucleo L476RG)-在ISR环境中不允许使用Mutex

问题描述 投票:0回答:1

我正在尝试在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 docs表示

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

是可能的。但是,他们也注意到

如果考虑侧通道,不建议在ARM Cortex M0,M3和M4 CPU上使用libsodium。

这相关吗?有没有一种方法可以编译适用于Nucleo板的libsodium?

arm mbed libsodium isr nucleo
1个回答
1
投票

首先,请检查您是否正在运行编译器工具链的最新版本。看来这是一个错误fixed in current versions

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

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

对于该平台,libhydrogen可能比libsodium更好。

© www.soinside.com 2019 - 2024. All rights reserved.