initial commit
This commit is contained in:
commit
8a187e29d3
127
phy-mkinitrd.sh
Executable file
127
phy-mkinitrd.sh
Executable file
@ -0,0 +1,127 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copyright (c) 2012 NTT DOCOMO, INC.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
if [ $# -lt 2 ]; then
|
||||||
|
cat <<EOF
|
||||||
|
usage: $0 OUTFILE KERNEL_VERSION [MODULE_ROOT]
|
||||||
|
EOF
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
BUSYBOX=${BUSYBOX:-$(which busybox)}
|
||||||
|
if [ -z "$BUSYBOX" ]; then
|
||||||
|
echo "busybox is not found in PATH" 1>&2
|
||||||
|
echo "Please set environment variable BUSYBOX to path to busybox executable" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
function fullpath() {
|
||||||
|
local f=$1
|
||||||
|
if [ "${f#/}" = "$f" ]; then
|
||||||
|
echo `pwd`/"$f"
|
||||||
|
else
|
||||||
|
echo "$f"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
DIR=`dirname "$0"`
|
||||||
|
INIT="$DIR/scripts/init"
|
||||||
|
FUNCTIONS_D="$DIR/scripts/d"
|
||||||
|
LIB_UDEV="$DIR/udev"
|
||||||
|
|
||||||
|
DEST=`fullpath "$1"`
|
||||||
|
KERNEL_VERSION=$2
|
||||||
|
MODULE_ROOT=${3:-""}
|
||||||
|
MODULE_DIR=$MODULE_ROOT/lib/modules/$KERNEL_VERSION
|
||||||
|
FIRMWARE_DIR=$MODULE_ROOT/lib/firmware
|
||||||
|
|
||||||
|
if [ ! -d "$MODULE_DIR" ]; then
|
||||||
|
echo "ERROR: kernel module directory not found at $MODULE_DIR"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
INITRD_DIR=`mktemp -t -d phy-mkinitrd.XXXXXXXX`
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
function cleanup() {
|
||||||
|
rm -r "$INITRD_DIR"
|
||||||
|
}
|
||||||
|
trap cleanup EXIT
|
||||||
|
echo "working in $INITRD_DIR"
|
||||||
|
|
||||||
|
mkdir -p "$INITRD_DIR/bin"
|
||||||
|
ln -s bin "$INITRD_DIR/sbin"
|
||||||
|
mkdir -p "$INITRD_DIR/lib"
|
||||||
|
ln -s lib "$INITRD_DIR/lib64"
|
||||||
|
mkdir -p "$INITRD_DIR/lib/modules"
|
||||||
|
mkdir -p "$INITRD_DIR/etc"
|
||||||
|
mkdir -p "$INITRD_DIR/etc/udev"
|
||||||
|
|
||||||
|
cp -a "$LIB_UDEV" "$INITRD_DIR/lib/udev"
|
||||||
|
|
||||||
|
mkdir -p "$INITRD_DIR/etc/modprobe.d"
|
||||||
|
echo "blacklist evbug" > "$INITRD_DIR/etc/modprobe.d/blacklist.conf"
|
||||||
|
|
||||||
|
mkdir -p "$INITRD_DIR/etc/udev"
|
||||||
|
cat >"$INITRD_DIR/etc/udev/udev.conf" <<EOF
|
||||||
|
udev_root="/dev"
|
||||||
|
udev_rules="/lib/udev/rules.d"
|
||||||
|
udev_log="info"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
libs=
|
||||||
|
for i in "$BUSYBOX" bash modprobe udevd udevadm wget tgtd tgtadm reboot shutdown; do
|
||||||
|
if "$BUSYBOX" --list | grep "^$i\$" >/dev/null; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
path=`which $i 2>/dev/null` || path=$i
|
||||||
|
if ! [ -x "$path" ]; then
|
||||||
|
echo "$i is not found in PATH" 2>&1
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
cp -L "$path" "$INITRD_DIR/bin/"
|
||||||
|
if l=`ldd "$path"`; then
|
||||||
|
l=$( echo "$l" | grep '/' | tr "\t" " " )
|
||||||
|
l=$( echo "$l" | sed 's/^.* => \([^ ]*\).*$/\1/' )
|
||||||
|
l=$( echo "$l" | sed 's/^ *\([^ ]*\) *(0x[0-9a-f]*)/\1/' )
|
||||||
|
l=$( echo "$l" | tr " " "\n" )
|
||||||
|
libs=$( printf "%s\n%s\n" "$l" "$libs" | sort | uniq )
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
cp $libs "$INITRD_DIR/lib/"
|
||||||
|
|
||||||
|
for i in $( "$BUSYBOX" --list ); do
|
||||||
|
if [ -f "$INITRD_DIR/bin/$i" ]; then
|
||||||
|
echo "skip $i"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
ln -s busybox "$INITRD_DIR/bin/$i"
|
||||||
|
done
|
||||||
|
|
||||||
|
cp -a "$MODULE_DIR" "$INITRD_DIR/lib/modules/$KERNEL_VERSION"
|
||||||
|
|
||||||
|
cp -a "$FIRMWARE_DIR" "$INITRD_DIR/lib/firmware"
|
||||||
|
|
||||||
|
cp "$INIT" "$INITRD_DIR/init"
|
||||||
|
chmod +x $INITRD_DIR/init
|
||||||
|
for F in "$FUNCTIONS_D"/* ; do
|
||||||
|
cp "$F" "$INITRD_DIR"
|
||||||
|
done
|
||||||
|
|
||||||
|
(cd "$INITRD_DIR"; find . | cpio -o -H newc | gzip > "$DEST" )
|
||||||
|
|
179
scripts/d/init-func
Executable file
179
scripts/d/init-func
Executable file
@ -0,0 +1,179 @@
|
|||||||
|
# Copyright (c) 2012 NTT DOCOMO, INC.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
function get_kernel_parameter() {
|
||||||
|
local name=$1
|
||||||
|
for i in `cat /proc/cmdline`; do
|
||||||
|
case "$i" in
|
||||||
|
${name}=*)
|
||||||
|
echo "${i#${name}=}"
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
${name})
|
||||||
|
echo ""
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function load_modules_by_udev() {
|
||||||
|
depmod
|
||||||
|
udevadm trigger --action=add
|
||||||
|
udevadm settle
|
||||||
|
}
|
||||||
|
|
||||||
|
function strip_dev() {
|
||||||
|
echo "$1" | sed -e 's:^/dev/::'
|
||||||
|
}
|
||||||
|
|
||||||
|
function prepend_dev() {
|
||||||
|
case "$1" in
|
||||||
|
/dev/*)
|
||||||
|
echo "$1"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "/dev/$1"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
function whole_disk_name() {
|
||||||
|
local dev=`prepend_dev "$1"`
|
||||||
|
case "$dev" in
|
||||||
|
/dev/sd*|/dev/hd*)
|
||||||
|
echo "$dev" | sed -e 's/[0-9]*$//'
|
||||||
|
;;
|
||||||
|
/dev/cciss/*)
|
||||||
|
echo "$dev" | sed -e 's/p[0-9]*$//'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo ""
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
function partition_name() {
|
||||||
|
local dev=`prepend_dev "$1"`
|
||||||
|
local part=$2
|
||||||
|
case "$dev" in
|
||||||
|
/dev/sd*|/dev/hd*)
|
||||||
|
echo "${dev}${part}"
|
||||||
|
;;
|
||||||
|
/dev/cciss/*)
|
||||||
|
echo "${dev}p${part}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo ""
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
function find_interface() {
|
||||||
|
local mac=$1
|
||||||
|
eth=`ifconfig -a | grep -i "$mac" | awk {' print $1 '} | head -n 1`
|
||||||
|
if [ -n "$eth" ]; then
|
||||||
|
echo "$eth"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function set_mac() {
|
||||||
|
local dev=$1
|
||||||
|
local mac=$2
|
||||||
|
ip link set "$dev" address "$mac"
|
||||||
|
}
|
||||||
|
|
||||||
|
function swap_ifname() {
|
||||||
|
local dev=$1
|
||||||
|
local dev2=$2
|
||||||
|
if [ "$dev" = "$dev2" ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
if ip link show "$dev2" >/dev/null; then
|
||||||
|
# dev2 exists
|
||||||
|
# swap device name
|
||||||
|
ip link set "$dev" name "_$dev"
|
||||||
|
ip link set "$dev2" name "$dev"
|
||||||
|
ip link set "_$dev" name "$dev2"
|
||||||
|
else
|
||||||
|
ip link set "$dev" name "$dev2"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function partition_exists() {
|
||||||
|
local dev=$1
|
||||||
|
dev=`strip_dev "$dev"`
|
||||||
|
if tail -n +3 /proc/partitions | grep "$dev" >/dev/null; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function find_disk() {
|
||||||
|
local disks=$1
|
||||||
|
local dev
|
||||||
|
|
||||||
|
# find device
|
||||||
|
local OLD_IFS=$IFS
|
||||||
|
IFS=,
|
||||||
|
for i in $disks; do
|
||||||
|
dev=`whole_disk_name "$i"`
|
||||||
|
if partition_exists "$dev"; then
|
||||||
|
dev=`prepend_dev "$dev"`
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
dev=""
|
||||||
|
done
|
||||||
|
IFS=$OLD_IFS
|
||||||
|
|
||||||
|
if [ -z "$dev" ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
echo "$dev"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function start_iscsi_target() {
|
||||||
|
local iqn=$1
|
||||||
|
local dev=$2
|
||||||
|
local cli=$3
|
||||||
|
|
||||||
|
# used by tgtd
|
||||||
|
mkdir -p /var/run
|
||||||
|
|
||||||
|
tgtd
|
||||||
|
|
||||||
|
tgtadm --lld iscsi --mode target --op new --tid 1 --targetname "$iqn"
|
||||||
|
tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 --backing-store "$dev"
|
||||||
|
tgtadm --lld iscsi --mode target --op bind --tid 1 --initiator-address "$cli"
|
||||||
|
}
|
||||||
|
|
||||||
|
function stop_iscsi_target() {
|
||||||
|
tgtadm --lld iscsi --mode logicalunit --op delete --tid 1 --lun 1
|
||||||
|
tgtadm --lld iscsi --mode target --op delete --tid 1
|
||||||
|
killall tgtd
|
||||||
|
}
|
||||||
|
|
||||||
|
|
157
scripts/init
Normal file
157
scripts/init
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copyright (c) 2012 NTT DOCOMO, INC.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
echo "init"
|
||||||
|
|
||||||
|
source /init-func
|
||||||
|
|
||||||
|
PATH=/sbin:/bin:/usr/bin:/usr/sbin
|
||||||
|
export PATH
|
||||||
|
|
||||||
|
mkdir -p /proc
|
||||||
|
mkdir -p /sys
|
||||||
|
mkdir -p /dev
|
||||||
|
mkdir -p /boot
|
||||||
|
mkdir -p /etc
|
||||||
|
mkdir -p /mnt
|
||||||
|
mkdir -p /lib/modules
|
||||||
|
|
||||||
|
mount -t proc proc /proc
|
||||||
|
|
||||||
|
readonly _BOOTIF_=$(get_kernel_parameter BOOTIF)
|
||||||
|
readonly _IP_=$(get_kernel_parameter ip)
|
||||||
|
readonly BOOT_MAC_ADDRESS=$(echo "$_BOOTIF_" | sed -e "s/-/:/g" | sed -e "s/^01://g" | tr 'a-f' 'A-F')
|
||||||
|
readonly BOOT_IP_ADDRESS=$(echo "$_IP_" | cut -d':' -f1)
|
||||||
|
readonly BOOT_SERVER=$(echo "$_IP_" | cut -d':' -f2)
|
||||||
|
readonly BOOT_NETMASK=$(echo "$_IP_" | cut -d':' -f4)
|
||||||
|
|
||||||
|
readonly DISK=$(get_kernel_parameter disk)
|
||||||
|
|
||||||
|
readonly DEPLOYMENT_ID=$(get_kernel_parameter deployment_id)
|
||||||
|
readonly DEPLOYMENT_KEY=$(get_kernel_parameter deployment_key)
|
||||||
|
readonly ISCSI_TARGET_IQN=$(get_kernel_parameter iscsi_target_iqn)
|
||||||
|
|
||||||
|
if [ -z "$ISCSI_TARGET_IQN" ]; then
|
||||||
|
echo "iscsi_target_iqn is not defined"
|
||||||
|
echo "Starting troubleshooting shell."
|
||||||
|
bash
|
||||||
|
fi
|
||||||
|
|
||||||
|
mount -t sysfs none /sys
|
||||||
|
mount -t tmpfs none /dev
|
||||||
|
ln -sf /proc/self/fd /dev/fd
|
||||||
|
mknod /dev/null c 1 3
|
||||||
|
mknod /dev/zero c 1 5
|
||||||
|
mknod /dev/random c 1 8
|
||||||
|
mknod /dev/urandom c 1 9
|
||||||
|
mknod /dev/tty0 c 4 0
|
||||||
|
mknod /dev/tty1 c 4 1
|
||||||
|
mknod /dev/tty2 c 4 2
|
||||||
|
mknod /dev/tty3 c 4 3
|
||||||
|
mknod /dev/tty4 c 4 4
|
||||||
|
mknod /dev/tty5 c 4 5
|
||||||
|
mknod /dev/tty6 c 4 6
|
||||||
|
mknod /dev/tty7 c 4 7
|
||||||
|
mknod /dev/tty8 c 4 8
|
||||||
|
mknod /dev/tty9 c 4 9
|
||||||
|
mknod /dev/tty c 5 0
|
||||||
|
mknod -m 0600 /dev/console c 5 1
|
||||||
|
mknod -m 0666 /dev/ptmx c 5 2
|
||||||
|
mkdir -p /dev/.udev
|
||||||
|
mkdir -p /dev/.udev/data
|
||||||
|
|
||||||
|
echo "starting syslogd"
|
||||||
|
|
||||||
|
echo '*.* /initlog' > /etc/syslog.conf
|
||||||
|
syslogd
|
||||||
|
klogd
|
||||||
|
|
||||||
|
echo "starting udevd"
|
||||||
|
udevd --daemon --resolve-names=never
|
||||||
|
|
||||||
|
echo "load modules"
|
||||||
|
load_modules_by_udev
|
||||||
|
|
||||||
|
echo "starting network $BOOT_MAC_ADDRESS"
|
||||||
|
t=0
|
||||||
|
while ! BOOT_INTERFACE=$(find_interface "$BOOT_MAC_ADDRESS"); do
|
||||||
|
t=`expr "$t" + 5`
|
||||||
|
if [ "$t" -gt 10 ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
if [ -z "$BOOT_INTERFACE" ]; then
|
||||||
|
echo "could not find an interface owns MAC=$BOOT_MAC_ADDRESS"
|
||||||
|
echo "Starting troubleshooting shell."
|
||||||
|
bash
|
||||||
|
fi
|
||||||
|
|
||||||
|
readonly BOOT_INTERFACE
|
||||||
|
|
||||||
|
ifconfig lo 127.0.0.1 up
|
||||||
|
ifconfig "$BOOT_INTERFACE" up
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
sleep 10
|
||||||
|
ifconfig "$BOOT_INTERFACE" up
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Failed to up $BOOT_INTERFACE"
|
||||||
|
echo "Starting troubleshooting shell."
|
||||||
|
bash
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
ifconfig "$BOOT_INTERFACE" "$BOOT_IP_ADDRESS" netmask "$BOOT_NETMASK"
|
||||||
|
|
||||||
|
echo "pinging to boot server $BOOT_SERVER"
|
||||||
|
w=30
|
||||||
|
while [ $w -gt 0 ]; do
|
||||||
|
ping -c 5 -q "$BOOT_SERVER" > /dev/null
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
w=`expr $w - 5`
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "network ready"
|
||||||
|
|
||||||
|
target_disk=`find_disk "$DISK"`
|
||||||
|
echo "start iSCSI target on $target_disk"
|
||||||
|
start_iscsi_target "$ISCSI_TARGET_IQN" "$target_disk" ALL
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Could not find disk to use."
|
||||||
|
echo "Starting troubleshooting shell."
|
||||||
|
bash
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "request boot server to deploy image"
|
||||||
|
d="i=$DEPLOYMENT_ID&k=$DEPLOYMENT_KEY&a=$BOOT_IP_ADDRESS&n=$ISCSI_TARGET_IQN"
|
||||||
|
wget --post-data "$d" "http://$BOOT_SERVER:10000"
|
||||||
|
|
||||||
|
echo "waiting for notice of complete"
|
||||||
|
nc -l -p 10000
|
||||||
|
|
||||||
|
echo "stop iSCSI target on $target_disk"
|
||||||
|
|
||||||
|
stop_iscsi_target
|
||||||
|
|
||||||
|
echo "rebooting"
|
||||||
|
reboot -f
|
||||||
|
|
||||||
|
echo "failed to reboot"
|
||||||
|
echo "Starting troubleshooting shell."
|
||||||
|
bash
|
30
udev/firmware.sh
Executable file
30
udev/firmware.sh
Executable file
@ -0,0 +1,30 @@
|
|||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
FIRMWARE_DIRS="/lib/firmware/updates/$(uname -r) /lib/firmware/updates \
|
||||||
|
/lib/firmware/$(uname -r) /lib/firmware"
|
||||||
|
|
||||||
|
err() {
|
||||||
|
echo "$@" >&2
|
||||||
|
logger -t "${0##*/}[$$]" "$@" 2>/dev/null || true
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ ! -e /sys$DEVPATH/loading ]; then
|
||||||
|
err "udev firmware loader misses sysfs directory"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for DIR in $FIRMWARE_DIRS; do
|
||||||
|
[ -e "$DIR/$FIRMWARE" ] || continue
|
||||||
|
echo 1 > /sys$DEVPATH/loading
|
||||||
|
cat "$DIR/$FIRMWARE" > /sys$DEVPATH/data
|
||||||
|
echo 0 > /sys$DEVPATH/loading
|
||||||
|
exit 0
|
||||||
|
done
|
||||||
|
|
||||||
|
echo -1 > /sys$DEVPATH/loading
|
||||||
|
err "Cannot find firmware file '$FIRMWARE'"
|
||||||
|
mkdir -p /dev/.udev/firmware-missing
|
||||||
|
file=$(echo "$FIRMWARE" | sed 's:/:\\x2f:g')
|
||||||
|
ln -s -f "$DEVPATH" /dev/.udev/firmware-missing/$file
|
||||||
|
exit 1
|
||||||
|
|
1
udev/rules.d/50-firmware.rules
Normal file
1
udev/rules.d/50-firmware.rules
Normal file
@ -0,0 +1 @@
|
|||||||
|
SUBSYSTEM=="firmware", ACTION=="add", RUN+="firmware.sh"
|
11
udev/rules.d/80-drivers.rules
Normal file
11
udev/rules.d/80-drivers.rules
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
ACTION!="add", GOTO="drivers_end"
|
||||||
|
|
||||||
|
DRIVER!="?*", ENV{MODALIAS}=="?*", RUN+="/sbin/modprobe $env{MODALIAS}"
|
||||||
|
SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN+="/sbin/modprobe tifm_sd"
|
||||||
|
SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN+="/sbin/modprobe tifm_ms"
|
||||||
|
SUBSYSTEM=="memstick", RUN+="/sbin/modprobe --all ms_block mspro_block"
|
||||||
|
SUBSYSTEM=="i2o", RUN+="/sbin/modprobe i2o_block"
|
||||||
|
SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", RUN+="/sbin/modprobe sg"
|
||||||
|
SUBSYSTEM=="module", KERNEL=="parport_pc", RUN+="/sbin/modprobe ppdev"
|
||||||
|
|
||||||
|
LABEL="drivers_end"
|
Loading…
Reference in New Issue
Block a user