Jeremy Cline cce01a3
#! /bin/bash
Jeremy Cline cce01a3
#
Jeremy Cline cce01a3
# Called as filter-modules.sh list-of-modules Arch
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# This script filters the modules into the kernel-core and kernel-modules
Jeremy Cline cce01a3
# subpackages.  We list out subsystems/subdirs to prune from the installed
Jeremy Cline cce01a3
# module directory.  What is left is put into the kernel-core package.  What is
Jeremy Cline cce01a3
# pruned is contained in the kernel-modules package.
Jeremy Cline cce01a3
#
Jeremy Cline cce01a3
# This file contains the default subsys/subdirs to prune from all architectures.
Jeremy Cline cce01a3
# If an architecture needs to differ, we source a per-arch filter-<arch>.sh file
Jeremy Cline cce01a3
# that contains the set of override lists to be used instead.  If a module or
Jeremy Cline cce01a3
# subsys should be in kernel-modules on all arches, please change the defaults
Jeremy Cline cce01a3
# listed here.
Jeremy Cline cce01a3
614b7d7
# Overrides is individual modules which need to remain in kernel-core due to deps.
614b7d7
overrides="cec"
614b7d7
Jeremy Cline cce01a3
# Set the default dirs/modules to filter out
Jeremy Cline cce01a3
driverdirs="atm auxdisplay bcma bluetooth firewire fmc fpga infiniband isdn leds media memstick mfd mmc mtd nfc ntb pcmcia platform power ssb soundwire staging tty uio uwb w1"
Jeremy Cline cce01a3
Jeremy Cline cce01a3
chardrvs="mwave pcmcia"
Jeremy Cline cce01a3
Jeremy Cline cce01a3
netdrvs="appletalk can dsa hamradio ieee802154 irda ppp slip usb wireless"
Jeremy Cline cce01a3
Jeremy Cline cce01a3
ethdrvs="3com adaptec alteon amd aquantia atheros broadcom cadence calxeda chelsio cisco dec dlink emulex icplus marvell mellanox neterion nvidia oki-semi packetengines qlogic rdc renesas sfc silan sis smsc stmicro sun tehuti ti wiznet xircom"
Jeremy Cline cce01a3
Jeremy Cline cce01a3
inputdrvs="gameport tablet touchscreen"
Jeremy Cline cce01a3
Jeremy Cline cce01a3
scsidrvs="aacraid advansys aic7xxx aic94xx be2iscsi bfa bnx2i bnx2fc csiostor cxgbi esas2r fcoe fnic isci libsas lpfc megaraid mpt2sas mpt3sas mvsas pm8001 qla2xxx qla4xxx sym53c8xx_2 ufs qedf wd719x"
Jeremy Cline cce01a3
Jeremy Cline cce01a3
usbdrvs="atm image misc serial wusbcore"
Jeremy Cline cce01a3
Jeremy Cline cce01a3
fsdrvs="affs befs coda cramfs dlm ecryptfs hfs hfsplus jfs jffs2 minix ncpfs nilfs2 ocfs2 reiserfs romfs squashfs sysv ubifs ufs"
Jeremy Cline cce01a3
Jeremy Cline cce01a3
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 cce01a3
Jeremy Cline cce01a3
drmdrvs="amd ast bridge gma500 i2c i915 mgag200 nouveau panel radeon"
Jeremy Cline cce01a3
Jeremy Cline cce01a3
iiodrvs="accel adc afe common dac gyro health humidity light magnetometer multiplexer orientation potentiometer potentiostat pressure temperature"
Jeremy Cline cce01a3
Jeremy Cline cce01a3
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 target_core_user sbp_target cxgbit iw_cxgb3 iw_cxgb4 cxgb3i cxgb3i cxgb3i_ddp cxgb4i chcr chtls parport_serial regmap-sdw hid-asus"
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# Grab the arch-specific filter list overrides
Jeremy Cline cce01a3
source ./filter-$2.sh
Jeremy Cline cce01a3
Jeremy Cline cce01a3
filter_dir() {
Jeremy Cline cce01a3
	filelist=$1
Jeremy Cline cce01a3
	dir=$2
Jeremy Cline cce01a3
Jeremy Cline cce01a3
	grep -v -e "${dir}/" ${filelist} > ${filelist}.tmp
Jeremy Cline cce01a3
Jeremy Cline cce01a3
	if [ $? -ne 0 ]
Jeremy Cline cce01a3
	then
Jeremy Cline cce01a3
		echo "Couldn't remove ${dir}.  Skipping."
Jeremy Cline cce01a3
	else
Jeremy Cline cce01a3
		grep -e "${dir}/" ${filelist} >> k-d.list
Jeremy Cline cce01a3
		mv ${filelist}.tmp $filelist
Jeremy Cline cce01a3
	fi
Jeremy Cline cce01a3
	
Jeremy Cline cce01a3
	return 0
Jeremy Cline cce01a3
}
Jeremy Cline cce01a3
Jeremy Cline cce01a3
filter_ko() {
Jeremy Cline cce01a3
	filelist=$1
Jeremy Cline cce01a3
	mod=$2
Jeremy Cline cce01a3
Jeremy Cline cce01a3
	grep -v -e "${mod}.ko" ${filelist} > ${filelist}.tmp
Jeremy Cline cce01a3
Jeremy Cline cce01a3
	if [ $? -ne 0 ]
Jeremy Cline cce01a3
	then
Jeremy Cline cce01a3
		echo "Couldn't remove ${mod}.ko  Skipping."
Jeremy Cline cce01a3
	else
Jeremy Cline cce01a3
		grep -e "${mod}.ko" ${filelist} >> k-d.list
Jeremy Cline cce01a3
		mv ${filelist}.tmp $filelist
Jeremy Cline cce01a3
	fi
Jeremy Cline cce01a3
	
Jeremy Cline cce01a3
	return 0
Jeremy Cline cce01a3
}
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# Filter the drivers/ subsystems
Jeremy Cline cce01a3
for subsys in ${driverdirs}
Jeremy Cline cce01a3
do
Jeremy Cline cce01a3
	filter_dir $1 drivers/${subsys}
