Все получилось, привожу свои версии скрипта автостарта для Bluetooth (если кому понадобится).
Из-за странного поведения hotplug для моего Bluetooth-донгла, пришлось повозиться - потому что скрипт hotplug по непонятной мне причине запускается 3 раза подряд, и возникает 3 конкурирующих процесса. Для борьбы с этим пришлось добавить случайную задержку и флаг.
Итак, делаем сначала как сказано в писании на 2 поста выше
то есть в /usr/local/sbin/pre-boot добавляем
Code:
echo /usr/local/sbin/hotplug > /proc/sys/kernel/hotplug
Эту команду заодно можно выполнить сразу, чтобы активировать hotplug скрипт без перезагрузки.
Далее создаем исполняемый файл скрипта /usr/local/sbin/hotplug следующего содержания (моя версия):
Code:
#!/bin/sh
logger -t hotplug "Processing hotplug for '$*': called '${ACTION}' for device '${PRODUCT}'"
BT_DONGLE="a12/1/525" # CSR Bluetooth dongle
if [ "${PRODUCT}" = "${BT_DONGLE}" ] ; then
BT="bluetooth"
INIT_SCRIPT="/opt/etc/${BT}/${BT}-hotplug"
STARTED="/tmp/var/state/${BT}.started"
# add random delay 0...2s to avoid concurrency
/bin/usleep `/opt/bin/date +%N | awk '{srand(substr($0,3,4)); print int(rand()*2000000)}'`
if [ "${ACTION}" = "add" -a ! -e $STARTED ] ; then
touch $STARTED
if [ -x ${INIT_SCRIPT} ] ; then ${INIT_SCRIPT} start ; fi
elif [ "${ACTION}" = "remove" -a -e $STARTED ] ; then
rm -f $STARTED
if [ -x ${INIT_SCRIPT} ] ; then ${INIT_SCRIPT} stop ; fi
fi
else
# use base hotplug
/sbin/hotplug
fi
Поначалу идентификатор девайса нам не известен, мы его узнаем из лога как только первый раз попытаемся воткнуть Bt-донгл в USB.
Итак, втыкаем, смотрим лог, видим что то вроде:
Apr 17 04:05:38 hotplug: Processing hotplug for 'usb': called 'add' for device 'a12/1/525'
Копируем идентификатор из лога и вставляем в скрипт (переменная BT_DONGLE)
Сохраняем флеш.
Скрипт (исполняемый) для запуска модулей и служб размещаем в /opt/etc/bluetooth, имя файла bluetooth-hotplug. Здесь привожу мой вариант который используется для коннекта с телефона Nokia 6120 по Gnubox, и может быть изменен по необходимости:
Code:
#!/bin/sh
# uncomment to disable
#exit 0
PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin
LOG="/usr/bin/logger -t bluetooth-hotplug"
if [ -z "$1" ] ; then
rc="usage"
else
rc="$1"
fi
case "$rc" in
start)
$LOG "starting modules"
modprobe bluez
modprobe hci_usb
modprobe l2cap
modprobe rfcomm
modprobe sco
sleep 1
$LOG "starting services"
/opt/sbin/hcid -f /opt/etc/bluetooth/hcid.conf 2>&1 |$LOG
/opt/sbin/hciconfig hci0 up 2>&1 |$LOG
/opt/sbin/sdpd 2>&1 |$LOG
/opt/bin/rfcomm -f /opt/etc/bluetooth/rfcomm.conf bind all 2>&1 |$LOG
$LOG "starting Gnubox network for Nokia"
/opt/bin/sdptool add --channel=2 SP 2>&1 |$LOG
/opt/bin/dund --listen --channel 2 file /opt/etc/ppp/nokia-gnubox.ppp 2>&1 |$LOG
;;
stop)
$LOG "stopping services"
killall dund
killall sdpd
killall hcid
$LOG "stopping modiles"
/sbin/rmmod sco
/sbin/rmmod rfcomm
/sbin/rmmod l2cap
/sbin/rmmod hci_usb
/sbin/rmmod bluez
;;
*)
echo "Usage: $0 (start|stop|usage)"
;;
esac
Важно: служба dbus должна быть установлена и запущена предварительно, запуск ее внутри этого скрипта нестабилен (загружает проц на 100%, почему - неясно).
Про настройку Bluez, rfcomm, ppp и GnuBox отсылаю к первоисточнику:
http://wl500g.info/showthread.php?t=10818