Jeremy Cline 0310b31
#! /bin/bash
Jeremy Cline 0310b31
#
Jeremy Cline 0310b31
# Called as filter-modules.sh list-of-modules Arch
Jeremy Cline 0310b31
Jeremy Cline 0310b31
# This script filters the modules into the kernel-core and kernel-modules
Jeremy Cline 0310b31
# subpackages.  We list out subsystems/subdirs to prune from the installed
Jeremy Cline 0310b31
# module directory.  What is left is put into the kernel-core package.  What is
Jeremy Cline 0310b31
# pruned is contained in the kernel-modules package.
Jeremy Cline 0310b31
#
Jeremy Cline 0310b31
# This file contains the default subsys/subdirs to prune from all architectures.
Jeremy Cline 0310b31
# If an architecture needs to differ, we source a per-arch filter-<arch>.sh file
Jeremy Cline 0310b31
# that contains the set of override lists to be used instead.  If a module or
Jeremy Cline 0310b31
# subsys should be in kernel-modules on all arches, please change the defaults
Jeremy Cline 0310b31
# listed here.
Jeremy Cline 0310b31
6c2cc50
# Overrides is individual modules which need to remain in kernel-core due to deps.
9433297
overrides="cec isst_if_common isst_tpmi_core isst_tpmi intel_vsec intel_vsec_tpmi"
6c2cc50
Jeremy Cline 0310b31
# Set the default dirs/modules to filter out
6c2cc50
driverdirs="atm auxdisplay bcma bluetooth firewire fmc iio infiniband isdn leds media memstick mfd mmc mtd nfc ntb pcmcia platform power ssb staging tty uio uwb w1"
Jeremy Cline 0310b31
Jeremy Cline 0310b31
chardrvs="mwave pcmcia"
Jeremy Cline 0310b31
Jeremy Cline 0310b31
netdrvs="appletalk can dsa hamradio ieee802154 irda ppp slip usb wireless"
Jeremy Cline 0310b31
Jeremy Cline 0310b31
ethdrvs="3com adaptec alteon amd aquantia atheros broadcom cadence calxeda chelsio cisco dec dlink emulex icplus marvell neterion nvidia oki-semi packetengines qlogic rdc renesas sfc silan sis smsc stmicro sun tehuti ti wiznet xircom"
Jeremy Cline 0310b31
5d333e1
cryptdrvs="bcm caam cavium chelsio hisilicon marvell qat"
5d333e1
Jeremy Cline 0310b31
inputdrvs="gameport tablet touchscreen"
Jeremy Cline 0310b31
Jeremy Cline 0310b31
scsidrvs="aacraid aic7xxx aic94xx be2iscsi bfa bnx2i bnx2fc csiostor cxgbi esas2r fcoe fnic hisi_sas isci libsas lpfc megaraid mpt2sas mpt3sas mvsas pm8001 qla2xxx qla4xxx sym53c8xx_2 ufs qedf"
Jeremy Cline 0310b31
Jeremy Cline 0310b31
usbdrvs="atm image misc serial wusbcore"
Jeremy Cline 0310b31
12cfc85
fsdrvs="affs befs coda cramfs ecryptfs hfs hfsplus jfs minix ncpfs nilfs2 ocfs2 reiserfs romfs smb squashfs sysv ubifs ufs"
Jeremy Cline 0310b31
Jeremy Cline 0310b31
netprots="6lowpan appletalk atm ax25 batman-adv bluetooth can dccp dsa ieee802154 irda l2tp mac80211 mac802154 mpls netrom nfc rds rfkill rose sctp smc wireless"
Jeremy Cline 0310b31
Jeremy Cline 0310b31
drmdrvs="amd ast gma500 i2c i915 mgag200 nouveau radeon via "
Jeremy Cline 0310b31
47976a2
singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwa-hc hwpoison-inject hid-sensor-hub target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr chtls parport_serial ism regmap-sdw regmap-sdw-mbq arizona-micsupp hid-asus nct6775 ntc_thermistor video apple_bl kasan_test intel-m10-bmc-hwmon dell-smm-hwmon"
Jeremy Cline 0310b31
Jeremy Cline 0310b31
# Grab the arch-specific filter list overrides
Jeremy Cline 0310b31
source ./filter-$2.sh
Jeremy Cline 0310b31
Jeremy Cline 0310b31
filter_dir() {
Jeremy Cline 0310b31
	filelist=$1
Jeremy Cline 0310b31
	dir=$2
Jeremy Cline 0310b31
Jeremy Cline 0310b31
	grep -v -e "${dir}/" ${filelist} > ${filelist}.tmp
Jeremy Cline 0310b31
Jeremy Cline 0310b31
	if [ $? -ne 0 ]
Jeremy Cline 0310b31
	then
Jeremy Cline 0310b31
		echo "Couldn't remove ${dir}.  Skipping."
Jeremy Cline 0310b31
	else
Jeremy Cline 0310b31
		grep -e "${dir}/" ${filelist} >> k-d.list
Jeremy Cline 0310b31
		mv ${filelist}.tmp $filelist
Jeremy Cline 0310b31
	fi
923f6ac
Jeremy Cline 0310b31
	return 0
Jeremy Cline 0310b31
}
Jeremy Cline 0310b31
Jeremy Cline 0310b31
filter_ko() {
Jeremy Cline 0310b31
	filelist=$1
Jeremy Cline 0310b31
	mod=$2
Jeremy Cline 0310b31
Jeremy Cline 0310b31
	grep -v -e "${mod}.ko" ${filelist} > ${filelist}.tmp
Jeremy Cline 0310b31
Jeremy Cline 0310b31
	if [ $? -ne 0 ]
Jeremy Cline 0310b31
	then
Jeremy Cline 0310b31
		echo "Couldn't remove ${mod}.ko  Skipping."
Jeremy Cline 0310b31
	else
Jeremy Cline 0310b31
		grep -e "${mod}.ko" ${filelist} >> k-d.list
Jeremy Cline 0310b31
		mv ${filelist}.tmp $filelist
Jeremy Cline 0310b31
	fi
923f6ac
Jeremy Cline 0310b31
	return 0
Jeremy Cline 0310b31
}
Jeremy Cline 0310b31
Jeremy Cline 0310b31
# Filter the drivers/ subsystems
Jeremy Cline 0310b31
for subsys in ${driverdirs}
Jeremy Cline 0310b31
do
Jeremy Cline 0310b31
	filter_dir $1 drivers/${subsys}
