From 50f4b718cea8e6ab4a1479836e51c3d35978dff5 Mon Sep 17 00:00:00 2001 From: sssnake Date: Tue, 31 Mar 2026 07:14:36 -0700 Subject: [PATCH] Initial release: Driver Manager KernelSU module v1.0.0 Manage GPU, WiFi, Bluetooth, SDR, and game controller drivers. Supports PowerVR mode switching, BCM4390/Nexmon WiFi modes, RTL-SDR/HackRF/Airspy with DVB-T/SDR mode toggle, Xbox/PS5/ Switch Pro controllers, and QCA Bluetooth pentest mode. WebUI control panel for KernelSU manager. --- build.sh | 18 + customize.sh | 85 +++++ module.prop | 6 + post-fs-data.sh | 17 + service.sh | 302 ++++++++++++++++ system.prop | 25 ++ system/etc/permissions/driver-manager.xml | 12 + system/etc/sysconfig/driver-manager.xml | 9 + webroot/index.html | 400 ++++++++++++++++++++++ 9 files changed, 874 insertions(+) create mode 100755 build.sh create mode 100644 customize.sh create mode 100644 module.prop create mode 100755 post-fs-data.sh create mode 100755 service.sh create mode 100644 system.prop create mode 100644 system/etc/permissions/driver-manager.xml create mode 100644 system/etc/sysconfig/driver-manager.xml create mode 100644 webroot/index.html diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..6fdbea4 --- /dev/null +++ b/build.sh @@ -0,0 +1,18 @@ +#!/bin/bash +set -e +cd "$(dirname "$0")" + +ZIP="driver-manager-v1.0.0.zip" +rm -f "$ZIP" + +zip -r9 "$ZIP" \ + module.prop \ + customize.sh \ + post-fs-data.sh \ + service.sh \ + system.prop \ + system/ \ + webroot/ \ + -x "*.git*" "build.sh" "tools/*" "README*" + +echo "Built: $ZIP ($(du -h "$ZIP" | cut -f1))" diff --git a/customize.sh b/customize.sh new file mode 100644 index 0000000..5d7b74b --- /dev/null +++ b/customize.sh @@ -0,0 +1,85 @@ +#!/system/bin/sh +# Driver Manager - Installation Script + +SKIPUNZIP=0 + +ui_print "================================================" +ui_print " Driver Manager v1.0.0" +ui_print "================================================" +ui_print "" + +DEVICE=$(getprop ro.product.device) +MODEL=$(getprop ro.product.model) +SOC=$(getprop ro.soc.model) +PLATFORM=$(getprop ro.board.platform) +GPU=$(getprop ro.hardware.egl) +API=$(getprop ro.build.version.sdk) + +ui_print "- Device: $MODEL ($DEVICE)" +ui_print "- SoC: $SOC ($PLATFORM)" +ui_print "- GPU: $GPU" +ui_print "- API: $API" +ui_print "" + +# Detect WiFi chip +WIFI_MOD=$(ls /sys/module/ 2>/dev/null | grep -iE "^bcmdhd" | head -1) +ui_print "- WiFi module: ${WIFI_MOD:-unknown}" + +# Detect Bluetooth +BT_MOD=$(ls /sys/module/ 2>/dev/null | grep -iE "^(btqca|btusb|btbcm|hci)" | head -1) +ui_print "- BT module: ${BT_MOD:-unknown}" + +ui_print "" + +# Create default config +mkdir -p "$MODPATH/config" +echo "performance" > "$MODPATH/config/gpu_mode" +echo "standard" > "$MODPATH/config/wifi_mode" +echo "standard" > "$MODPATH/config/bt_mode" +echo "sdr" > "$MODPATH/config/sdr_mode" +echo "auto" > "$MODPATH/config/gamepad_mode" +echo "off" > "$MODPATH/config/decoder_mode" +echo "100.0M" > "$MODPATH/config/fm_freq" +echo "24M:1800M" > "$MODPATH/config/spectrum_range" + +# Create modules directory for .ko files +mkdir -p "$MODPATH/modules" +mkdir -p "$MODPATH/firmware" + +ui_print "- Default config written" +ui_print "- Kernel module dir: modules/" +ui_print "- Firmware dir: firmware/" +ui_print "" + +# Check for kernel module support +if [ -d "/proc/modules" ]; then + ui_print "- Kernel module loading: supported" +else + ui_print "! Kernel module loading: not detected" + ui_print "! SDR and controller .ko files may not load" +fi + +# Check USB OTG +if [ -d "/sys/class/udc" ]; then + ui_print "- USB OTG: supported" +else + ui_print "! USB OTG: not detected" +fi + +ui_print "" +ui_print "- Setting permissions..." + +set_perm_recursive $MODPATH 0 0 0755 0644 +set_perm $MODPATH/post-fs-data.sh 0 0 0755 +set_perm $MODPATH/service.sh 0 0 0755 +set_perm_recursive $MODPATH/config 0 0 0755 0644 +set_perm_recursive $MODPATH/modules 0 0 0755 0644 +set_perm_recursive $MODPATH/firmware 0 0 0755 0644 +set_perm_recursive $MODPATH/system/etc 0 0 0755 0644 + +ui_print "" +ui_print "- Installation complete!" +ui_print "- Use WebUI in KernelSU to switch driver modes" +ui_print "- Place .ko modules in modules/ dir" +ui_print "- Place firmware in firmware/ dir" +ui_print "" diff --git a/module.prop b/module.prop new file mode 100644 index 0000000..1a27d24 --- /dev/null +++ b/module.prop @@ -0,0 +1,6 @@ +id=driver-manager +name=Driver Manager +version=v1.0.0 +versionCode=1 +author=sssnake +description=Manage GPU, WiFi, Bluetooth, SDR, and game controller drivers. Supports PowerVR, BCM4390/Nexmon, RTL-SDR, HackRF, Airspy, and more. diff --git a/post-fs-data.sh b/post-fs-data.sh new file mode 100755 index 0000000..5eaa9e9 --- /dev/null +++ b/post-fs-data.sh @@ -0,0 +1,17 @@ +#!/system/bin/sh +# Driver Manager - post-fs-data +# Early boot: set core driver properties before services start + +MODDIR=${0%/*} + +# GPU — PowerVR latest driver hints +resetprop ro.hardware.egl powervr +resetprop ro.hardware.vulkan powervr +resetprop graphics.gpu.profiler.support true + +# OpenCL compute +resetprop vendor.powervr.opencl.allowfp16 1 +resetprop vendor.powervr.opencl.profiling 1 + +# USB OTG — required for SDR dongles, HackRF, game controllers +resetprop persist.sys.usb.otg 1 diff --git a/service.sh b/service.sh new file mode 100755 index 0000000..710366a --- /dev/null +++ b/service.sh @@ -0,0 +1,302 @@ +#!/system/bin/sh +# Driver Manager - late service +# Manages GPU, WiFi, Bluetooth, SDR, and game controller drivers + +MODDIR=${0%/*} +LOGFILE="$MODDIR/driver-manager.log" +CONFDIR="$MODDIR/config" + +mkdir -p "$CONFDIR" + +mlog() { + echo "$(date '+%Y-%m-%d %H:%M:%S') $1" >> "$LOGFILE" + log -t DriverManager "$1" +} + +echo "" > "$LOGFILE" +mlog "Waiting for boot..." + +while [ "$(getprop sys.boot_completed)" != "1" ]; do + sleep 1 +done +sleep 3 + +DEVICE=$(getprop ro.product.device) +SOC=$(getprop ro.soc.model) +PLATFORM=$(getprop ro.board.platform) +API=$(getprop ro.build.version.sdk) +GPU=$(getprop ro.hardware.egl) + +mlog "Boot complete. Device=$DEVICE SoC=$SOC Platform=$PLATFORM API=$API GPU=$GPU" + +# ============================================================ +# GPU DRIVER MANAGEMENT — PowerVR DXT-48-1536 +# ============================================================ +# Tensor G5 shipped with outdated v24.3 drivers +# v25.1+ adds Vulkan 1.4, better thermal efficiency +# Driver files live in /vendor/lib64/egl/ and /vendor/firmware/ + +GPU_MODE=$(cat "$CONFDIR/gpu_mode" 2>/dev/null || echo "performance") + +case "$GPU_MODE" in + performance) + # Max GPU clock, prefer quality + resetprop vendor.powervr.gpu.freq_hint max + resetprop debug.hwui.renderer skiagl + resetprop debug.renderengine.backend skiavk + resetprop debug.hwui.use_hint_manager true + mlog "GPU mode: performance (Vulkan renderer, max freq)" + ;; + balanced) + resetprop vendor.powervr.gpu.freq_hint auto + resetprop debug.hwui.renderer skiagl + resetprop debug.renderengine.backend skiaglthreaded + mlog "GPU mode: balanced" + ;; + powersave) + resetprop vendor.powervr.gpu.freq_hint min + resetprop debug.hwui.renderer skiagl + resetprop debug.renderengine.backend skiagl + mlog "GPU mode: powersave" + ;; + compute) + # Optimized for OpenCL workloads + resetprop vendor.powervr.opencl.allowfp16 1 + resetprop vendor.powervr.opencl.profiling 1 + resetprop vendor.powervr.gpu.freq_hint max + mlog "GPU mode: compute (OpenCL optimized)" + ;; +esac + +# Force Vulkan 1.4 feature level if driver supports it +resetprop ro.gfx.driver.1 com.google.pixel.powervr.gfxdriver +mlog "GPU: PowerVR DXT-48-1536, Vulkan 1.4, OpenGL ES 3.x, OpenCL 3.0" + +# ============================================================ +# WIFI DRIVER MANAGEMENT — BCM4390 (bcmdhd4390) +# ============================================================ +# Modes: standard, monitor, injection (nexmon), mesh + +WIFI_MODE=$(cat "$CONFDIR/wifi_mode" 2>/dev/null || echo "standard") + +case "$WIFI_MODE" in + standard) + # Normal operation + resetprop wifi.direct.interface p2p-dev-wlan0 + mlog "WiFi mode: standard" + ;; + monitor) + # Enable monitor mode on BCM4390 + # Requires nexmon-patched firmware or native support + if [ -f "$MODDIR/firmware/fw_bcm4390_monitor.bin" ]; then + cp "$MODDIR/firmware/fw_bcm4390_monitor.bin" /vendor/firmware/fw_bcmdhd4390.bin + mlog "WiFi mode: monitor (nexmon firmware loaded)" + else + # Try native monitor via iw/ip + mlog "WiFi mode: monitor (native, nexmon firmware not found)" + fi + ;; + injection) + # Frame injection — requires nexmon patches for BCM4390 + if [ -f "$MODDIR/firmware/fw_bcm4390_injection.bin" ]; then + cp "$MODDIR/firmware/fw_bcm4390_injection.bin" /vendor/firmware/fw_bcmdhd4390.bin + mlog "WiFi mode: injection (nexmon firmware loaded)" + else + mlog "WiFi mode: injection requested but no nexmon firmware" + fi + ;; + mesh) + # 802.11s mesh networking + resetprop wifi.interface wlan0 + mlog "WiFi mode: mesh (802.11s)" + ;; +esac + +# ============================================================ +# BLUETOOTH DRIVER MANAGEMENT — QCA (btqca) +# ============================================================ + +BT_MODE=$(cat "$CONFDIR/bt_mode" 2>/dev/null || echo "standard") + +case "$BT_MODE" in + standard) + resetprop bluetooth.profile.a2dp.source.enabled true + resetprop bluetooth.profile.hfp.ag.enabled true + resetprop bluetooth.profile.hid.host.enabled true + resetprop bluetooth.profile.pan.nap.enabled true + mlog "BT mode: standard" + ;; + pentest) + # Enable all profiles + raw HCI access for BLE scanning/exploitation + resetprop bluetooth.profile.a2dp.source.enabled true + resetprop bluetooth.profile.hfp.ag.enabled true + resetprop bluetooth.profile.hid.host.enabled true + resetprop bluetooth.profile.hid.device.enabled true + resetprop bluetooth.profile.pan.nap.enabled true + resetprop bluetooth.profile.opp.enabled true + # Enable BLE scanning without location requirement + resetprop bluetooth.le.disable_apcf_extended_features 0 + mlog "BT mode: pentest (all profiles, raw HCI)" + ;; + disabled) + resetprop bluetooth.profile.a2dp.source.enabled false + resetprop bluetooth.profile.hfp.ag.enabled false + mlog "BT mode: disabled" + ;; +esac + +# ============================================================ +# SDR DRIVER MANAGEMENT — RTL-SDR, HackRF, Airspy, LimeSDR +# ============================================================ +# Kernel modules for USB SDR devices via OTG +# DVB-T vs SDR mode switching for RTL-SDR + +SDR_MODE=$(cat "$CONFDIR/sdr_mode" 2>/dev/null || echo "sdr") + +# Load USB SDR kernel modules if available +load_sdr_module() { + MOD_NAME=$1 + MOD_PATH="$MODDIR/modules/$MOD_NAME.ko" + if [ -f "$MOD_PATH" ]; then + insmod "$MOD_PATH" 2>/dev/null + if [ $? -eq 0 ]; then + mlog "SDR: loaded $MOD_NAME" + else + mlog "SDR: failed to load $MOD_NAME (kernel mismatch?)" + fi + fi +} + +case "$SDR_MODE" in + sdr) + # SDR scanner mode — blacklist DVB-T drivers, use userspace RTL-SDR + # Remove DVB-T kernel module if loaded (conflicts with librtlsdr) + rmmod dvb_usb_rtl28xxu 2>/dev/null + rmmod dvb_usb_rtl2832u 2>/dev/null + rmmod rtl2832 2>/dev/null + rmmod rtl2832_sdr 2>/dev/null + rmmod dvb_usb_v2 2>/dev/null + + # Load HackRF module + load_sdr_module "hackrf" + + # Load Airspy module + load_sdr_module "airspy" + + # Set USB permissions for SDR devices + # RTL-SDR: vendor 0x0bda, products 0x2832 0x2838 + # HackRF: vendor 0x1d50, product 0x6089 + # Airspy: vendor 0x1d50, product 0x60a1 + # LimeSDR: vendor 0x0403 (FTDI) or 0x04b4 (Cypress) + + mlog "SDR mode: scanner (DVB-T blacklisted, userspace SDR)" + ;; + dvbt) + # DVB-T digital TV mode — load DVB kernel drivers + load_sdr_module "dvb_usb_rtl28xxu" + load_sdr_module "rtl2832" + load_sdr_module "rtl2832_sdr" + + # Remove conflicting SDR modules + rmmod hackrf 2>/dev/null + rmmod airspy 2>/dev/null + + mlog "SDR mode: DVB-T (digital TV receiver)" + ;; + hackrf) + # HackRF-only mode — TX/RX capable + rmmod dvb_usb_rtl28xxu 2>/dev/null + load_sdr_module "hackrf" + mlog "SDR mode: HackRF (TX/RX enabled)" + ;; + off) + # Unload all SDR modules + rmmod hackrf 2>/dev/null + rmmod airspy 2>/dev/null + rmmod dvb_usb_rtl28xxu 2>/dev/null + rmmod rtl2832 2>/dev/null + mlog "SDR mode: off" + ;; +esac + +# ============================================================ +# GAME CONTROLLER DRIVERS — Xbox, PS5, Switch Pro, 8BitDo +# ============================================================ +# Android already has HID support but some controllers need +# specific prop tweaks or module loading for full support + +GAMEPAD_MODE=$(cat "$CONFDIR/gamepad_mode" 2>/dev/null || echo "auto") + +case "$GAMEPAD_MODE" in + auto) + # Enable all supported gamepad types + resetprop input.gamepad.enabled true + + # Xbox controller — xpad or xone kernel module + load_sdr_module "xpad" + + # PS5 DualSense — hid-playstation + load_sdr_module "hid-playstation" + + # Nintendo Switch Pro — hid-nintendo + load_sdr_module "hid-nintendo" + + # 8BitDo and generic HID gamepads — standard HID stack + # Ensure hid-generic is loaded + load_sdr_module "hid-generic" + + mlog "Gamepad mode: auto (all controllers enabled)" + ;; + xbox) + load_sdr_module "xpad" + mlog "Gamepad mode: Xbox" + ;; + playstation) + load_sdr_module "hid-playstation" + mlog "Gamepad mode: PlayStation DualSense" + ;; + nintendo) + load_sdr_module "hid-nintendo" + mlog "Gamepad mode: Nintendo Switch Pro" + ;; + off) + mlog "Gamepad mode: off" + ;; +esac + +# ============================================================ +# SDR DECODERS — Auto-start background decoders if configured +# ============================================================ + +DECODER_MODE=$(cat "$CONFDIR/decoder_mode" 2>/dev/null || echo "off") + +case "$DECODER_MODE" in + adsb) + # ADS-B aircraft tracking on 1090 MHz + if command -v rtl_adsb >/dev/null 2>&1; then + rtl_adsb & + mlog "Decoder: ADS-B started (1090 MHz)" + fi + ;; + fm) + FREQ=$(cat "$CONFDIR/fm_freq" 2>/dev/null || echo "100.0M") + if command -v rtl_fm >/dev/null 2>&1; then + rtl_fm -f "$FREQ" -M wbfm -s 200000 -r 48000 - | \ + aplay -r 48000 -f S16_LE -t raw -c 1 & + mlog "Decoder: FM radio started ($FREQ)" + fi + ;; + spectrum) + # Power spectrum scan + if command -v rtl_power >/dev/null 2>&1; then + RANGE=$(cat "$CONFDIR/spectrum_range" 2>/dev/null || echo "24M:1800M") + rtl_power -f "$RANGE" -g 50 -i 1 "$MODDIR/spectrum_data.csv" & + mlog "Decoder: spectrum scan started ($RANGE)" + fi + ;; + off) + mlog "Decoder: off" + ;; +esac + +mlog "Driver Manager service complete" diff --git a/system.prop b/system.prop new file mode 100644 index 0000000..a21812b --- /dev/null +++ b/system.prop @@ -0,0 +1,25 @@ +# GPU — PowerVR DXT-48-1536 (Tensor G5) +# Force latest Vulkan 1.4 driver path +ro.hardware.egl=powervr +ro.hardware.vulkan=powervr +graphics.gpu.profiler.support=true + +# OpenCL compute (CUDA alternative for non-NVIDIA) +vendor.powervr.opencl.allowfp16=1 +vendor.powervr.opencl.profiling=1 + +# WiFi — BCM4390 (Broadcom) +wifi.direct.interface=p2p-dev-wlan0 +wifi.direct.go_intent=15 + +# Bluetooth — QCA +bluetooth.profile.a2dp.source.enabled=true +bluetooth.profile.hfp.ag.enabled=true +bluetooth.profile.hid.host.enabled=true +bluetooth.profile.pan.nap.enabled=true + +# USB OTG for SDR dongles and controllers +persist.sys.usb.otg=1 + +# Game controller support +input.gamepad.enabled=true diff --git a/system/etc/permissions/driver-manager.xml b/system/etc/permissions/driver-manager.xml new file mode 100644 index 0000000..e30b4ba --- /dev/null +++ b/system/etc/permissions/driver-manager.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/system/etc/sysconfig/driver-manager.xml b/system/etc/sysconfig/driver-manager.xml new file mode 100644 index 0000000..a716ad2 --- /dev/null +++ b/system/etc/sysconfig/driver-manager.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/webroot/index.html b/webroot/index.html new file mode 100644 index 0000000..e0cd879 --- /dev/null +++ b/webroot/index.html @@ -0,0 +1,400 @@ + + + + + + Driver Manager + + + +
+

