From c7eeef4b582c3640620f6caf4bdb9b64eec82a56 Mon Sep 17 00:00:00 2001 From: Konsta Date: Sun, 16 Mar 2025 13:06:27 +0200 Subject: [PATCH] wifi: package hostapd and wpa_supplicant into apex * This is now possible on Android 15 QPR2. Use cuttlefish as reference. https://android.googlesource.com/device/google/cuttlefish/+/refs/tags/android-15.0.0_r20/apex/com.google.cf.wpa_supplicant/ * Create local copies of the service entries. Generally creating the directories for wireless subsystem happens on trigger 'on post-fs-data'. Since apexd for non-bootstrap APEXs starts 'on post-fs-data', this trigger is not available for vendor APEX packages. Use trigger 'apex.all.ready=true' instead which is later still within post-fs-data. https://source.android.com/docs/core/ota/vendor-apex#init-scripts * Create a local copy of wpa_supplicant_overlay.conf. It hasn't been updated in ten years in hardware/broadcom/wlan. TODO: Check relevance. --- BoardConfig.mk | 1 - device.mk | 10 +-- ramdisk/init.rpi5.rc | 6 -- wifi/Android.bp | 68 +++++++++++++++++++ wifi/android.hardware.wifi.hostapd-service.rc | 13 ++++ ...ndroid.hardware.wifi.supplicant-service.rc | 18 +++++ wifi/apex_file_contexts_hostapd | 3 + wifi/apex_file_contexts_supplicant | 3 + wifi/apex_manifest_hostapd.json | 4 ++ wifi/apex_manifest_supplicant.json | 4 ++ wifi/wpa_supplicant_overlay.conf | 5 ++ 11 files changed, 121 insertions(+), 14 deletions(-) create mode 100644 wifi/Android.bp create mode 100644 wifi/android.hardware.wifi.hostapd-service.rc create mode 100644 wifi/android.hardware.wifi.supplicant-service.rc create mode 100644 wifi/apex_file_contexts_hostapd create mode 100644 wifi/apex_file_contexts_supplicant create mode 100644 wifi/apex_manifest_hostapd.json create mode 100644 wifi/apex_manifest_supplicant.json create mode 100644 wifi/wpa_supplicant_overlay.conf diff --git a/BoardConfig.mk b/BoardConfig.mk index 40efbb7..09cdaa1 100644 --- a/BoardConfig.mk +++ b/BoardConfig.mk @@ -85,5 +85,4 @@ BOARD_HOSTAPD_DRIVER := NL80211 BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE) BOARD_WPA_SUPPLICANT_DRIVER := NL80211 BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE) -WIFI_HIDL_UNIFIED_SUPPLICANT_SERVICE_RC_ENTRY := true WPA_SUPPLICANT_VERSION := VER_0_8_X diff --git a/device.mk b/device.mk index 1d6c9ea..4f5008e 100644 --- a/device.mk +++ b/device.mk @@ -274,16 +274,12 @@ $(call inherit-product, packages/modules/Virtualization/apex/product_packages.mk # Wifi PRODUCT_PACKAGES += \ com.android.hardware.wifi \ - hostapd \ + com.android.hardware.wifi.hostapd.rpi5 \ + com.android.hardware.wifi.supplicant.rpi5 \ hostapd_cli \ libwpa_client \ wificond \ - wpa_cli \ - wpa_supplicant \ - wpa_supplicant.conf - -PRODUCT_COPY_FILES += \ - hardware/broadcom/wlan/bcmdhd/config/wpa_supplicant_overlay.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/wpa_supplicant_overlay.conf + wpa_cli PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.wifi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.xml diff --git a/ramdisk/init.rpi5.rc b/ramdisk/init.rpi5.rc index 804ba8b..c076ea4 100644 --- a/ramdisk/init.rpi5.rc +++ b/ramdisk/init.rpi5.rc @@ -5,9 +5,3 @@ on init on fs mount_all /vendor/etc/fstab.rpi5 - -on post-fs-data - # Create the directories used by the Wireless subsystem - mkdir /data/vendor/wifi 0770 wifi wifi - mkdir /data/vendor/wifi/wpa 0770 wifi wifi - mkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi diff --git a/wifi/Android.bp b/wifi/Android.bp new file mode 100644 index 0000000..f07880c --- /dev/null +++ b/wifi/Android.bp @@ -0,0 +1,68 @@ +// Copyright (C) 2025 KonstaKANG +// +// SPDX-License-Identifier: Apache-2.0 + +prebuilt_etc { + name: "android.hardware.wifi.hostapd-service.rc", + src: "android.hardware.wifi.hostapd-service.rc", + installable: false, +} + +prebuilt_etc { + name: "android.hardware.wifi.supplicant-service.rc", + src: "android.hardware.wifi.supplicant-service.rc", + installable: false, +} + +prebuilt_etc { + name: "wpa_supplicant.conf.rpi", + src: ":wpa_supplicant_template.conf", + filename: "wpa_supplicant.conf", + relative_install_path: "wifi", + installable: false, +} + +prebuilt_etc { + name: "wpa_supplicant_overlay.conf", + src: "wpa_supplicant_overlay.conf", + relative_install_path: "wifi", + installable: false, +} + +apex { + name: "com.android.hardware.wifi.hostapd.rpi5", + manifest: "apex_manifest_hostapd.json", + file_contexts: "apex_file_contexts_hostapd", + key: "com.android.hardware.key", + certificate: ":com.android.hardware.certificate", + updatable: false, + vendor: true, + + binaries: [ + "//external/wpa_supplicant_8/wpa_supplicant/wpa_supplicant:hostapd", + ], + prebuilts: [ + "android.hardware.wifi.hostapd-service.rc", + "android.hardware.wifi.hostapd.xml.prebuilt", + ], +} + +apex { + name: "com.android.hardware.wifi.supplicant.rpi5", + manifest: "apex_manifest_supplicant.json", + file_contexts: "apex_file_contexts_supplicant", + key: "com.android.hardware.key", + certificate: ":com.android.hardware.certificate", + updatable: false, + vendor: true, + + binaries: [ + "//external/wpa_supplicant_8/wpa_supplicant/wpa_supplicant:wpa_supplicant", + ], + prebuilts: [ + "android.hardware.wifi.supplicant-service.rc", + "android.hardware.wifi.supplicant.xml.prebuilt", + "wpa_supplicant.conf.rpi", + "wpa_supplicant_overlay.conf", + ], +} diff --git a/wifi/android.hardware.wifi.hostapd-service.rc b/wifi/android.hardware.wifi.hostapd-service.rc new file mode 100644 index 0000000..f23c77b --- /dev/null +++ b/wifi/android.hardware.wifi.hostapd-service.rc @@ -0,0 +1,13 @@ +on property:apex.all.ready=true + mkdir /data/vendor/wifi 0770 wifi wifi + mkdir /data/vendor/wifi/hostapd 0770 wifi wifi + mkdir /data/vendor/wifi/hostapd/sockets 0770 wifi wifi + +service hostapd /apex/com.android.hardware.wifi.hostapd.rpi5/bin/hw/hostapd + interface aidl android.hardware.wifi.hostapd.IHostapd/default + class main + capabilities NET_ADMIN NET_RAW + user wifi + group wifi net_raw net_admin + disabled + oneshot diff --git a/wifi/android.hardware.wifi.supplicant-service.rc b/wifi/android.hardware.wifi.supplicant-service.rc new file mode 100644 index 0000000..fa9d18f --- /dev/null +++ b/wifi/android.hardware.wifi.supplicant-service.rc @@ -0,0 +1,18 @@ +on property:apex.all.ready=true + mkdir /data/vendor/wifi 0770 wifi wifi + mkdir /data/vendor/wifi/wpa 0770 wifi wifi + mkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi + +service wpa_supplicant /apex/com.android.hardware.wifi.supplicant.rpi5/bin/hw/wpa_supplicant \ + -O/data/vendor/wifi/wpa/sockets -dd \ + -g@android:wpa_wlan0 + # we will start as root and wpa_supplicant will switch to user wifi + # after setting up the capabilities required for WEXT + # user wifi + # group wifi inet keystore + interface aidl android.hardware.wifi.supplicant.ISupplicant/default + class main + socket wpa_wlan0 dgram 660 wifi wifi + user root + disabled + oneshot diff --git a/wifi/apex_file_contexts_hostapd b/wifi/apex_file_contexts_hostapd new file mode 100644 index 0000000..aff5bfc --- /dev/null +++ b/wifi/apex_file_contexts_hostapd @@ -0,0 +1,3 @@ +(/.*)? u:object_r:vendor_file:s0 +/etc(/.*)? u:object_r:vendor_configs_file:s0 +/bin/hw/hostapd u:object_r:hal_wifi_hostapd_default_exec:s0 diff --git a/wifi/apex_file_contexts_supplicant b/wifi/apex_file_contexts_supplicant new file mode 100644 index 0000000..48e4be6 --- /dev/null +++ b/wifi/apex_file_contexts_supplicant @@ -0,0 +1,3 @@ +(/.*)? u:object_r:vendor_file:s0 +/etc(/.*)? u:object_r:vendor_configs_file:s0 +/bin/hw/wpa_supplicant u:object_r:hal_wifi_supplicant_default_exec:s0 diff --git a/wifi/apex_manifest_hostapd.json b/wifi/apex_manifest_hostapd.json new file mode 100644 index 0000000..868e5e5 --- /dev/null +++ b/wifi/apex_manifest_hostapd.json @@ -0,0 +1,4 @@ +{ + "name": "com.android.hardware.wifi.hostapd.rpi5", + "version": 1 +} diff --git a/wifi/apex_manifest_supplicant.json b/wifi/apex_manifest_supplicant.json new file mode 100644 index 0000000..208a7cc --- /dev/null +++ b/wifi/apex_manifest_supplicant.json @@ -0,0 +1,4 @@ +{ + "name": "com.android.hardware.wifi.supplicant.rpi5", + "version": 1 +} diff --git a/wifi/wpa_supplicant_overlay.conf b/wifi/wpa_supplicant_overlay.conf new file mode 100644 index 0000000..740792b --- /dev/null +++ b/wifi/wpa_supplicant_overlay.conf @@ -0,0 +1,5 @@ +disable_scan_offload=1 +wowlan_triggers=any +p2p_disabled=1 +filter_rssi=-75 +no_ctrl_interface= \ No newline at end of file