You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AOSP系统服务JNI访问/sys/class/gpio/export权限被拒问题

问题分析与修复方案

核心原因

你的SELinux策略配置存在两个关键错误:

  1. 授权对象错误:你给arkgpio_service(服务IPC对象的SELinux类型)添加了sysfs权限,但实际执行JNI代码的是system_server进程(SELinux类型为system_server),权限应该授权给这个进程类型。
  2. 节点类型匹配错误:/sys/class/gpio下的节点有专属SELinux类型,不是通用的sysfs类型,比如/sys/class/gpio/export的类型是gpio_export,之前的规则无法匹配这些特定节点。

修复步骤

1. 修正权限授权对象与节点类型

打开以下两个目录下的system_server.te文件:

  • system/sepolicy/private/system_server.te
  • system/sepolicy/prebuilts/api/31.0/private/system_server.te

删除之前添加的错误规则,替换为以下针对GPIO节点的精准授权:

# 允许操作gpio导出/取消导出节点
allow system_server gpio_export:file { write getattr };
# 允许设置GPIO方向
allow system_server gpio_direction:file { write getattr };
# 允许读写GPIO值
allow system_server gpio_value:file { read write getattr };
# 允许访问GPIO相关目录
allow system_server gpio_sysfs:dir { read search getattr };

2. 验证节点类型(可选)

如果不确定节点的SELinux类型,可在设备上执行命令查看:

ls -Z /sys/class/gpio/export
ls -Z /sys/class/gpio/gpioXX/direction
ls -Z /sys/class/gpio/gpioXX/value

输出结果中的u:object_r:XXX:s0里的XXX就是对应节点的SELinux类型,确保规则中的类型与实际一致。

3. 重新编译SELinux策略与系统镜像

执行以下命令重新编译:

make sepolicy -j12
make update-api -j12
# 重新编译完整镜像(根据你的编译流程调整)
make -j12

4. 验证修复效果

刷入新镜像后,无需关闭SELinux,直接测试用户应用的GPIO操作,确认Permission denied错误消失。


内容的提问来源于stack exchange,提问作者Erkin E

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 23:02:32