我想实现定制这样一个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目录下。
AOSP audio HAL 权限
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
17条回答 默认 最新
关注获得1.05元问题酬金 引自强大而免费的微信小程序:皆我知道。
要修改AOSP音频HAL层的权限,您可以按照以下步骤进行操作:
- 打开
device/generic/goldfish/audio/device_port_sink.cpp文件。 - 定位到调用
socket函数的代码行,例如您提到的int fd = socket(AF_INET, SOCK_STREAM, 0);。 - 在此代码行之前添加以下代码,以提高权限:
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设备来应用更改。希望能对您有所帮助!如果您有更多问题,请随时提问。
评论 打赏 举报 编辑记录解决 1无用- 打开