Jeremy Cline 0310b31
done
Jeremy Cline 0310b31
Jeremy Cline 0310b31
# Filter the networking drivers
Jeremy Cline 0310b31
for netdrv in ${netdrvs}
Jeremy Cline 0310b31
do
Jeremy Cline 0310b31
	filter_dir $1 drivers/net/${netdrv}
Jeremy Cline 0310b31
done
Jeremy Cline 0310b31
Jeremy Cline 0310b31
# Filter the char drivers
Jeremy Cline 0310b31
for char in ${chardrvs}
Jeremy Cline 0310b31
do
458d73d
	filter_dir $1 drivers/char/${char}
Jeremy Cline 0310b31
done
Jeremy Cline 0310b31
Jeremy Cline 0310b31
# Filter the ethernet drivers
Jeremy Cline 0310b31
for eth in ${ethdrvs}
Jeremy Cline 0310b31
do
Jeremy Cline 0310b31
	filter_dir $1 drivers/net/ethernet/${eth}
Jeremy Cline 0310b31
done
Jeremy Cline 0310b31
5d333e1
# Filter the crypto drivers
5d333e1
for crypt in ${cryptdrvs}
5d333e1
do
5d333e1
	filter_dir $1 drivers/crypto/${crypt}
5d333e1
done
5d333e1
Jeremy Cline 0310b31
# SCSI
Jeremy Cline 0310b31
for scsi in ${scsidrvs}
Jeremy Cline 0310b31
do
Jeremy Cline 0310b31
	filter_dir $1 drivers/scsi/${scsi}
Jeremy Cline 0310b31
done
Jeremy Cline 0310b31
Jeremy Cline 0310b31
# Input
Jeremy Cline 0310b31
for input in ${inputdrvs}
Jeremy Cline 0310b31
do
Jeremy Cline 0310b31
	filter_dir $1 drivers/input/${input}
Jeremy Cline 0310b31
done
Jeremy Cline 0310b31
Jeremy Cline 0310b31
# USB
Jeremy Cline 0310b31
for usb in ${usbdrvs}
Jeremy Cline 0310b31
do
Jeremy Cline 0310b31
	filter_dir $1 drivers/usb/${usb}
Jeremy Cline 0310b31
done
Jeremy Cline 0310b31
Jeremy Cline 0310b31
# Filesystems
Jeremy Cline 0310b31
for fs in ${fsdrvs}
Jeremy Cline 0310b31
do
Jeremy Cline 0310b31
	filter_dir $1 fs/${fs}
Jeremy Cline 0310b31
done
Jeremy Cline 0310b31
Jeremy Cline 0310b31
# Network protocols
Jeremy Cline 0310b31
for prot in ${netprots}
Jeremy Cline 0310b31
do
Jeremy Cline 0310b31
	filter_dir $1 kernel/net/${prot}
Jeremy Cline 0310b31
done
Jeremy Cline 0310b31
Jeremy Cline 0310b31
# DRM
Jeremy Cline 0310b31
for drm in ${drmdrvs}
Jeremy Cline 0310b31
do
Jeremy Cline 0310b31
	filter_dir $1 drivers/gpu/drm/${drm}
Jeremy Cline 0310b31
done
Jeremy Cline 0310b31
Jeremy Cline 0310b31
# Just kill sound.
Jeremy Cline 0310b31
filter_dir $1 kernel/sound
6d4d829
filter_dir $1 kernel/drivers/soundwire
Jeremy Cline 0310b31
Jeremy Cline 0310b31
# Now go through and filter any single .ko files that might have deps on the
Jeremy Cline 0310b31
# things we filtered above
Jeremy Cline 0310b31
for mod in ${singlemods}
Jeremy Cline 0310b31
do
Jeremy Cline 0310b31
        filter_ko $1 ${mod}
Jeremy Cline 0310b31
done
Jeremy Cline 0310b31
6c2cc50
# Now process the override list to bring those modules back into core
6c2cc50
for mod in ${overrides}
6c2cc50
do
6c2cc50
	grep -v -e "/${mod}.ko" k-d.list > k-d.list.tmp
6c2cc50
	if [ $? -ne 0 ]
6c2cc50
        then
6c2cc50
                echo "Couldn't save ${mod}.ko  Skipping."
6c2cc50
        else
6c2cc50
                grep -e "/${mod}.ko" k-d.list >> $filelist
6c2cc50
                mv k-d.list.tmp k-d.list
6c2cc50
        fi
6c2cc50
6c2cc50
done
6c2cc50
Jeremy Cline 0310b31
# Go through our generated drivers list and remove the .ko files.  We'll
Jeremy Cline 0310b31
# restore them later.
Jeremy Cline 0310b31
for mod in `cat k-d.list`
Jeremy Cline 0310b31
do
Jeremy Cline 0310b31
	rm -rf $mod
Jeremy Cline 0310b31
done