d0a82f1
#! /bin/bash
d0a82f1
#
d0a82f1
# Called as filter-modules.sh list-of-modules Arch
d0a82f1
d0a82f1
# This script filters the modules into the kernel-core and kernel-modules
d0a82f1
# subpackages.  We list out subsystems/subdirs to prune from the installed
d0a82f1
# module directory.  What is left is put into the kernel-core package.  What is
d0a82f1
# pruned is contained in the kernel-modules package.
d0a82f1
#
d0a82f1
# This file contains the default subsys/subdirs to prune from all architectures.
d0a82f1
# If an architecture needs to differ, we source a per-arch filter-<arch>.sh file
d0a82f1
# that contains the set of override lists to be used instead.  If a module or
d0a82f1
# subsys should be in kernel-modules on all arches, please change the defaults
d0a82f1
# listed here.
d0a82f1
6c2cc50
# Overrides is individual modules which need to remain in kernel-core due to deps.
6c2cc50
overrides="cec"
6c2cc50
d0a82f1
# Set the default dirs/modules to filter out
458d73d
driverdirs="atm auxdisplay bcma bluetooth firewire fpga infiniband leds media memstick mfd mmc mtd nfc ntb pcmcia platform power ssb soundwire staging tty uio w1"
d0a82f1
d0a82f1
chardrvs="mwave pcmcia"
d0a82f1
458d73d
netdrvs="appletalk can dsa hamradio ieee802154 ppp slip usb wireless"
d0a82f1
458d73d
ethdrvs="3com adaptec alteon amd aquantia atheros broadcom cadence calxeda chelsio cisco dec dlink emulex marvell mellanox neterion nvidia packetengines qlogic rdc sfc silan sis smsc stmicro sun tehuti ti wiznet xircom"
d0a82f1
b2899c6
iiodrvs="accel light pressure proximity"
b2899c6
b2899c6
iiocommondrvs="cros_ec_sensors"
b2899c6
d0a82f1
inputdrvs="gameport tablet touchscreen"
d0a82f1
cbc42e1
hiddrvs="surface-hid"
cbc42e1
458d73d
scsidrvs="aacraid aic7xxx be2iscsi bfa bnx2i bnx2fc csiostor cxgbi esas2r fcoe fnic isci libsas lpfc megaraid mpt3sas mvsas pm8001 qla2xxx qla4xxx sym53c8xx_2 ufs qedf"
d0a82f1
458d73d
usbdrvs="atm image misc serial"
d0a82f1
458d73d
fsdrvs="affs befs coda cramfs dlm ecryptfs hfs hfsplus jfs jffs2 minix nilfs2 ocfs2 reiserfs romfs squashfs sysv ubifs ufs"
d0a82f1
458d73d
netprots="6lowpan appletalk atm ax25 batman-adv bluetooth can dsa ieee802154 l2tp mac80211 mac802154 mpls netrom nfc rds rfkill rose sctp smc wireless"
d0a82f1
d0a82f1
drmdrvs="amd ast bridge gma500 i2c i915 mgag200 nouveau panel radeon"
d0a82f1
2edca07
singlemods="ntb_netdev iscsi_ibft iscsi_boot_sysfs megaraid pmcraid qedi qla1280 9pnet_rdma rpcrdma nvmet-rdma nvme-rdma hid-picolcd hid-prodikeys hwpoison-inject target_core_user sbp_target cxgbit  chcr parport_serial regmap-sdw regmap-sdw-mbq arizona-micsupp hid-asus iTCO_wdt rnbd-client rnbd-server mlx5_vdpa spi-altera-dfl nct6775 hid-playstation hid-nintendo"
d0a82f1
d0a82f1
# Grab the arch-specific filter list overrides
d0a82f1
source ./filter-$2.sh
d0a82f1
d0a82f1
filter_dir() {
d0a82f1
	filelist=$1
d0a82f1
	dir=$2
d0a82f1
d0a82f1
	grep -v -e "${dir}/" ${filelist} > ${filelist}.tmp
d0a82f1
d0a82f1
	if [ $? -ne 0 ]
d0a82f1
	then
d0a82f1
		echo "Couldn't remove ${dir}.  Skipping."
d0a82f1
	else
d0a82f1
		grep -e "${dir}/" ${filelist} >> k-d.list
d0a82f1
		mv ${filelist}.tmp $filelist
d0a82f1
	fi
d0a82f1
	
d0a82f1
	return 0
d0a82f1
}
d0a82f1
d0a82f1
filter_ko() {
d0a82f1
	filelist=$1
d0a82f1
	mod=$2
d0a82f1
d0a82f1
	grep -v -e "${mod}.ko" ${filelist} > ${filelist}.tmp
d0a82f1
d0a82f1
	if [ $? -ne 0 ]
d0a82f1
	then
d0a82f1
		echo "Couldn't remove ${mod}.ko  Skipping."
d0a82f1
	else
d0a82f1
		grep -e "${mod}.ko" ${filelist} >> k-d.list
d0a82f1
		mv ${filelist}.tmp $filelist
d0a82f1
	fi
d0a82f1
	
d0a82f1
	return 0
d0a82f1
}
d0a82f1
d0a82f1
# Filter the drivers/ subsystems
d0a82f1
for subsys in ${driverdirs}
d0a82f1
do
d0a82f1
	filter_dir $1 drivers/${subsys}
