工具/软件:
您好:
我正在使用 ti-rpmsg-char v0.6.7原理图库。
它通常按预期工作、但如果生成的端点器件名称长度超过 31 个字符、应用程序将终止、并出现错误。
此时、/dev/rpmsg*器件也在不断增加。
以下是一个statusd应用示例(长度 31)eptdev_name = "rpmsg-char-fpgaconfig-9-1364841":
statusd[1364841]: 32 bytes read from /sys/devices/platform/bus@f4000/bus@f4000:bus@4000000/5000000.m4fss/remoteproc/remoteproc0/rproc-virtio.0.auto/virtio0/virtio0.rpmsg_ctrl.0.0/rpmsg/rpmsg_ctrl0/rpmsg16/name are larger than size 32
应用代码片段:
int rpmsg_open(void){
char eptdev_name[64] = { 0 };
int flags = 0;
sprintf(eptdev_name, "rpmsg-char-fpgaconfig-%d-%d", RPROC_ID, getpid());
rcdev = rpmsg_char_open(RPROC_ID, NULL, RPMSG_ADDR_ANY, FPGACONFIG_ENDPT,
eptdev_name, flags);
if (!rcdev) {
perror("Can't create FPGA config endpoint device");
return -EPERM;
}
printf("Created FPGA config endpt device %s, fd = %d port = %d\n",
eptdev_name, rcdev->fd, rcdev->endpt);
return 0;
}
从库源代码中、它看起来像:
-
"_rpmsg_char_create_eptdev"成功。 -
"_rpmsg_char_open_eptdev"呼叫“"。“。_rpmsg_char_get_rpmsg_id" -
在“
_rpmsg_char_get_rpmsg_id"、“内、file_read_string()"读取的字节超过 32 个 ( 包括换行符 )、这会导致错误。 -
"_rpmsg_char_destroy_eptdev"从不调用、从而留下/dev/rpmsg*设备。
相关检查:
if (!eptdev_name || strlen(eptdev_name) >= 32) {
fprintf(stderr, "%s: invalid eptdev_name\n", __func__);
goto unlock;
}
因此、当eptdev_name到达确切的 31 个字符时、函数通过了长度检查、但之后由于字符串加换行符超过缓冲区限制而失败。
问题:
-
这是中的已知限制
ti-rpmsg-char吗? -
是否应始终将端点命名限制为≤30 个字符以避免这种情况?
-
或者
file_read_string()"“和“是否应该_rpmsg_char_get_rpmsg_id()"更优雅地处理修剪/更长的名称?
希望提供有关预期行为和建议修复的任何指导。
谢谢、
一则