android - 尝试在 Xperia E C1504 上打开/dev/radio0 返回 EBUSY

标签 android linux shell v4l2 fcntl

我有一台已获得 root 权限的 Xperia E C1504,我想在其上访问我正在开发的自定义 FM radio 应用程序的 FM 接收器芯片组。问题是我对/dev/radio0 的 fcntl open() 调用一直返回 EBUSY(错误号 16:设备或资源繁忙)。这是我用来尝试打开设备的代码(在根 shell 中执行):

#define DEFAULT_RADIO_DEVICE "/dev/radio0"
...
radio_fd = open(DEFAULT_RADIO_DEVICE, O_RDWR);

我也试过打开(DEFAULT_RADIO_DEVICE,O_RDONLY),虽然我很确定我需要对设备的写权限,但仍然收到 EBUSY。

我验证了 radio 设备可以使用现有的 FM radio 应用程序,该应用程序能够调谐到一个频率并成功接收 PCM。我通过它的电源按钮图标关闭了这个应用程序(这应该释放/dev/radio0,对吗?)并明确地从设置->应用程序菜单强制停止股票 FM radio 应用程序,甚至删除 Radio.apk(股票 FM Radio app package) from/system/apps with Root Browser 然后重启手机,但我的程序在执行上述指令时继续返回 EBUSY。

调查哪个进程可能锁定/dev/radio0 并杀死它的最佳方法是什么?我尝试了 [adb shell "su -c 'lsof/dev/radio0'"] 但返回的列表没有任何与/dev/radio0 完全匹配的条目。有相当多的“/dev/log/radio”案例和将近 300 个“radio”一词的案例,但我期待看到一些被列为完全使用/dev/radio0 的东西。我也试过 [adb shell ps | grep radio] 返回

root      79    2     0      0     ffffffff 00000000 S kfmradio
radio     155   140   20416  3232  ffffffff 00000000 S /system/bin/rild
radio     178   140   7820   2472  ffffffff 00000000 S /system/bin/cnd
radio     215   140   6152   500   ffffffff 00000000 S /system/bin/qmuxd
radio     231   140   7288   752   ffffffff 00000000 S /system/bin/netmgrd
radio     610   157   311448 35704 ffffffff 00000000 S com.android.phone

kfmradio 进程看起来很可疑,所以我尝试杀死它,但没有返回任何错误,但是重新运行上面过滤的 ps 列表显示 kfmradio 仍在进程列表中(我想操作系统重新启动了它?)任何有关对 fcntl open() 调用的 EBUSY 返回进行故障排除的建议将非常有帮助。

设备型号:Sony Xperia E C1504

Linux 内核:3.4.0

安卓操作系统:4.1.1

固件版本:Stock Kernel Xperia E C1505_11.3.A.0.47(应该也适用于 C1504)

Root 于:SRSRoot 和“Gandalf”漏洞。

最佳答案

原来我自己的程序是罪魁祸首;我的 main() 看起来像:

bindFmRx(); //wrapped the open() fcntl function
testV4L2Functionality(); //tested a number of V4L2 functions, and also included an errant 
                         //open() call on /dev/radio0 that I thought I'd removed X|
releaseFmRx();//close()ed the /dev/radio0 device

所以我看到的 EBUSY 来自 testV4L2Functionality() 中的第二个错误的 open() 调用。我通过从 testV4L2Functionality() 例程中删除 fcntl 函数调用解决了这个问题。

关于android - 尝试在 Xperia E C1504 上打开/dev/radio0 返回 EBUSY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21918866/

相关文章:

用于匹配多行语句的 Linux 脚本

android - 在 ViewPropertyAnimator 中指定重复计数/模式?

linux - 具有错误控制的 shell 并行编程

linux - 带条件的 Bash 单行 while 循环的语法

python - 从python在windows上找到bash可执行文件的位置

linux - SMP 如何处理中断?

android - 更改 Cordova 项目 android 包名称

java - Android 服务可以有多个权限吗?

android - 如何从Android中的应用搜索YouTube

linux - 在 bash 中查找文件中最常见的行