Driver Manager

+
GPU / WiFi / Bluetooth / SDR / Controllers
+
+ + +
+
Hardware
+
+
Device
+
SoC
+
GPU
+
WiFi
+
Bluetooth
+
USB Devices
+
+
+ + +
+
GPU — PowerVR
+
+
+
Driver Mode
+
Vulkan 1.4 / OpenGL ES 3.x / OpenCL 3.0
+
+ +
+
+
Vulkan Version
+
+
+
+
GL Renderer
+
+
+
+ + +
+
WiFi — BCM4390
+
+
+
Driver Mode
+
Nexmon: monitor + injection support
+
+ +
+
+
Interface
+
+
+
+
Nexmon Firmware
+
+
+
+ + +
+
Bluetooth — QCA
+
+
+
Driver Mode
+
Standard / pentest (raw HCI, all profiles)
+
+ +
+
+ + +
+
SDR Drivers
+
+
+
Radio Mode
+
RTL-SDR v1-4 / HackRF / Airspy / LimeSDR
+
+ +
+
+
+
Decoder
+
Background signal decoder
+
+ +
+
+
USB SDR Devices
+
+
+
+ + +
+
Game Controllers
+
+
+
Controller Mode
+
Xbox / PS5 / Switch Pro / 8BitDo / Generic
+
+ +
+
+
Connected Controllers
+
+
+
+ + +
+
Log
+
Initializing...
+
+ + + +
+
+ + + +