#!/bin/bash # Copyright 2009 Luis R. Rodriguez # # This script allows you to select your compat-wireless driver and # reduce compilation time. DRIVERS_MAKEFILE="drivers/net/wireless/Makefile" ATH_MAKEFILE="drivers/net/wireless/ath/Makefile" ATH9K_MAKEFILE="drivers/net/wireless/ath/ath9k/Makefile" BRCM80211_MAKEFILE="drivers/net/wireless/brcm80211/Makefile" RT2X00_MAKEFILE="drivers/net/wireless/rt2x00/Makefile" NET_WIRELESS_MAKEFILE="net/wireless/Makefile" EEPROM_MAKEFILE="drivers/misc/eeprom/Makefile" DRIVERS_NET_ATHEROS="drivers/net/ethernet/atheros/Makefile" DRIVERS_NET_BROADCOM="drivers/net/ethernet/broadcom/Makefile" DRIVERS_NET_USB_MAKEFILE="drivers/net/usb/Makefile" SSB_MAKEFILE="drivers/ssb/Makefile" BCMA_MAKEFILE="drivers/bcma/Makefile" # used to backup files from foo to foo.${BACKUP_EXT} # If you change this also modify restore_compat() and # restore_file() below I couldn't find a way to use # the $BACKUP_EXT there. BACKUP_EXT="bk" # Pretty colors GREEN="\033[01;32m" YELLOW="\033[01;33m" NORMAL="\033[00m" BLUE="\033[34m" RED="\033[31m" PURPLE="\033[35m" CYAN="\033[36m" UNDERLINE="\033[02m" SUPPORTED_80211_DRIVERS="ath5k ath9k ath9k_htc carl9170 ath6kl b43 zd1211rw rt2x00 wl1251 wl12xx brcmsmac brcmfmac" # b43 needs some more work for driver-select, the SSB stuff, plus # what if you update b44 but not b43? It will bust. SUPPORTED_ETH_DRIVERS="atl1 atl2 atl1e alx" function usage { echo -e "${GREEN}Usage${NORMAL}: ${BOLD}$0${NORMAL} [ ${PURPLE}${NORMAL} | ${CYAN}${NORMAL} | ${GREEN}restore${NORMAL} ]" # These should match the switch below. echo -e "Supported 802.11 drivers:" for i in $SUPPORTED_80211_DRIVERS; do echo -e "\t${PURPLE}${i}${NORMAL}" done # These should match the switch below. echo -e "\nSupported group drivers:" echo -e "\t${CYAN}atheros${NORMAL} < ${PURPLE} ath5k ath9k carl9170 zd1211rw ath6kl ${NORMAL}>" echo -e "\t${CYAN}ath${NORMAL} < ${PURPLE} ath5k ath9k carl9170 ath6kl ${NORMAL}>" echo -e "\t${CYAN}brcm80211${NORMAL} < ${PURPLE} brcmsmac brcmfmac ${NORMAL}>" echo -e "\t${CYAN}intel${NORMAL} < ${PURPLE} iwlwifi, iwlegacy ${NORMAL}>" echo -e "\t${CYAN}rtl818x${NORMAL} < ${PURPLE} rtl8180 rtl8187 ${NORMAL}>" echo -e "\t${CYAN}rtlwifi${NORMAL} < ${PURPLE} rtl8192ce ${NORMAL}>" echo -e "\t${CYAN}wl12xx${NORMAL} < ${PURPLE} wl1251 wl12xx (SPI and SDIO)${NORMAL}>" echo -e "\nSupported group drivers: Bluetooth & Ethernet:" echo -e "\t${CYAN}atlxx${NORMAL} < ${PURPLE} atl1 atl2 atl1e alx ${NORMAL}>" echo -e "\t${CYAN}bt${NORMAL} < ${PURPLE} Linux bluetooth drivers ${NORMAL}>" echo -e "Restoring compat-wireless:" echo -e "\t${GREEN}restore${NORMAL}: you can use this option to restore compat-wireless to the original state" } function backup_file { if [ -f $1.${BACKUP_EXT} ]; then echo -e "Backup exists: ${CYAN}${1}.${BACKUP_EXT}${NORMAL}" return fi echo -e "Backing up makefile: ${CYAN}${1}.${BACKUP_EXT}${NORMAL}" cp $1 $1.bk } function disable_makefile { backup_file $1 echo > $1 } function select_driver { backup_file $DRIVERS_MAKEFILE perl -i -ne 'print if /'$1'\)/ ' $DRIVERS_MAKEFILE } function select_drivers { backup_file $DRIVERS_MAKEFILE CONFIGS="" COUNT=0 for i in $@; do if [[ "$CONFIGS" = "" ]]; then CONFIGS="$i" else CONFIGS="${CONFIGS}|$i" fi done egrep "$CONFIGS" $DRIVERS_MAKEFILE > ${DRIVERS_MAKEFILE}.tmp mv ${DRIVERS_MAKEFILE}.tmp ${DRIVERS_MAKEFILE} } function disable_lib80211 { backup_file $NET_WIRELESS_MAKEFILE perl -i -ne 'print if ! /LIB80211/ ' $NET_WIRELESS_MAKEFILE } function disable_b44 { backup_file $DRIVERS_NET_BROADCOM perl -i -ne 'print if ! /CONFIG_B44/ ' $DRIVERS_NET_BROADCOM } function disable_ssb { disable_makefile ${SSB_MAKEFILE} perl -i -ne 'print if ! /drivers\/ssb\//' Makefile } function disable_bcma { disable_makefile ${BCMA_MAKEFILE} perl -i -ne 'print if ! /drivers\/bcma\//' Makefile } function disable_rfkill { backup_file Makefile perl -i -ne 'print if ! /CONFIG_COMPAT_RFKILL/' Makefile } function disable_eeprom { disable_makefile ${EEPROM_MAKEFILE} perl -i -ne 'print if ! /drivers\/misc\/eeprom\//' Makefile } function disable_usbnet { disable_makefile ${DRIVERS_NET_USB_MAKEFILE} perl -i -ne 'print if ! /drivers\/net\/usb\//' Makefile } function disable_usbnet { perl -i -ne 'print if ! /CONFIG_COMPAT_NET_USB_MODULES/' Makefile } function disable_ethernet { perl -i -ne 'print if ! /CONFIG_COMPAT_NETWORK_MODULES/' Makefile } function disable_var_03 { perl -i -ne 'print if ! /CONFIG_COMPAT_VAR_MODULES/' Makefile } function disable_bt { perl -i -ne 'print if ! /CONFIG_COMPAT_BLUETOOTH/' Makefile } function disable_80211 { perl -i -ne 'print if ! /CONFIG_COMPAT_WIRELESS/' Makefile } function disable_bt_usb_ethernet { backup_file Makefile disable_usbnet disable_ethernet disable_bt disable_update-initramfs } function disable_bt_usb_ethernet_var { backup_file Makefile disable_bt_usb_ethernet disable_var_03 } function enable_only_ethernet { backup_file Makefile backup_file $DRIVERS_NET_BROADCOM backup_file $DRIVERS_NET_ATHEROS disable_staging disable_usbnet disable_var_03 disable_bt # rfkill may be needed if you enable b44 as you may have b43 disable_rfkill disable_80211 } function disable_var { disable_ssb disable_bcma disable_usbnet disable_eeprom disable_update-initramfs } function disable_var_01 { disable_lib80211 disable_var } function disable_var_02 { #var_01 with eeprom not disabled disable_lib80211 disable_ssb disable_bcma disable_usbnet disable_update-initramfs } function disable_staging { backup_file Makefile perl -i -ne 'print if ! /CONFIG_COMPAT_STAGING/ ' Makefile } function disable_update-initramfs { backup_file Makefile perl -i -ne 'print if ! /update-initramfs/' Makefile } function select_ath_driver { backup_file $ATH_MAKEFILE perl -i -ne 'print if /'$1'/ || /CONFIG_ATH_/ || /ath-objs/ || /regd.o/ || /hw.o/ || /key.o/' $ATH_MAKEFILE disable_var_01 } function select_ath9k_driver { select_ath_driver CONFIG_ATH9K_HW # In the future here we'll add stuff to disable ath9k_htc } function select_brcm80211_driver { backup_file $BRCM80211_MAKEFILE perl -i -ne 'print if /'$1'/ || /CONFIG_BRCMUTIL/ ' $BRCM80211_MAKEFILE } function restore_file { #ORIG=$(shell ${1%%.${BACKUP_EXT}}) ORIG=${1%%.bk} cp $1 $ORIG rm -f $1 echo -e "Restored makefile: ${CYAN}${ORIG}${NORMAL} (and removed backup)" } function restore_compat { #FILES=$(find ./ -type f -name *.$BACKUP_EXT) FILES=$(find ./ -type f -name *.bk) for i in $FILES; do restore_file $i done } if [ $# -ne 1 ]; then usage exit fi if [ ! -f compat_version ]; then echo "Must run $0 from the compat-wireless top level directory" exit fi if [[ ! -f built-in.o ]]; then if [[ "$1" != "restore" ]]; then echo -e "${PURPLE}Processing new driver-select request...${NORMAL}" fi fi # Always backup the top level Makefile, unless restoring if [[ "$1" != "restore" ]]; then backup_file Makefile fi # If a user selects a new driver make sure we clean up for them # first and also restore the backup makefiles then. Otherwise # we'll be trying to leave drivers on Makefiles which are not # already there from a previous run. if [ -f built-in.o ]; then echo -e "${PURPLE}Old build found, going to clean this up first...${NORMAL}" make clean echo -e "${PURPLE}Restoring Makefiles...${NORMAL}" ./$0 restore fi case $1 in restore) restore_compat ;; # Group drivers atheros) select_drivers CONFIG_ATH_COMMON \ CONFIG_COMPAT_ZD1211RW disable_staging disable_bt_usb_ethernet_var disable_var_01 ;; ath) disable_bt_usb_ethernet_var select_drivers CONFIG_ATH_COMMON disable_var_01 ;; intel) select_drivers CONFIG_IWLWIFI \ CONFIG_IWLEGACY \ CONFIG_IPW disable_staging disable_var disable_bt disable_ethernet disable_usbnet ;; iwlwifi) select_driver CONFIG_IWLWIFI disable_staging disable_var_01 disable_bt disable_ethernet disable_usbnet ;; iwlegacy) select_driver CONFIG_IWLEGACY disable_staging disable_var_01 disable_bt disable_ethernet disable_usbnet ;; rtl818x) select_drivers CONFIG_RTL8180 CONFIG_RTL8187 disable_staging disable_bt_usb_ethernet disable_ssb disable_bcma disable_lib80211 ;; rtlwifi) select_drivers CONFIG_RTL8192CE CONFIG_RTLWIFI disable_staging disable_bt_usb_ethernet_var disable_lib80211 ;; wl12xx) select_drivers CONFIG_WL1251 \ CONFIG_WL12XX disable_staging disable_var_01 ;; brcm80211) disable_staging disable_bt_usb_ethernet_var select_drivers CONFIG_BRCMUTIL \ CONFIG_BRCMFMAC \ CONFIG_BRCMSMAC ;; # Singular modules ath5k) disable_staging disable_bt_usb_ethernet_var select_driver CONFIG_ATH_COMMON select_ath_driver CONFIG_ATH5K #patch -p1 < enable-older-kernels/enable-2.6.23.patch ;; ath9k) disable_staging disable_bt_usb_ethernet_var select_driver CONFIG_ATH_COMMON select_ath9k_driver ;; carl9170) disable_staging disable_bt_usb_ethernet_var select_driver CONFIG_ATH_COMMON select_ath_driver CONFIG_CARL9170 ;; ath9k_htc) disable_staging disable_bt_usb_ethernet_var select_driver CONFIG_ATH_COMMON select_ath9k_driver ;; ath6kl) disable_staging disable_bt_usb_ethernet_var select_driver CONFIG_ATH_COMMON select_ath_driver CONFIG_ATH6KL ;; brcmsmac) disable_staging disable_bt_usb_ethernet_var select_drivers CONFIG_BRCMSMAC select_brcm80211_driver CONFIG_BRCMSMAC CONFIG_BRCMUTIL ;; brcmfmac) disable_staging disable_bt_usb_ethernet_var select_drivers CONFIG_BRCMFMAC select_brcm80211_driver CONFIG_BRCMFMAC CONFIG_BRCMUTIL ;; zd1211rw) select_driver CONFIG_COMPAT_ZD1211RW disable_staging disable_var_01 ;; b43) disable_staging disable_bt_usb_ethernet disable_eeprom disable_lib80211 select_driver CONFIG_B43 ;; rt2x00) select_driver CONFIG_RT2X00 disable_staging disable_bt_usb_ethernet disable_var_02 ;; wl1251) select_drivers CONFIG_WL1251 disable_staging disable_var_01 ;; wl12xx) select_drivers CONFIG_WL12XX disable_staging disable_var_01 ;; # Ethernet and Bluetooth drivers atl1) enable_only_ethernet disable_b44 echo -e "obj-\$(CONFIG_ATL1) += atlx/" > $DRIVERS_NET_ATHEROS ;; atl2) enable_only_ethernet disable_b44 echo -e "obj-\$(CONFIG_ATL2) += atlx/" > $DRIVERS_NET_ATHEROS ;; atl1e) enable_only_ethernet disable_b44 echo -e "obj-\$(CONFIG_ATL1E) += atl1e/" > $DRIVERS_NET_ATHEROS ;; atl1c) enable_only_ethernet disable_b44 echo -e "obj-\$(CONFIG_ATL1C) += atl1c/" > $DRIVERS_NET_ATHEROS ;; alx) enable_only_ethernet disable_b44 echo -e "obj-\$(CONFIG_ALX) += alx/" > $DRIVERS_NET_ATHEROS ;; atlxx) select_drivers CONFIG_ATL1 CONFIG_ATL2 CONFIG_ATL1E CONFIG_ALX enable_only_ethernet disable_b44 disable_update-initramfs ;; bt) select_driver CONFIG_BT disable_var disable_ethernet disable_staging disable_80211 ;; *) echo "Unsupported driver" exit ;; esac