蜗窝科技

在sys/class/gpio调试引脚出错的问题

蜗窝讨论区存档 · Linux kernel技术问答 · 楼主 泽霖 · 2016-05-06 · 2 帖

本文是原「蜗窝讨论区」的历史存档(2016-05-06),来自版块「Linux kernel技术问答」,共 2 帖。讨论区已停止服务,此处仅供查阅。

泽霖 · 2016-05-06 16:15

最近在做一个基于intel的sofia3g平台的linux3.10 android5.1的项目, 要求将引脚50作为充电检测脚,发现无法读取gpio50引脚的状态报错,于是在sys/class/gpio下单独调试如下:

shell@Sf3g_mrd7_p1_v2:/sys/class/gpio # echo 50 > export [ 92.979279] pcs_vmm_read: mv_svc_pinctrl_service(PINCTRL_GET) failed at e46002c8 [ 92.987341] pcs_vmm_write: mv_svc_pinctrl_service(PINCTRL_SET) failed at e46002c8 [ 92.997696] xgold_gpio_to_irq: Can't bind gpio to interrupt

Pinctrl-single.c (drivers\pinctrl) 51939 2016-04-01 出错点: static void maybe_unused pcs_vmm_write(unsigned val, void __iomem *reg) { if (mv_svc_pinctrl_service(PINCTRL_SET, (uint32_t)reg, val, NULL)) { pr_err("%s: mv_svc_pinctrl_service(PINCTRL_SET) failed at %p\n", __func, reg); }

}

shell@Sf3g_mrd7_p1_v2:/sys/class/gpio # echo high > direction [ 92.987341]pcl_write: mv_svc_pinctrl_service(PINCTRL_SET) failed at e46002c8 出错点: static void maybe_unused pcs_vmm_write(unsigned val, void __iomem reg) { if (mv_svc_pinctrl_service(PINCTRL_GET, read_addr, 0, (uint32_t )&tmp)) gpio_err("%s: mv_svc_pinctrl_service(PINCTRL_GET) failed at 0x%pa\n", __func, &read_addr); }

Mv_svc_hypercalls.c (arch\x86\sofia) 14117 2016-04-01 uint32_t mv_svc_pinctrl_service( uint32_t opcode, uint32_t arg1, uint32_t arg2, uint32_t *arg3) { int ret = 0; switch (opcode) { case PINCTRL_OPEN: case PINCTRL_SET: case PINCTRL_CONFIG_FUNC: case PINCTRL_CLOSE: ret = mv_platform_service(PINCTRL_SERVICE, opcode, arg1, arg2, 0, 0, 0, 0, 0); break; case PINCTRL_GET: ret = mv_platform_service(PINCTRL_SERVICE, opcode, arg1, 0, 0, 0, 0, 0, arg3); break;

default:
    break;
}
return ret;

} Mv_hypercalls.c (arch\x86\sofia) 8025 2016-04-01 uint32_t mv_platform_service(uint32_t service_type, uint32_t arg2, uint32_t arg3, uint32_t arg4, uint32_t ret0, uint32_t ret1, uint32_t ret2, uint32_t ret3, uint32_t *ret4) { return mv_call_5(VMCALL_PLATFORM_SERVICE, service_type, arg2, arg3, arg4, ret0, ret1, ret2, ret3, ret4); }

static inline int mv_call_5(uint32_t nr, uint32_t arg0, uint32_t arg1, uint32_t arg2, uint32_t arg3, uint32_t ret0, uint32_t ret1, uint32_t ret2, uint32_t ret3, uint32_t *ret4) { uint32_t results[5];

mv_guest_trace_vmcall_entry(nr, arg0, arg1);
trace_vmcall_entry(current, nr, 0);
asm volatile (VMCALL_OPCODE:"=a"(results[0]), "=b"(results[1]),
     "=c"(results[2]), "=d"(results[3]), "=S"(results[4])
          : "a"(nr), "b"(arg0), "c"(arg1), "d"(arg2), "S"(arg3)
          : "memory");
trace_vmcall_exit(current, nr, 0);
mv_guest_trace_vmcall_exit(;
    if (ret0)
    *ret0 = results[0];
if (ret1)
    *ret1 = results[1];
if (ret2)
    *ret2 = results[2];
if (ret3)
    *ret3 = results[3];
if (ret4)
    *ret4 = results[4];

return results[0];

}

wowo · 2016-05-06 16:35

是不是权限问题?你用的什么系统?使用sudo权限试试。