| #!/bin/bash |
| # Copyright 2009 Luis R. Rodriguez <mcgrof@gmail.com> |
| # |
| # 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}<driver-name>${NORMAL} | ${CYAN}<driver-group-name>${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 |