版本
Android 7.0
原生android rild目录位于hardware/ril,其中rild目录中定义rild.rc:
service ril-daemon /system/bin/rild
class main
socket rild stream 660 root radio
socket sap_uim_socket1 stream 660 bluetooth bluetooth
socket rild-debug stream 660 radio system
user root
group radio cache inet misc audio log readproc wakelock
然后在hardware/ril/rild中的Android.mk中包含到 LOCAL_INIT_RC
LOCAL_INIT_RC := rild.rc
LOCAL_INIT_RC 用于将rc文件编译到相应位置,比如rild.rc会编译到system/bin
MTK定制化rild,在alps/device/mediatek/$project/init.modem.rc:
service ril-daemon-mtk /vendor/bin/mtkrild
class core
socket rild stream 660 root radio
socket rild2 stream 660 root radio
socket rild3 stream 660 root radio
socket rild4 stream 660 root radio
socket rild-ims stream 660 root radio
socket rild-debug stream 660 radio system
socket rild-oem stream 660 radio system
socket rild-mtk-ut stream 660 radio net_bt
socket rild-mtk-ut-2 stream 660 radio net_bt
socket rild-mtk-modem stream 660 radio system
socket rild-atci stream 660 root radio
socket rild-mal stream 660 radio system
socket rild-mal-at stream 660 radio system
socket rild-vsim stream 660 root radio
socket rild-mbim stream 660 root radio
socket sap_uim_socket1 stream 660 bluetooth bluetooth
socket sap_uim_socket2 stream 660 bluetooth bluetooth
user root
group radio cache inet misc audio sdcard_r sdcard_rw log system
disabled
oneshot
service ril-daemon-mtkmd2 /vendor/bin/mtkrildmd2
class core
socket rild-md2 stream 660 root radio
socket rild2-md2 stream 660 root radio
socket rild-debug-md2 stream 660 radio system
socket rild-oem-md2 stream 660 radio system
socket rild-mtk-ut-md2 stream 660 radio net_bt
socket rild-mtk-ut-2-md2 stream 660 radio net_bt
socket rild-mtk-modem-md2 stream 660 radio system
socket rild-atci-md2 stream 660 root radio
socket rild-mal-md2 stream 660 radio system
socket rild-mal-at-md2 stream 660 radio system
socket rild-vsim-md2 stream 660 root radio
socket rild-mbim-md2 stream 660 root radio
user root
group radio cache inet misc audio sdcard_r sdcard_rw log system
disabled
oneshot
这里定义了两个rild服务 :ril-daemon-mtk和ril-daemon-mtkmd2,并且分别都增加了不少socket
然后在device.mk中,把init.modem.rc拷贝到了系统根目录
PRODUCT_COPY_FILES += device/mediatek/mt6755/init.modem.rc:root/init.modem.rc
最后在init执行mount_all指令挂载分区时,会加载这些目录中的rc文件,并在合适的时机运行这些服务和操作。
adb shell命令可以看到,一个ril进程,一个phone进程,前者由init加载,后者由zygote64加载。
$ ps | grep rild
radio 1044 1 76608 5256 hrtimer_na 0000000000 S /vendor/bin/mtkrild
$ ps | grep phone
radio 3435 471 1764972 80736 SyS_epoll_ 0000000000 S com.android.phone
$ ps | grep init
root 1 0 27876 2364 SyS_epoll_ 0000000000 S /init
$ ps | grep zygote
root 471 1 2135204 71208 poll_sched 0000000000 S zygote64
root 472 1 1568880 59088 poll_sched 0000000000 S zygote