您好,我正在尝试使用在 Linux 下工作的 A7 内核中的 M4 内核。
我从 openSTlinux 发行版开始,它运行良好(我可以使用 rproc 将固件上传到 M4),但由于某些原因,我需要制作一个非常小的发行版(小于 16 mb)。为此,我开始使用 buildroot 构建系统,我将其配置为使用 linux 内核
(我试过使用 5.10 和 5.4 分支)
我尝试使用 openstlinux (/proc/config.gz) 中的原始 .config 来构建我自己的内核,它构建得很好。但是当系统启动时,我收到了一条令人遗憾的消息:
[1.667275]
STM32-rproc 10000000.m4:错误-EINVAL:无法重置
单片机
[1.674148]remoteproc remoteproc0:释放m4
[ 1.678863] stm32-rproc: 10000000.m4 探测失败,错误为 -22
一些调查让我找到了文件 drivers/reset/core.c 和函数
static int of_reset_simple_xlate(struct reset_controller_dev *rcdev,
const struct of_phandle_args *reset_spec)
我打印了一些变量:
reset_spec->args_count = 1
reset_spec->args[0] = 11
rcdev->nr_resets = 11
reset_spec->np->full_name = 协议@16
好的,它看起来类似于我在其中找到定义的 stm32mp151.dtsi
固件{
scmi0: scmi0 {
compatible = "arm,scmi-smc";
#address-cells = <1>;
#size-cells = <0>;
手臂,smc-id = <0x82002000>;
shmem = <&scmi0_shm>;
scmi0_clk: 协议@14 {
reg = <0x14>;
#clock-cells = <1>;
};
scmi0_reset:
协议@16 {
reg = <0x16>;
#reset-cells = <1>;
};
};
正如你所记得的:
reset_spec->args[0] = 11
这是
#define RST_SCMI0_MCU_HOLD_BOOT 11来自文件 include/dt-bindings/reset/stm32mp1-resets.h
但由于某些原因,过程发现功能(我不确定术语)“hold_boot”在一条线上废墟
如果 (reset_spec->args[0] >= rcdev->nr_resets)
返回-EINVAL;
问题是:为什么?如何使其正常工作?