#!/bin/sh . /etc/initrd.d/00-common.sh is_udev() { [ -x "${UDEVD}" ] && [ -z "${USE_MDEV}" ] && return 0 return 1 } is_mdev() { if [ ! -x "${UDEVD}" ] || [ -n "${USE_MDEV}" ]; then return 0 fi return 1 } devmgr_init() { if is_udev; then good_msg "Activating udev" "${UDEVD}" --daemon --resolve-names=never && \ udevadm trigger --action=add && \ udevadm settle || bad_msg "udevd failed to run" elif is_mdev; then good_msg "Activating mdev" # Ensure that device nodes are properly configured "${MDEVD}" -s || bad_msg "mdev -s failed" else bad_msg "Cannot find either udev or mdev" fi } # Terminate the device manager, this happens right before pivot_root devmgr_terminate() { if is_udev; then udevadm settle udevadm control --exit || bad_msg "Unable to terminate udevd" fi # mdev doesn't require anything, it seems } _fs_type_in_use() { local fs_type=${1} cut -d " " -f 3 < /proc/mounts | fgrep -q "${fs_type}" } mount_devfs() { # Use devtmpfs if enabled in kernel, # else tmpfs. Always run mdev just in case local devfs=tmpfs if grep -qs devtmpfs /proc/filesystems ; then devfs=devtmpfs fi # Options copied from /etc/init.d/udev-mount # should probably be kept in sync if ! _fs_type_in_use devtmpfs; then mount -t "${devfs}" -o "exec,nosuid,mode=0755,size=10M" \ udev /dev || bad_msg "Failed to mount /dev as ${devfs}" fi # http://git.busybox.net/busybox/plain/docs/mdev.txt if ! _fs_type_in_use devpts; then mkdir -m 0755 /dev/pts mount -t devpts -o gid=5,mode=0620 devpts /dev/pts \ || bad_msg "Failed to mount /dev/pts" fi mkdir -p -m 1777 /dev/shm mount -t tmpfs -o mode=1777,nosuid,nodev,strictatime tmpfs \ /dev/shm || bad_msg "Failed to mount /dev/shm" } device_list() { # Locate the cdrom device with our media on it. # CDROM devices local devices="/dev/cdroms/* /dev/ide/cd/* /dev/sr*" # USB Keychain/Storage devices="${devices} /dev/sd*" # IDE devices devices="${devices} /dev/hd*" # virtio devices devices="${devices} /dev/vd*" # USB using the USB Block Driver devices="${devices} /dev/ubd* /dev/ubd/*" # iSeries devices devices="${devices} /dev/iseries/vcd*" # builtin mmc/sd card reader devices devices="${devices} /dev/mmcblk* /dev/mmcblk*/*" # fallback scanning, this might scan something twice, but it's better than # failing to boot. local parts=$(awk '/([0-9]+[[:space:]]+)/{print "/dev/" $4}' \ /proc/partitions) [ -e /proc/partitions ] && devices="${devices} ${parts}" echo ${devices} }