test: unify Wi-Fi and Bluetooth installation

This commit is contained in:
Shen Mintao
2026-07-25 15:38:47 +08:00
parent 4b31d02392
commit c83ae8b4e6
8 changed files with 351 additions and 32 deletions
+5 -1
View File
@@ -2,12 +2,16 @@
## Overview ## Overview
This automated installation script (`install.sh`) simplifies the process of installing the AIC8800D80 WiFi driver on Linux systems. This automated installation script (`install.sh`) installs the AIC8800 Wi-Fi
driver and firmware loader on Linux systems. Wi-Fi/Bluetooth combo adapters use
the standard kernel `btusb` driver after firmware initialization.
- Automatic Secure Boot detection - Automatic Secure Boot detection
- Automatic dependency installation - Automatic dependency installation
- Automatic driver compilation and installation - Automatic driver compilation and installation
- Automatic module loading on boot - Automatic module loading on boot
- Automatic cleanup of obsolete `aic_btusb` configuration
- Wi-Fi-only and Wi-Fi/Bluetooth combo adapter support from the same branch
- Comprehensive error handling - Comprehensive error handling
- Colored output and logging - Colored output and logging
- Compatible with Ubuntu, Debian, Fedora, and derivatives (DKMS supported `dkms.conf`) - Compatible with Ubuntu, Debian, Fedora, and derivatives (DKMS supported `dkms.conf`)
+45 -6
View File
@@ -1,4 +1,4 @@
# AIC8800D80 Linux Driver # AIC8800 Linux Wi-Fi and Bluetooth Driver
This driver is for the AIC8800D80 chipset, supported by devices such as the Tenda U11 and AX913B. This driver is for the AIC8800D80 chipset, supported by devices such as the Tenda U11 and AX913B.
> [!IMPORTANT] > [!IMPORTANT]
@@ -20,7 +20,10 @@ Added support for devices with Vendor ID 368B (tested).
Tested on Linux kernel 6.16 with Ubuntu 25.04 and 6.1.0.27 with Debian 12. Tested on Linux kernel 6.16 with Ubuntu 25.04 and 6.1.0.27 with Debian 12.
> **Bluetooth Support**: The [`bluetooth`](https://github.com/shenmintao/aic8800d80/tree/bluetooth) branch fully supports Bluetooth. This main branch only provides Wi-Fi functionality. Please switch to the `bluetooth` branch if you need Bluetooth support. The same driver supports Wi-Fi-only adapters and Wi-Fi/Bluetooth combo
adapters. On combo devices, `aic_load_fw` uploads the AIC firmware and the
standard Linux `btusb` driver handles the Bluetooth HCI interface. The obsolete
custom `aic_btusb` module is not used.
### Disclaimer ### Disclaimer
I did not develop this software, The code is sourced from the Tenda U11 driver. I only made some modifications to the code to adapt it to newer kernel versions. Apart from compilation issues, I am unable to address other problems. I did not develop this software, The code is sourced from the Tenda U11 driver. I only made some modifications to the code to adapt it to newer kernel versions. Apart from compilation issues, I am unable to address other problems.
@@ -35,18 +38,18 @@ Before installing the driver, delete all aic8800-related folders under /lib/firm
#### Method 2: Manual Installation #### Method 2: Manual Installation
#### Copy udev rules: #### Copy udev rules:
Copy the aic.rules file to /lib/udev/rules.d/: Copy the aic.rules file to /usr/lib/udev/rules.d/:
```bash ```bash
sudo cp aic.rules /lib/udev/rules.d/ sudo cp aic.rules /usr/lib/udev/rules.d/
``` ```
#### Copy firmware: #### Copy firmware:
Copy the aic8800D80 folder from ./fw to /lib/firmware/: Copy the firmware directories from `./fw` to `/lib/firmware/`:
```bash ```bash
sudo cp -r ./fw/aic8800D80 /lib/firmware/ sudo cp -r ./fw/aic8800* /lib/firmware/
``` ```
#### Navigate to the driver directory: #### Navigate to the driver directory:
@@ -113,3 +116,39 @@ If the device is still not active, check the kernel logs for any errors related
sudo dmesg sudo dmesg
``` ```
### Bluetooth on Combo Adapters
Bluetooth support does not require a separate AIC transport module. After
`aic_load_fw` initializes a combo adapter, the kernel automatically binds its
Bluetooth interface to `btusb`. A Wi-Fi-only adapter does not expose that
interface, so the Bluetooth path remains inactive.
Verify the expected modules and controller with:
```bash
lsmod | grep -E 'aic_load_fw|aic8800_fdrv|btusb'
lsusb -t
bluetoothctl list
```
To scan after a controller appears:
```bash
bluetoothctl
power on
scan on
```
If Bluetooth is missing or reports HCI timeouts, run the read-only diagnostic
script and attach its output together with the current boot log:
```bash
chmod +x diagnose_bt.sh
sudo ./diagnose_bt.sh
sudo journalctl -k -b --no-pager
```
The installer removes active references to the retired `aic_btusb` integration.
It does not force-load `btusb` or globally change the Bluetooth rfkill state;
normal kernel device matching and the user's system policy remain in control.
+4
View File
@@ -1,3 +1,4 @@
# AIC8800 USB mass-storage mode switch rules
KERNEL=="sd*", ATTRS{idVendor}=="a69c", ATTRS{idProduct}=="5721", SYMLINK+="aicudisk", RUN+="/usr/bin/eject /dev/%k" KERNEL=="sd*", ATTRS{idVendor}=="a69c", ATTRS{idProduct}=="5721", SYMLINK+="aicudisk", RUN+="/usr/bin/eject /dev/%k"
KERNEL=="sd*", ATTRS{idVendor}=="a69c", ATTRS{idProduct}=="5723", SYMLINK+="tendaudisk", RUN+="/usr/bin/eject /dev/%k" KERNEL=="sd*", ATTRS{idVendor}=="a69c", ATTRS{idProduct}=="5723", SYMLINK+="tendaudisk", RUN+="/usr/bin/eject /dev/%k"
KERNEL=="sd*", ATTRS{idVendor}=="a69c", ATTRS{idProduct}=="5724", SYMLINK+="ugreenax900", RUN+="/usr/bin/eject /dev/%k" KERNEL=="sd*", ATTRS{idVendor}=="a69c", ATTRS{idProduct}=="5724", SYMLINK+="ugreenax900", RUN+="/usr/bin/eject /dev/%k"
@@ -7,3 +8,6 @@ KERNEL=="sd*", ATTRS{idVendor}=="a69c", ATTRS{idProduct}=="5727", SYMLINK+="ten
KERNEL=="sd*", ATTRS{idVendor}=="a69c", ATTRS{idProduct}=="572a", SYMLINK+="tendaudiskv5", RUN+="/usr/bin/eject /dev/%k" KERNEL=="sd*", ATTRS{idVendor}=="a69c", ATTRS{idProduct}=="572a", SYMLINK+="tendaudiskv5", RUN+="/usr/bin/eject /dev/%k"
KERNEL=="sd*", ATTRS{idVendor}=="a69c", ATTRS{idProduct}=="572c", SYMLINK+="cudydiskv2", RUN+="/usr/bin/eject /dev/%k" KERNEL=="sd*", ATTRS{idVendor}=="a69c", ATTRS{idProduct}=="572c", SYMLINK+="cudydiskv2", RUN+="/usr/bin/eject /dev/%k"
KERNEL=="sd*", ATTRS{idVendor}=="a69c", ATTRS{idProduct}=="572f", SYMLINK+="aicudisk572f", RUN+="/usr/bin/eject /dev/%k" KERNEL=="sd*", ATTRS{idVendor}=="a69c", ATTRS{idProduct}=="572f", SYMLINK+="aicudisk572f", RUN+="/usr/bin/eject /dev/%k"
# AIC8800D80 "Pandora" clone: switch 1111:1111 to its operational USB ID.
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1111", ATTR{idProduct}=="1111", RUN+="/bin/sh -c 'if [ -x /usr/sbin/usb_modeswitch ]; then exec /usr/sbin/usb_modeswitch -c /etc/usb_modeswitch.d/1111:1111; elif [ -x /usr/bin/usb_modeswitch ]; then exec /usr/bin/usb_modeswitch -c /etc/usb_modeswitch.d/1111:1111; fi'"
+3 -1
View File
@@ -56,7 +56,9 @@ sudo rpm-ostree install "$rpm_path"
sudo systemctl reboot sudo systemctl reboot
~~~ ~~~
After reboot, the Wi-Fi module and firmware loader will be available. After reboot, the Wi-Fi module and firmware loader will be available. On combo
adapters, Bluetooth is handled by the standard `btusb` kernel module after
firmware initialization.
This RPM is built for the kernel reported by `uname -r`. Rebuild and reinstall This RPM is built for the kernel reported by `uname -r`. Rebuild and reinstall
it after a Bazzite kernel upgrade. it after a Bazzite kernel upgrade.
+4 -4
View File
@@ -5,7 +5,7 @@
Name: aic8800d80 Name: aic8800d80
Version: %{shortcommit} Version: %{shortcommit}
Release: 1%{?dist} Release: 1%{?dist}
Summary: AIC8800D80 USB Wi-Fi driver Summary: AIC8800 USB Wi-Fi and Bluetooth firmware driver
License: GPL-2.0-only License: GPL-2.0-only
URL: https://github.com/shenmintao/aic8800d80 URL: https://github.com/shenmintao/aic8800d80
@@ -22,9 +22,9 @@ Requires(post): /usr/sbin/depmod
Requires(postun): /usr/sbin/depmod Requires(postun): /usr/sbin/depmod
%description %description
Out-of-tree AIC8800D80 USB Wi-Fi driver with udev mode-switch rules and all Out-of-tree AIC8800 USB driver with Wi-Fi support, Bluetooth firmware loading,
firmware variants shipped by the upstream repository. This main-branch package udev mode-switch rules, and all firmware variants shipped by the upstream
does not install a custom Bluetooth transport driver. repository. Combo adapters use the standard Linux btusb transport driver.
%prep %prep
%autosetup -n %{name}-%{commit} %autosetup -n %{name}-%{commit}
+129
View File
@@ -0,0 +1,129 @@
#!/bin/bash
# Diagnose Bluetooth on AIC8800 Wi-Fi/Bluetooth combo adapters.
#
# aic_load_fw initializes the device and uploads the AIC firmware. The
# standard in-kernel btusb driver must then bind to the Bluetooth HCI USB
# interface. The removed aic_btusb module must not be installed or loaded.
echo "=== AIC8800 Bluetooth diagnostics ==="
echo ""
echo "1. AIC USB devices:"
if command -v lsusb >/dev/null 2>&1; then
lsusb | grep -iE 'a69c|368b|3625' || echo " No known AIC USB ID found"
else
echo " lsusb is not installed"
fi
echo ""
echo "2. USB interfaces and bound drivers:"
bt_interface_found=false
btusb_bound=false
for dev in /sys/bus/usb/devices/*; do
[ -f "$dev/idVendor" ] || continue
[ -f "$dev/idProduct" ] || continue
vid=$(cat "$dev/idVendor" 2>/dev/null)
pid=$(cat "$dev/idProduct" 2>/dev/null)
case "$vid" in
a69c|368b|3625) ;;
*) continue ;;
esac
echo " Device: $vid:$pid"
for intf in "$dev"/*:*; do
[ -d "$intf" ] || continue
class=$(cat "$intf/bInterfaceClass" 2>/dev/null)
subclass=$(cat "$intf/bInterfaceSubClass" 2>/dev/null)
protocol=$(cat "$intf/bInterfaceProtocol" 2>/dev/null)
driver=$(basename "$(readlink "$intf/driver" 2>/dev/null)" 2>/dev/null)
echo " $(basename "$intf"): ${class:-??}/${subclass:-??}/${protocol:-??} -> ${driver:-unbound}"
if [ "$driver" = "btusb" ]; then
btusb_bound=true
bt_interface_found=true
elif [ "$class" = "e0" ] && [ "$subclass" = "01" ] && [ "$protocol" = "01" ]; then
bt_interface_found=true
fi
done
done
echo ""
echo "3. Relevant kernel modules (combo expectation: aic_load_fw + btusb):"
lsmod | grep -E '^(aic_load_fw|aic8800_fdrv|aic_btusb|btusb|bluetooth)[[:space:]]' || \
echo " No related module is currently loaded"
echo ""
echo "4. Bluetooth controllers:"
if command -v bluetoothctl >/dev/null 2>&1; then
bluetoothctl list 2>/dev/null || echo " No controller reported by bluetoothctl"
elif command -v hciconfig >/dev/null 2>&1; then
hciconfig -a 2>/dev/null || echo " No controller reported by hciconfig"
else
echo " BlueZ command-line tools are not installed"
fi
echo ""
echo "5. Firmware, btusb, and HCI log messages:"
dmesg 2>/dev/null | grep -iE 'fw_patch|fw_adid|aicbt|bluetooth|btusb|hci' | tail -80 || true
echo ""
echo "6. Bluetooth rfkill state:"
if command -v rfkill >/dev/null 2>&1; then
rfkill list bluetooth 2>/dev/null || echo " No Bluetooth rfkill entry"
else
echo " rfkill is not installed"
fi
echo ""
echo "7. Obsolete aic_btusb installation/configuration:"
legacy_refs_found=false
mapfile -t legacy_modprobe_files < <(
grep -RIlE '^[[:space:]]*(softdep|alias)[^#]*aic_btusb([[:space:]]|$)' \
/etc/modprobe.d /run/modprobe.d /usr/local/lib/modprobe.d \
/usr/lib/modprobe.d /lib/modprobe.d 2>/dev/null || true
)
mapfile -t legacy_udev_files < <(
grep -RIl 'aic_btusb/new_id' \
/etc/udev/rules.d /run/udev/rules.d \
/usr/lib/udev/rules.d /lib/udev/rules.d 2>/dev/null || true
)
for legacy_file in "${legacy_modprobe_files[@]}"; do
echo " Obsolete modprobe directive: $legacy_file"
legacy_refs_found=true
done
for legacy_file in "${legacy_udev_files[@]}"; do
echo " Obsolete udev binding rule: $legacy_file"
legacy_refs_found=true
done
if lsmod | awk '{print $1}' | grep -qx 'aic_btusb'; then
echo " Obsolete aic_btusb module is loaded"
legacy_refs_found=true
fi
if modinfo -n aic_btusb >/dev/null 2>&1; then
echo " Obsolete module file: $(modinfo -n aic_btusb 2>/dev/null)"
legacy_refs_found=true
fi
if [ "$legacy_refs_found" = false ]; then
echo " No active aic_btusb module, directive, or binding rule found (expected)"
fi
echo ""
echo "=== Assessment ==="
if ! lsmod | awk '{print $1}' | grep -qx 'aic_load_fw'; then
echo "- aic_load_fw is not loaded; run: sudo modprobe aic8800_fdrv"
fi
if [ "$bt_interface_found" = true ] && [ "$btusb_bound" = false ]; then
echo "- A Bluetooth USB interface exists but is not bound to btusb."
echo " Check for a btusb blacklist, then try: sudo modprobe btusb"
fi
if dmesg 2>/dev/null | grep -iE 'hci[0-9]+:.*(command|opcode|tx).*timed out|hci[0-9]+: link tx timeout' | tail -1 | grep -q .; then
echo "- HCI timeout detected. Confirm that aic_load_fw uploaded the firmware before btusb bound."
echo " Also check for obsolete aic_btusb configuration above."
fi
if [ "$bt_interface_found" = false ]; then
echo "- No Bluetooth HCI USB interface was found. This is normal for a Wi-Fi-only adapter."
fi
echo "=== Diagnostics complete ==="
+88 -19
View File
@@ -323,6 +323,46 @@ check_kernel_build_tree() {
# Firmware Installation # Firmware Installation
############################################################################# #############################################################################
cleanup_legacy_bluetooth_config() {
local legacy_conf="/etc/modprobe.d/aic8800-bt.conf"
local legacy_udev="/etc/udev/rules.d/90-aic8800-mode-switch.rules"
local changed=false
if [ -f "$legacy_conf" ] && grep -Eq '^[[:space:]]*(softdep|alias)[^#]*aic_btusb([[:space:]]|$)' "$legacy_conf"; then
print_info "Removing obsolete aic_btusb directives from $legacy_conf..."
if [ ! -f "${legacy_conf}.aic8800-backup" ]; then
cp -a "$legacy_conf" "${legacy_conf}.aic8800-backup" >> "$LOG_FILE" 2>&1
fi
sed -i -E '/^[[:space:]]*(softdep|alias)[^#]*aic_btusb([[:space:]]|$)/d' "$legacy_conf"
if ! grep -Eq '^[[:space:]]*[^#[:space:]]' "$legacy_conf"; then
rm -f "$legacy_conf"
fi
changed=true
fi
if [ -f "$legacy_udev" ] && grep -q 'aic_btusb/new_id' "$legacy_udev"; then
print_info "Removing obsolete aic_btusb binding rules from $legacy_udev..."
if [ ! -f "${legacy_udev}.aic8800-backup" ]; then
cp -a "$legacy_udev" "${legacy_udev}.aic8800-backup" >> "$LOG_FILE" 2>&1
fi
sed -i '/aic_btusb\/new_id/d' "$legacy_udev"
changed=true
fi
if lsmod | awk '{print $1}' | grep -qx 'aic_btusb'; then
print_info "Unloading obsolete aic_btusb module..."
if modprobe -r aic_btusb >> "$LOG_FILE" 2>&1; then
changed=true
else
print_warning "aic_btusb is still in use; reboot or replug the adapter after installation."
fi
fi
if [ "$changed" = true ]; then
print_success "Legacy Bluetooth configuration cleaned up."
fi
}
install_firmware() { install_firmware() {
print_step "Installing firmware..." print_step "Installing firmware..."
@@ -334,6 +374,8 @@ install_firmware() {
exit 1 exit 1
fi fi
cleanup_legacy_bluetooth_config
# Remove old firmware versions # Remove old firmware versions
if [ -d "/lib/firmware" ] && [ -n "$(find /lib/firmware -maxdepth 1 -name 'aic8800*' -type d 2>/dev/null)" ]; then if [ -d "/lib/firmware" ] && [ -n "$(find /lib/firmware -maxdepth 1 -name 'aic8800*' -type d 2>/dev/null)" ]; then
print_info "Removing existing firmware..." print_info "Removing existing firmware..."
@@ -351,6 +393,8 @@ install_firmware() {
fi fi
done done
print_success "Firmware installed for all supported chip variants."
# Install udev rules # Install udev rules
local rules_source="${SCRIPT_DIR}/aic.rules" local rules_source="${SCRIPT_DIR}/aic.rules"
local rules_dest="/usr/lib/udev/rules.d/aic.rules" local rules_dest="/usr/lib/udev/rules.d/aic.rules"
@@ -526,22 +570,23 @@ refresh_initramfs() {
############################################################################# #############################################################################
load_module() { load_module() {
print_step "Loading kernel module..." print_step "Loading kernel modules..."
# Update module dependencies # Update module dependencies
print_info "Updating module dependencies..." print_info "Updating module dependencies..."
depmod -a >> "$LOG_FILE" 2>&1 depmod -a >> "$LOG_FILE" 2>&1
# Unload module if already loaded
if lsmod | grep -q "$MODULE_NAME"; then if lsmod | grep -q "$MODULE_NAME"; then
print_info "Module already loaded. Reloading..." print_info "Wi-Fi module already loaded. Reloading..."
modprobe -r "$MODULE_NAME" >> "$LOG_FILE" 2>&1 || true modprobe -r "$MODULE_NAME" >> "$LOG_FILE" 2>&1 || true
fi fi
# Load the module # aic8800_fdrv depends on aic_load_fw, which initializes both Wi-Fi-only
# adapters and the Bluetooth firmware on combo adapters. If a standard HCI
# USB interface appears afterwards, the kernel USB modalias loads btusb.
print_info "Loading $MODULE_NAME..." print_info "Loading $MODULE_NAME..."
if modprobe "$MODULE_NAME" >> "$LOG_FILE" 2>&1; then if modprobe "$MODULE_NAME" >> "$LOG_FILE" 2>&1; then
print_success "Module loaded successfully." print_success "Wi-Fi module loaded successfully."
# Verify module is loaded # Verify module is loaded
print_info "Waiting for module to initialize..." print_info "Waiting for module to initialize..."
@@ -555,15 +600,17 @@ load_module() {
done done
if [ "$module_loaded" = true ]; then if [ "$module_loaded" = true ]; then
print_success "Module is active in kernel." print_success "Wi-Fi module is active in kernel."
else else
print_warning "Module may not be fully initialized yet." print_warning "Wi-Fi module may not be fully initialized yet."
fi fi
else else
print_warning "Module installed but could not be loaded immediately." print_warning "Wi-Fi module installed but could not be loaded immediately."
print_info "This may be due to Secure Boot or missing hardware." print_info "This may be due to Secure Boot or missing hardware."
print_info "Try rebooting or check: sudo dmesg | grep aic8800" print_info "Try rebooting or check: sudo dmesg | grep aic8800"
fi fi
print_info "Combo adapters use the standard btusb driver when their Bluetooth interface appears."
} }
############################################################################# #############################################################################
@@ -583,15 +630,23 @@ verify_installation() {
print_warning "DKMS status unclear: $dkms_status" print_warning "DKMS status unclear: $dkms_status"
fi fi
# Check if module is loaded # Check if the Wi-Fi module is loaded
if lsmod | grep -q "$MODULE_NAME"; then if lsmod | grep -q "$MODULE_NAME"; then
print_success "Kernel module is loaded." print_success "Wi-Fi kernel module is loaded."
echo ""
lsmod | grep aic
else else
print_info "Module not currently loaded (this is OK if no hardware is connected)." print_info "Wi-Fi module not currently loaded (this is OK if no hardware is connected)."
fi fi
if lsmod | awk '{print $1}' | grep -qx 'btusb' || compgen -G '/sys/class/bluetooth/hci*' > /dev/null; then
print_success "A Bluetooth controller or the standard btusb module is present."
else
print_info "No Bluetooth controller is present (normal for Wi-Fi-only adapters or when no combo adapter is connected)."
fi
echo ""
print_info "Loaded AIC modules:"
lsmod | grep aic || echo " (none)"
# Check firmware # Check firmware
local fw_count=0 local fw_count=0
for fw_dir in /lib/firmware/aic8800*; do for fw_dir in /lib/firmware/aic8800*; do
@@ -610,6 +665,15 @@ verify_installation() {
if command -v iwconfig &> /dev/null; then if command -v iwconfig &> /dev/null; then
iwconfig 2>/dev/null | grep -E "wlan|IEEE" || echo "No wireless interfaces detected (hardware may not be connected)" iwconfig 2>/dev/null | grep -E "wlan|IEEE" || echo "No wireless interfaces detected (hardware may not be connected)"
fi fi
print_info "Checking for Bluetooth interfaces on combo adapters..."
if command -v bluetoothctl &> /dev/null; then
bluetoothctl list 2>/dev/null || echo "No Bluetooth interfaces detected (normal for Wi-Fi-only adapters)"
elif command -v hciconfig &> /dev/null; then
hciconfig 2>/dev/null || echo "No Bluetooth interfaces detected (normal for Wi-Fi-only adapters)"
else
echo "Bluetooth tools not installed (install BlueZ to manage a combo adapter)"
fi
} }
############################################################################# #############################################################################
@@ -624,13 +688,14 @@ show_final_instructions() {
echo "" echo ""
echo -e "${CYAN}Important Information:${NC}" echo -e "${CYAN}Important Information:${NC}"
echo "" echo ""
echo "✓ Driver installed via DKMS" echo "✓ Wi-Fi driver and firmware loader installed via DKMS"
echo "✓ Combo adapters use the standard Linux btusb driver"
echo "✓ Automatic rebuild enabled for kernel updates" echo "✓ Automatic rebuild enabled for kernel updates"
echo "✓ Firmware installed in /lib/firmware/" echo "✓ Firmware installed in /lib/firmware/"
echo "" echo ""
echo -e "${CYAN}Next Steps:${NC}" echo -e "${CYAN}Next Steps:${NC}"
echo "" echo ""
echo "1. Connect your AIC8800D80 USB WiFi adapter" echo "1. Connect your AIC8800 USB Wi-Fi or Wi-Fi/Bluetooth adapter"
echo "" echo ""
echo "2. Check if the adapter is detected:" echo "2. Check if the adapter is detected:"
echo " ${BLUE}lsusb | grep -i aic${NC}" echo " ${BLUE}lsusb | grep -i aic${NC}"
@@ -639,32 +704,36 @@ show_final_instructions() {
echo "" echo ""
echo "3. View kernel messages about the driver:" echo "3. View kernel messages about the driver:"
echo " ${BLUE}sudo dmesg | grep aic8800${NC}" echo " ${BLUE}sudo dmesg | grep aic8800${NC}"
echo " ${BLUE}sudo dmesg | grep -iE 'bluetooth|btusb|hci'${NC}"
echo "" echo ""
echo "4. Connect to a WiFi network:" echo "4. Connect to a WiFi network:"
echo " ${BLUE}nmcli device wifi list${NC}" echo " ${BLUE}nmcli device wifi list${NC}"
echo " ${BLUE}nmcli device wifi connect \"SSID\" password \"PASSWORD\"${NC}" echo " ${BLUE}nmcli device wifi connect \"SSID\" password \"PASSWORD\"${NC}"
echo "" echo ""
echo "5. For a combo adapter, check Bluetooth:"
echo " ${BLUE}bluetoothctl list${NC}"
echo " ${BLUE}bluetoothctl scan on${NC}"
echo ""
echo -e "${CYAN}Troubleshooting:${NC}" echo -e "${CYAN}Troubleshooting:${NC}"
echo "" echo ""
echo "• Check DKMS status:" echo "• Check DKMS status:"
echo " ${BLUE}dkms status${NC}" echo " ${BLUE}dkms status${NC}"
echo "" echo ""
echo "• Check loaded modules:" echo "• Check loaded modules:"
echo " ${BLUE}lsmod | grep aic8800${NC}" echo " ${BLUE}lsmod | grep -E 'aic|btusb'${NC}"
echo "" echo ""
echo "• Manually load the module:" echo "• Manually load the Wi-Fi module and firmware loader:"
echo " ${BLUE}sudo modprobe aic8800_fdrv${NC}" echo " ${BLUE}sudo modprobe aic8800_fdrv${NC}"
echo "" echo ""
echo "• View detailed logs:" echo "• View detailed logs:"
echo " ${BLUE}cat $LOG_FILE${NC}" echo " ${BLUE}cat $LOG_FILE${NC}"
echo "" echo ""
echo -e "${YELLOW}Known Limitations:${NC}" echo -e "${YELLOW}Known Limitations:${NC}"
echo "• Bluetooth functionality is not supported"
echo "• Secure Boot may prevent module loading (disable in BIOS if needed)" echo "• Secure Boot may prevent module loading (disable in BIOS if needed)"
echo "" echo ""
echo -e "${CYAN}Uninstallation:${NC}" echo -e "${CYAN}Uninstallation:${NC}"
echo " ${BLUE}sudo dkms remove ${DRV_NAME}/${DRV_VERSION} --all${NC}" echo " ${BLUE}sudo dkms remove ${DRV_NAME}/${DRV_VERSION} --all${NC}"
echo " ${BLUE}sudo rm -rf /lib/firmware/aic8800D80${NC}" echo " ${BLUE}sudo rm -rf /lib/firmware/aic8800*${NC}"
echo "" echo ""
} }
+72
View File
@@ -0,0 +1,72 @@
# Unified Wi-Fi and Bluetooth branch test
This branch tests replacing the separate `main` and `bluetooth` branches with
one driver and installer. The kernel driver, firmware, and DKMS configuration
were already identical on both branches. This test unifies their installer,
migration, diagnostics, packaging description, and documentation.
The expected architecture is:
- `aic_load_fw` initializes every supported adapter and uploads firmware.
- `aic8800_fdrv` handles Wi-Fi.
- A combo adapter exposes a Bluetooth HCI USB interface after initialization;
the standard Linux `btusb` driver binds through normal USB device matching.
- A Wi-Fi-only adapter exposes no HCI interface and does not need `btusb`.
- The retired custom `aic_btusb` module is never installed or used.
The installer deliberately does not force-load `btusb` and does not globally
unblock Bluetooth through rfkill.
## Install
```bash
git fetch origin
git switch test/unified-wifi-bt
git pull --ff-only
sudo ./install.sh
sudo reboot
```
## Test a Wi-Fi-only adapter
Confirm that:
1. The Wi-Fi interface is created.
2. Scanning, association, DHCP, and real traffic work.
3. No `aic_btusb` module is loaded.
4. The absence of `btusb` or an HCI controller is treated as normal.
## Test a Wi-Fi/Bluetooth combo adapter
Confirm that:
1. Wi-Fi scanning, association, DHCP, and real traffic work.
2. `aic_load_fw` uploads the firmware before the HCI interface is used.
3. The Bluetooth USB interface is bound to the standard `btusb` driver.
4. `bluetoothctl` can power on, scan, pair, and exchange real traffic.
5. No `aic_btusb` module, alias, soft dependency, or udev binding rule remains.
## Collect results
```bash
git rev-parse --short HEAD
lsusb
lsusb -t
lsmod | grep -E 'aic|btusb|bluetooth'
iw dev
bluetoothctl list
sudo ./diagnose_bt.sh | tee unified-wifi-bt-diagnostic.log
sudo journalctl -k -b --no-pager | tee unified-wifi-bt-kernel.log
```
Please attach both logs and identify whether the tested adapter is Wi-Fi-only
or a combo device.
## Roll back during testing
```bash
git switch main
git pull --ff-only
sudo ./install.sh
sudo reboot
```