Chinaunix首页 | 论坛 | 博客
  • 博客访问: 305877
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 476
  • 用 户 组: 普通用户
  • 注册时间: 2016-09-01 19:08
个人简介

Android/Linux/音频/驱动

文章分类

全部博文(41)

文章存档

2017年(21)

2016年(20)

我的朋友

分类: Android平台

2017-05-04 20:27:30

【正文】 
  设备在播放视频时有异常,使用Logcat查看日志时发现了如下记录:

  1. 14:01:59.136 2825 2825 E SELinux : avc: denied { find } for service=display pid=3015 uid=1046 scontext=u:r:mediacodec:s0 tcontext=u:object_r:display_service:s0 tclass=service_manager permissive=0 04-27
  2. 14:01:59.136 2825 2825 I auditd : avc: denied { find } for service=display pid=3015 uid=1046 scontext=u:r:mediacodec:s0 tcontext=u:object_r:display_service:s0 tclass=service_manager permissive=0
  从上方的Log中可以看出这个问题是因为mediacodec的sepolicy权限没有添加完善所致。具体的操作权限从Log中可以看到是find权限Source上下文mediacodecTarget上下文display_serviceTarget类service_manager。解决方法就是在te文件中为mediacodec添加上缺失的find权限。添加权限的格式为:
  1. allow SourceContext TargetContext:TargetClass Permission
  在任何1个te文件中添加权限都可以,但为了保持格式一致,我最终选择在device/intel/sepolicy/dolby/mediacodec.te文件中按上述格式添加上以下语句:
  1. allow mediacodec display_service:service_manager find
 重新编译bootimage并烧写到设备上进行测试,问题得到解决。


【注意】 
  有时添加完一条权限后可能又会报另一种权限缺失,我们只需要按照上述方法再添加这种缺失的权限即可,直到系统不再报告sepolicy权限缺失为止。

【题外话】 
  前天因为少提交了一个device/intel/cherrytrail/r2_cht_ffd/目录下的 patch,结果第二天测试组同事为设备烧入user版本的镜像后发现所有音频相关的功能都无法正常工作了,而且整个系统都非常卡。因为我平时都是使用eng版本进行测试,没有碰到过这个问题,所以第一反应就是这是权限没有添加成功导致。检查之后发现果然是这样:虽然我在device/intel/sepolicy/dolby/目录下已经为Dolby音效添加了te文件,但在上文提到的r2_cht_ffd路径下忘记了在BoardConfig.mk文件中添加以下代码,所以实际上user版本的镜像中Dolby相关的sepolicy权限配置并没有被编译

  1. # Add sepolicy dir for Dolby audio 
  2. BOARD_SEPOLICY_DIRS += device/intel/sepolicy/dolby
  因为Dolby音效是整合到Android系统的AudioFlinger、NuPlayer、AudioServer等这些系统部件中的,所以当Dolby的权限忘记添加时就会使这些系统部件无法正常工作,从而整个Audio系统也就自然而然地挂掉了。
  为Dolby添加好上方这条语句后,音频系统就又可以正常工作了。现在想想,一不小心就搞崩了Android音频系统,也真是刺激


阅读(3546) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~