永发信息网

android sensor怎样创建设备节点

答案:2  悬赏:30  手机版
解决时间 2021-11-19 03:35
  • 提问者网友:你独家记忆
  • 2021-11-18 17:00
android sensor怎样创建设备节点
最佳答案
  • 五星知识达人网友:老鼠爱大米
  • 2021-11-18 18:23
在Android中,由于没有mdev和udev,所以它没有办法动态的生成设备节点,那么它是如何做的呢?
我们可以在system/core/init/下的init.c和devices.c中找到答案:
init.c中


我们看看get_device_perm如下实现:






在Android中,没有独立的类似于udev或者mdev的用户程序,这个功能集成到了init中做了。代码见:system/core/init/init.c文件,如下:
if (ufds[0].revents == POLLIN)
handle_device_fd(device_fd);
其中handle_device_fd(device_fd)函数在system/core/init/devices.c中实现,参数device_fd 由函数device_init()->open_uevent_socket()->socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT)函数调用返回。
函数handle_device_fd(device_fd)中,根据传进来的device_fd参数,调用recv(fd, msg, UEVENT_MSG_LEN, 0)函数,将内核探测到的设备并通过NETLINK机制传过来的socket描述符转化成消息。接着调用parse_event(msg, &uevent);函数将消息翻译成uevent事件,并将改事件传递给handle_device_event(&uevent)函数。
handle_device_event(&uevent)函数中,依据参数uevent->subsystem类型创建dev下的相应目录,如:/dev/graphics。紧接着根据uevent->action是"add"还是"remove"来实现设备节点的创建与删除。如果uevent->action是"add",则调用make_device(devpath, block, uevent->major, uevent->minor)函数生成设备节点。如果uevent->action是"remove",则调用unlink(devpath)对设备节点进行删除。
全部回答
  • 1楼网友:逐風
  • 2021-11-18 19:33
Android 下应用程序不能直接 获得 root 权限,因此如果需要修改 /sys 或 /proc 等目录下的文件时,有以下两种方法可以选择:
1.通过 service 或虚拟设备的方法将使得应用程序临时 获得 root 权限。可以使用360Root或者其他获取root权限的软件,针对不同的手机型号,可以下载对应的软件。
2.在360root软件里面对 /sys 或 /proc 目录下的文件修改访问权限,使得它们能够被程序访问,设置为可读写。
这也是考虑到安全问题,才不允许应用程序直接读取sys节点。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