openwrtv4/package/base-files/files/etc/init.d/boot
Jonas Gorski 80650c9475 base-files: wait for wifi modules to settle
On slower devices wifi drivers might take too long for detecting
devices, resulting in the wifi detect call not seeing them.

This was observed on a bcm6348 with bcm4318 wifi. Adding a one second
pause was enough for b43 to expose the device.

SVN-Revision: 31639
2012-05-06 21:25:42 +00:00

103 lines
2.8 KiB
Bash
Executable file

#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org
START=10
STOP=98
system_config() {
local cfg="$1"
local hostname conloglevel timezone
config_get hostname "$cfg" hostname 'OpenWrt'
echo "$hostname" > /proc/sys/kernel/hostname
config_get conloglevel "$cfg" conloglevel
config_get buffersize "$cfg" buffersize
[ -z "$conloglevel" -a -z "$buffersize" ] || dmesg ${conloglevel:+-n $conloglevel} ${buffersize:+-s $buffersize}
config_get timezone "$cfg" timezone 'UTC'
echo "$timezone" > /tmp/TZ
config_get zonename "$cfg" zonename
[ -n "$zonename" ] && [ -f "/usr/share/zoneinfo/$zonename" ] && ln -s "/usr/share/zoneinfo/$zonename" /tmp/localtime
# apply timezone to kernel
date -k
if [ -x /sbin/syslogd ]; then
local args log_ip log_size log_port log_type log_file
config_get log_ip "$cfg" log_ip
config_get log_size "$cfg" log_size 16
config_get log_port "$cfg" log_port 514
config_get log_type "$cfg" log_type circular
config_get log_file "$cfg" log_file "/var/log/messages"
args="${log_ip:+-L -R ${log_ip}:${log_port}} ${conloglevel:+-l $conloglevel}"
if [ "$log_type" = "file" ]; then
args="$args -s $log_size -O $log_file -S"
else
args="$args -C${log_size}"
fi
service_start /sbin/syslogd $args
fi
if [ -x /sbin/klogd ]; then
config_get klogconloglevel "$cfg" klogconloglevel
args="${klogconloglevel:+-c $klogconloglevel}"
service_start /sbin/klogd $args
fi
}
apply_uci_config() {
sh -c '. /etc/functions.sh; include /lib/config; uci_apply_defaults'
}
start() {
[ -f /proc/mounts ] || /sbin/mount_root
[ -f /proc/jffs2_bbc ] && echo "S" > /proc/jffs2_bbc
[ -f /proc/net/vlan/config ] && vconfig set_name_type DEV_PLUS_VID_NO_PAD
mkdir -p /var/run
mkdir -p /var/log
mkdir -p /var/lock
mkdir -p /var/state
mkdir -p /tmp/.uci
chmod 0700 /tmp/.uci
touch /var/log/wtmp
touch /var/log/lastlog
touch /tmp/resolv.conf.auto
ln -sf /tmp/resolv.conf.auto /tmp/resolv.conf
grep -q debugfs /proc/filesystems && mount -t debugfs debugfs /sys/kernel/debug
[ "$FAILSAFE" = "true" ] && touch /tmp/.failsafe
load_modules /etc/modules.d/*
# allow wifi modules time to settle
sleep 1
/sbin/wifi detect > /tmp/wireless.tmp
[ -s /tmp/wireless.tmp ] && {
cat /tmp/wireless.tmp >> /etc/config/wireless
}
rm -f /tmp/wireless.tmp
apply_uci_config
config_load system
config_foreach system_config system
killall -q hotplug2
[ -x /sbin/hotplug2 ] && /sbin/hotplug2 --override --persistent \
--set-rules-file /etc/hotplug2.rules \
--set-coldplug-cmd /sbin/udevtrigger \
--max-children 1 >/dev/null 2>&1 &
# create /dev/root if it doesn't exist
[ -e /dev/root -o -h /dev/root ] || {
rootdev=$(awk 'BEGIN { RS=" "; FS="="; } $1 == "root" { print $2 }' < /proc/cmdline)
[ -n "$rootdev" ] && ln -s "$rootdev" /dev/root
}
}
stop() {
service_stop /sbin/klogd
service_stop /sbin/syslogd
}