在 Android AOSP 构建中,在 /dev 中设置设备所有权的正确位置在哪里?

Where's the right place in an Android AOSP build to set ownership on a device in /dev?

我正在将 AOSP 移植到自定义板上,我需要 /dev/ttymxc4u-blox 所有,以便 GPS 驱动程序可以使用它。 (没有其他需要使用它。)

理想情况下,我希望在构建过程中指定它,而不是像我 运行-time hack 那样。

/dev中管理设备节点所有权的最佳位置在哪里?

最好的方法是使用ueventd文件。这里: https://github.com/android/platform_system_core/blob/master/rootdir/ueventd.rc 或者你的主板特定的 ueventd..rc(应该在你的设备树中)

我假设当您说 GPS 驱动程序时,您实际上可能指的是需要与 Linux 内核驱动程序通信的用户 space 守护进程?

传统的Linux DAC权限一般是在启动时由init进程在Android中建立的,通常在AOSP相应设备目录下的init.common.rc等文件中。这也是定义守护进程(又名初始化服务)的地方。通常,您会为守护程序重用 system 组,然后使用 06600440.[=22 等标准权限将设备文件 chown 重用到 system =]

请记住,在 Android 的所有最新版本中也必须建立 SELinux MAC 权限。建立 SELinux 权限相当复杂,但通常在设置需要与内核驱动程序通信的新守护程序时必须执行以下操作:

  • 更新file_contexts为内核驱动程序创建的文件分配标签
  • 添加一个新的 TE 文件,其中:为守护程序建立一个新域,定义初始化过程中的域转换,包括新域访问必要标签的规则

参见:

https://source.android.com/security/selinux/customize https://source.android.com/security/selinux/implement https://source.android.com/security/selinux/images/SELinux_Treble.pdf

示例:

https://android.googlesource.com/device/google/marlin/+/oreo-mr1-release/init.common.rc https://android.googlesource.com/device/google/marlin/+/oreo-mr1-release/sepolicy/init_radio.te