d0a82f1
done
d0a82f1
d0a82f1
# Filter the networking drivers
d0a82f1
for netdrv in ${netdrvs}
d0a82f1
do
d0a82f1
	filter_dir $1 drivers/net/${netdrv}
d0a82f1
done
d0a82f1
d0a82f1
# Filter the char drivers
d0a82f1
for char in ${chardrvs}
d0a82f1
do
458d73d
	filter_dir $1 drivers/char/${char}
d0a82f1
done
d0a82f1
d0a82f1
# Filter the ethernet drivers
d0a82f1
for eth in ${ethdrvs}
d0a82f1
do
d0a82f1
	filter_dir $1 drivers/net/ethernet/${eth}
d0a82f1
done
d0a82f1
d0a82f1
# SCSI
d0a82f1
for scsi in ${scsidrvs}
d0a82f1
do
d0a82f1
	filter_dir $1 drivers/scsi/${scsi}
d0a82f1
done
d0a82f1
b2899c6
# IIO
b2899c6
for iio in ${iiodrvs}
b2899c6
do
b2899c6
        filter_dir $1 drivers/iio/${iio}
b2899c6
done
b2899c6
b2899c6
# IIO Common
b2899c6
for iio in ${iiocommondrvs}
b2899c6
do
b2899c6
        filter_dir $1 drivers/iio/common/${iio}
b2899c6
done
b2899c6
d0a82f1
# Input
d0a82f1
for input in ${inputdrvs}
d0a82f1
do
d0a82f1
	filter_dir $1 drivers/input/${input}
d0a82f1
done
cbc42e1
cbc42e1
# hid
cbc42e1
for hid in ${hiddrvs}
cbc42e1
do
cbc42e1
	filter_dir $1 drivers/hid/${hid}
cbc42e1
done
d0a82f1
d0a82f1
# USB
d0a82f1
for usb in ${usbdrvs}
d0a82f1
do
d0a82f1
	filter_dir $1 drivers/usb/${usb}
d0a82f1
done
d0a82f1
d0a82f1
# Filesystems
d0a82f1
for fs in ${fsdrvs}
d0a82f1
do
d0a82f1
	filter_dir $1 fs/${fs}
d0a82f1
done
d0a82f1
d0a82f1
# Network protocols
d0a82f1
for prot in ${netprots}
d0a82f1
do
d0a82f1
	filter_dir $1 kernel/net/${prot}
d0a82f1
done
d0a82f1
d0a82f1
# DRM
d0a82f1
for drm in ${drmdrvs}
d0a82f1
do
d0a82f1
	filter_dir $1 drivers/gpu/drm/${drm}
d0a82f1
done
d0a82f1
d0a82f1
# Just kill sound.
d0a82f1
filter_dir $1 kernel/sound
6d4d829
filter_dir $1 kernel/drivers/soundwire
d0a82f1
d0a82f1
# Now go through and filter any single .ko files that might have deps on the
d0a82f1
# things we filtered above
d0a82f1
for mod in ${singlemods}
d0a82f1
do
d0a82f1
        filter_ko $1 ${mod}
d0a82f1
done
d0a82f1
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
d0a82f1
# Go through our generated drivers list and remove the .ko files.  We'll
d0a82f1
# restore them later.
d0a82f1
for mod in `cat k-d.list`
d0a82f1
do
d0a82f1
	rm -rf $mod
d0a82f1
done