zhjb7 2023-12-18 13:50 采纳率: 0%
浏览 17
已结题

AOSP audio HAL 权限

我想实现定制这样一个android设备:
修改这个android设备的音频输出HAL层,不再调用tinyalsa的接口,而是创建一个tcp client客户端,同时在我的ubuntu电脑已经有一个tcp server端服务。HAL层代码的把调用tinyalsa的open,write,close等接口换成tcp client接口,即用户在android上点击播放音乐后,HAL层代码会connect连接到ubuntu电脑,接着会send音乐数据给ubuntu,ubuntu电脑来实现播放音乐功能。
但我在AOSP的emulator模拟器的device/generic/goldfish/audio/device_port_sink.cpp中调用tcp socket时,执行第一行代码int fd = socket(AF_INET, SOCK_STREAM, 0); 这个fd返回是小于0,errno=13,strerror(errno)=Permission denied。看起来是权限需要修改,但不知道如何改这个权限,我执行了adb shell setenforce 0,但问题依旧,请问如何修改权限?谢谢!
备注一下:我编译的AOSP版本是repo init -u https://android.googlesource.com/platform/manifest -b android-12.1.0_r26,lunch sdk_phone_x86_64-eng。之后运行emulator,使用的audio hal是在device/generic/goldfish/audio目录下。

  • 写回答

17条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-12-18 13:51
    关注
    获得1.05元问题酬金

    引自强大而免费的微信小程序:皆我知道

    要修改AOSP音频HAL层的权限,您可以按照以下步骤进行操作:

    1. 打开device/generic/goldfish/audio/device_port_sink.cpp文件。
    2. 定位到调用socket函数的代码行,例如您提到的int fd = socket(AF_INET, SOCK_STREAM, 0);
    3. 在此代码行之前添加以下代码,以提高权限:
      if (setuid(AID_MEDIA) != 0) {
        ALOGE("Failed to set uid to AID_MEDIA, errno: %d", errno);
        return -1;
      }
    

    这将使用AID_MEDIA用户(用户标识符)提升您的权限。

    注意:您还需要在device/generic/goldfish/audio/device_port_sink.cpp文件的开头包含以下头文件:

    #include <private/android_filesystem_config.h>
    

    这应该能够解决您在调用socket时遇到的权限问题。记得重新构建和运行您的AOSP设备来应用更改。

    希望能对您有所帮助!如果您有更多问题,请随时提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月26日
  • 修改了问题 12月18日
  • 创建了问题 12月18日

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址