Brilloが起動scriptで読み込んでいるserviceは?
前回は、追加gitがどんなコンポーネントなのかを調査したので、今回は、起動時に実行しているserviceをみてみます。
on boot
start firewall-setup
setprop dev.bootcomplete 1
on property:firewall.init=1
enable firewalld
service firewall-setup /system/etc/init.firewall-setup.sh
user root
group root net_admin net_raw
oneshot
service wifi-setup /system/etc/init.wifi-setup.sh
class core
user root
oneshot
service dbus /system/bin/dbus-daemon --system --nofork
class core
socket dbus stream 0660 dbus dbus
user dbus
group dbus
service wpa_supplicant /system/bin/wpa_supplicant \
-Dnl80211 -c/system/lib/shill/shims/wpa_supplicant.conf -u
class main
socket wpa_wlan0 dgram 0660 system system
user system
group system dbus inet
service sensorservice /system/bin/sensorservice
class main
user root
group system
このように、firewalldを起動した後に、dev.bootcompleteのsystem propertyをflagたてる.
そして、IPCには、DBusが使われている (これは別途解説したいと思いますが、webserverdとlibmicrohttpdの間でGPLのライセンスの関係からprocess分離をしていて、その通信に使っているみたい) (Android本家ではdbusは使わなくなったのと違っておもしろいですね)
CONFIG_ANDROID_BINDER_IPC=y
もあるので、binderは使っています.
(またkernelは3.10, 3.14, 3.18, 4.1を想定しているみたいです)
加えて、product/google以下にもありましたが、sensormanagerではなく、sensorserviceというものでsensorも使えるみたいです。
brilloのデバイスでは、WiFiがあることが前提のようで、wpa_supplicantだけでなく、connectivity managerの1 componentであるshillにも引数でconfを渡していますね.
service weaved /system/bin/weaved
class late_start
user system
group system dbus inet
根幹の1つであるweavedは、IPCにdbusを使っていることがわかります.
android_filesystem_config.h
static const struct fs_path_config android_device_files[] = {
{ 00700, AID_SYSTEM, AID_SHELL, CAP_MASK_LONG(CAP_NET_BIND_SERVICE), "system/bin/dnsmasq" },
{ 00700, AID_SYSTEM, AID_SHELL, CAP_MASK_LONG(CAP_BLOCK_SUSPEND), "system/bin/nativepowerman" },
{ 00700, AID_SYSTEM, AID_SHELL, CAP_MASK_LONG(CAP_SYS_TIME), "system/bin/tlsdated" },
{ 00700, AID_SYSTEM, AID_SHELL, CAP_MASK_LONG(CAP_NET_BIND_SERVICE), "system/bin/webservd" },
{ 00700, AID_DHCP, AID_DBUS, CAP_MASK_LONG(CAP_NET_ADMIN) |
CAP_MASK_LONG(CAP_NET_BIND_SERVICE) |
CAP_MASK_LONG(CAP_NET_RAW), "system/bin/dhcpcd-6.8.2" },
{ 00700, AID_SYSTEM, AID_SHELL, CAP_MASK_LONG(CAP_NET_ADMIN) |
CAP_MASK_LONG(CAP_NET_RAW), "system/bin/wpa_supplicant" },
{ 00700, AID_BLUETOOTH, AID_SHELL, CAP_MASK_LONG(CAP_BLOCK_SUSPEND) |
CAP_MASK_LONG(CAP_WAKE_ALARM), "system/bin/bluetoothtbd" },
{ 00550, AID_ROOT, AID_SHELL, 0, "system/etc/init.firewall-setup.sh" },
{ 00550, AID_ROOT, AID_SHELL, 0, "system/etc/init.wifi-setup.sh" },
};
とあり、dnsmasq, power managementのnativepowerman, 先に説明したwebservd (brillo内のHTTP/1.1のwebserverで、libmicrohttpdを使っている), DHCP Client daemon, そしてsecureなparasitic rdateの置き換えのreplacement tlsdatedがあります.
つづく。