518 lines
12 KiB
Bash
Executable File
518 lines
12 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Copyright 2009 Luis R. Rodriguez <mcgrof@gmail.com>
|
|
#
|
|
# This script allows you to select your compat-drivers driver and
|
|
# reduce compilation time.
|
|
|
|
COMPAT_CONFIG_CW="config.mk"
|
|
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"
|
|
TI_MAKEFILE="drivers/net/wireless/ti/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_ap ath9k_htc carl9170 ath6kl wil6210 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 atl1c 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
|
|
|
|
echo
|
|
echo -e "Supported Ethernet drivers:"
|
|
for i in $SUPPORTED_ETH_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 wil6210${NORMAL}>"
|
|
echo -e "\t${CYAN}ath${NORMAL} < ${PURPLE} ath5k ath9k carl9170 ath6kl wil6210${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}ti${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-drivers:"
|
|
echo -e "\t${GREEN}restore${NORMAL}: you can use this option to restore compat-drivers 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_drivers_from_makefile
|
|
{
|
|
MAKEFILE="$1"
|
|
shift
|
|
backup_file $MAKEFILE
|
|
CONFIGS=""
|
|
COUNT=0
|
|
for i in $@; do
|
|
if [[ "$CONFIGS" = "" ]]; then
|
|
CONFIGS="$i"
|
|
else
|
|
CONFIGS="${CONFIGS}|$i"
|
|
fi
|
|
done
|
|
egrep "$CONFIGS" $MAKEFILE > ${MAKEFILE}.tmp
|
|
mv ${MAKEFILE}.tmp ${MAKEFILE}
|
|
}
|
|
|
|
function select_drivers
|
|
{
|
|
select_drivers_from_makefile $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_ath9k_driver_ap
|
|
{
|
|
select_ath9k_driver
|
|
backup_file $COMPAT_CONFIG_CW
|
|
perl -i -ne 'print if ! /CONFIG_COMPAT_ATH9K_RATE_CONTROL/ ' $COMPAT_CONFIG_CW
|
|
}
|
|
|
|
function select_ti_drivers
|
|
{
|
|
select_drivers CONFIG_WL_TI
|
|
select_drivers_from_makefile $TI_MAKEFILE $@
|
|
}
|
|
|
|
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-drivers 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_drivers CONFIG_IWLWIFI
|
|
disable_staging
|
|
disable_var_01
|
|
disable_bt
|
|
disable_ethernet
|
|
disable_usbnet
|
|
;;
|
|
iwlegacy)
|
|
select_drivers 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
|
|
;;
|
|
ti)
|
|
select_drivers CONFIG_WL_TI
|
|
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_drivers 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_drivers CONFIG_ATH_COMMON
|
|
select_ath9k_driver
|
|
;;
|
|
ath9k_ap)
|
|
disable_staging
|
|
disable_bt_usb_ethernet_var
|
|
select_drivers CONFIG_ATH_COMMON
|
|
select_ath9k_driver_ap
|
|
;;
|
|
carl9170)
|
|
disable_staging
|
|
disable_bt_usb_ethernet_var
|
|
select_drivers CONFIG_ATH_COMMON
|
|
select_ath_driver CONFIG_CARL9170
|
|
;;
|
|
ath9k_htc)
|
|
disable_staging
|
|
disable_bt_usb_ethernet_var
|
|
select_drivers CONFIG_ATH_COMMON
|
|
select_ath9k_driver
|
|
;;
|
|
ath6kl)
|
|
disable_staging
|
|
disable_bt_usb_ethernet_var
|
|
select_drivers CONFIG_ATH_COMMON
|
|
select_ath_driver CONFIG_ATH6KL
|
|
;;
|
|
wil6210)
|
|
disable_staging
|
|
disable_bt_usb_ethernet_var
|
|
select_drivers CONFIG_ATH_COMMON
|
|
select_ath_driver CONFIG_WIL6210
|
|
;;
|
|
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_drivers CONFIG_COMPAT_ZD1211RW
|
|
disable_staging
|
|
disable_var_01
|
|
;;
|
|
b43)
|
|
disable_staging
|
|
disable_bt_usb_ethernet
|
|
disable_eeprom
|
|
disable_lib80211
|
|
select_drivers CONFIG_B43
|
|
;;
|
|
rt2x00)
|
|
select_drivers CONFIG_RT2X00
|
|
disable_staging
|
|
disable_bt_usb_ethernet
|
|
disable_var_02
|
|
;;
|
|
wl1251)
|
|
select_ti_drivers CONFIG_WL1251
|
|
disable_staging
|
|
disable_var_01
|
|
;;
|
|
wl12xx)
|
|
select_ti_drivers CONFIG_WL12XX
|
|
disable_staging
|
|
disable_var_01
|
|
;;
|
|
wl18xx)
|
|
select_ti_drivers CONFIG_WL18XX
|
|
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_drivers CONFIG_BT
|
|
disable_var
|
|
disable_ethernet
|
|
disable_staging
|
|
disable_80211
|
|
;;
|
|
*)
|
|
echo "Unsupported driver"
|
|
exit
|
|
;;
|
|
esac
|