我正在将 AOSP 移植到定制板上,并且我需要/dev/ttymxc4
拥有它,u-blox
以便 GPS 驱动程序可以使用它。(没有其他东西需要使用它。)
理想情况下,我希望在构建过程中指定这一点,而不是在运行时破解。
管理设备节点所有权的最佳位置在/dev
哪里?
我正在将 AOSP 移植到定制板上,并且我需要/dev/ttymxc4
拥有它,u-blox
以便 GPS 驱动程序可以使用它。(没有其他东西需要使用它。)
理想情况下,我希望在构建过程中指定这一点,而不是在运行时破解。
管理设备节点所有权的最佳位置在/dev
哪里?
我假设当您说 GPS 驱动程序时,您实际上可能指的是需要与 Linux 内核驱动程序通信的用户空间守护程序?
传统的 Linux DAC 权限通常在 Android 启动时由 init 进程建立,通常在诸如init.common.rc
AOSP 的相应设备目录之类的文件中。这也是定义守护进程(又名 init 服务)的地方。通常,您会system
为您的守护程序重用该组,然后使用标准权限(例如or )重用chown
设备文件。system
0660
0440
请记住,必须在所有最新版本的 Android 中建立 SELinux MAC 权限。建立 SELinux 权限相当复杂,但通常在设置需要与内核驱动程序通信的新守护程序时必须执行以下操作:
file_contexts
为内核驱动程序创建的文件分配标签看:
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
最好的方法是使用 ueventd 文件。这里: https ://github.com/android/platform_system_core/blob/master/rootdir/ueventd.rc 或者你的板子特定的ueventd..rc(应该在你的设备树中)