1#!/bin/sh 2 3# Copyright (c) 2018 M. Warner Losh <imp@FreeBSD.org> 4# 5# Redistribution and use in source and binary forms, with or without 6# modification, are permitted provided that the following conditions 7# are met: 8# 1. Redistributions of source code must retain the above copyright 9# notice, this list of conditions and the following disclaimer. 10# 2. Redistributions in binary form must reproduce the above copyright 11# notice, this list of conditions and the following disclaimer in the 12# documentation and/or other materials provided with the distribution. 13# 14# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24# SUCH DAMAGE. 25# 26# $FreeBSD$ 27# 28# PROVIDE: devmatch 29# REQUIRE: kldxref 30# BEFORE: netif 31# KEYWORD: nojail 32 33. /etc/rc.subr 34 35name="devmatch" 36desc="Use devmatch(8) to load kernel modules" 37rcvar="${name}_enable" 38 39start_cmd="${name}_start" 40stop_cmd=':' 41one_nomatch="$2" 42 43devmatch_start() 44{ 45 local x m list 46 47 if [ -n "$one_nomatch" ]; then 48 list=$(devmatch -p "${one_nomatch}" | sort -u) 49 else 50 list=$(devmatch | sort -u) 51 fi 52 53 [ -n "$list" ] || return 54 55 # While kldload can accept multiple modules 56 # on the line at once, we loop here in case 57 # there's some weird error with one of them. 58 # We also optimize against the false positives 59 # or drivers that have symbolic links that 60 # confuse devmatch by running it -n. 61 # Finally, we filter out all items in the 62 # devmactch_blacklist. 63 devctl freeze 64 x=$(echo ${devmatch_blacklist} | tr ' ' '#') 65 for m in ${list}; do 66 case "#${x}#" in 67 *"#${m}#"*) continue ;; 68 esac 69 echo "Autoloading module: ${m}" 70 kldload -n ${m} 71 done 72 devctl thaw 73} 74 75load_rc_config $name 76run_rc_command "$1" 77