各位大侠,
    方案公司在他们的单板上面开发好了fm的驱动,并且封装了api,编译成一个so库。我们用JNI去调用这个so库,然后上层应用再调用JNI生成的so库。
调试发现,已经进入fm驱动里面,但是在调用的时候报:
#define EPERM            1      /* Operation not permitted */
#define ENOENT           2      /* No such file or directory */
#define ESRCH            3      /* No such process */
#define EINTR            4      /* Interrupted system call */我们已经把fm应用程序放到liux一起编译的,然后再烧到板子上面,所以它是有root权限的。而且在fm应用程序已经添加了android全部的95个权限。
各位是否遇到这样的问题?

解决方案 »

  1.   

    你的上层ap可没有root权限,如果你ap直接掉drver的话,要将驱动节点的权限改成666
    如果你不是app直接通过jni而是通过binder service,由service来通过jni调driver,应该是可以的。
      

  2.   

    另外就是第三方的so库在android里面用不了。很难用的
      

  3.   

    1。楼主这个过程跨度比较大,我以前做过类似的工作,任何一个环节都可能出问题。当时我是在Android的源码下编译这个so文件,由于这个so需要很多Android的库的支持,所以当时写了一个makefile(我老大写的,巨牛的人),这样才把最底层的so写好了,其中还修改了很多android的库函数,因为libc库里面很多函数和标准的linux下的libc是不一样的。所以一定要保证so是基于Android编译出来的,不然会有找不到函数的情况。
    2。直接用jni去调用so我没试过,我是用c写了一个简单的函数去调用so,然后把c的函数作为接口开放给jni,上层调用我C写的那个函数就好了。不然jni直接和so怎么打交道?
      

  4.   

    3。关于权限的问题,我当时还是用APK和下面的so去打交道的,还没嵌入系统,没有遇到过权限的问题。或者我自己记得不是很清楚了,呵呵,权限在APK的xml去加吧。
      

  5.   

    只需要把驱动文件改成所有用户可读写权限即可 chmod 777 /dev/uinput
      

  6.   

    把AP的权限提升.AP的权限没有那么过,要认为的提升