Jeremy Cline cce01a3
done
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# Filter the networking drivers
Jeremy Cline cce01a3
for netdrv in ${netdrvs}
Jeremy Cline cce01a3
do
Jeremy Cline cce01a3
	filter_dir $1 drivers/net/${netdrv}
Jeremy Cline cce01a3
done
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# Filter the char drivers
Jeremy Cline cce01a3
for char in ${chardrvs}
Jeremy Cline cce01a3
do
Jeremy Cline cce01a3
	filter_dir $1 drivers/char/${input}
Jeremy Cline cce01a3
done
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# Filter the ethernet drivers
Jeremy Cline cce01a3
for eth in ${ethdrvs}
Jeremy Cline cce01a3
do
Jeremy Cline cce01a3
	filter_dir $1 drivers/net/ethernet/${eth}
Jeremy Cline cce01a3
done
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# SCSI
Jeremy Cline cce01a3
for scsi in ${scsidrvs}
Jeremy Cline cce01a3
do
Jeremy Cline cce01a3
	filter_dir $1 drivers/scsi/${scsi}
Jeremy Cline cce01a3
done
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# Input
Jeremy Cline cce01a3
for input in ${inputdrvs}
Jeremy Cline cce01a3
do
Jeremy Cline cce01a3
	filter_dir $1 drivers/input/${input}
Jeremy Cline cce01a3
done
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# USB
Jeremy Cline cce01a3
for usb in ${usbdrvs}
Jeremy Cline cce01a3
do
Jeremy Cline cce01a3
	filter_dir $1 drivers/usb/${usb}
Jeremy Cline cce01a3
done
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# Filesystems
Jeremy Cline cce01a3
for fs in ${fsdrvs}
Jeremy Cline cce01a3
do
Jeremy Cline cce01a3
	filter_dir $1 fs/${fs}
Jeremy Cline cce01a3
done
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# Network protocols
Jeremy Cline cce01a3
for prot in ${netprots}
Jeremy Cline cce01a3
do
Jeremy Cline cce01a3
	filter_dir $1 kernel/net/${prot}
Jeremy Cline cce01a3
done
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# DRM
Jeremy Cline cce01a3
for drm in ${drmdrvs}
Jeremy Cline cce01a3
do
Jeremy Cline cce01a3
	filter_dir $1 drivers/gpu/drm/${drm}
Jeremy Cline cce01a3
done
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# Just kill sound.
Jeremy Cline cce01a3
filter_dir $1 kernel/sound
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# Now go through and filter any single .ko files that might have deps on the
Jeremy Cline cce01a3
# things we filtered above
Jeremy Cline cce01a3
for mod in ${singlemods}
Jeremy Cline cce01a3
do
Jeremy Cline cce01a3
        filter_ko $1 ${mod}
Jeremy Cline cce01a3
done
Jeremy Cline cce01a3
614b7d7
# Now process the override list to bring those modules back into core
614b7d7
for mod in ${overrides}
614b7d7
do
614b7d7
	grep -v -e "/${mod}.ko" k-d.list > k-d.list.tmp
614b7d7
	if [ $? -ne 0 ]
614b7d7
        then
614b7d7
                echo "Couldn't save ${mod}.ko  Skipping."
614b7d7
        else
614b7d7
                grep -e "/${mod}.ko" k-d.list >> $filelist
614b7d7
                mv k-d.list.tmp k-d.list
614b7d7
        fi
614b7d7
614b7d7
done
614b7d7
Jeremy Cline cce01a3
# Go through our generated drivers list and remove the .ko files.  We'll
Jeremy Cline cce01a3
# restore them later.
Jeremy Cline cce01a3
for mod in `cat k-d.list`
Jeremy Cline cce01a3
do
Jeremy Cline cce01a3
	rm -rf $mod
Jeremy Cline cce01a3
done