OpenMokoPL
 

quake_wifi

Udało mi się zrobić wifi tak jak JA chcę:

Paczki z systemu

Wywalamy connmana z sekwencji startowej i instalujemy lint-wifi (to GUI do ustawiania połączeń):

rm /etc/rc5.d/S05connman
opkg install http://projects.openmoko.org/frs/download.php/912/lint-wifi2_0.1-1_armv4t.opk

Skrypt startowy

  • Zapisać poniższy plik jako /etc/init.d/quake-wifi
  • Dodać bit wykonywalności do niego (chmod 0755 /etc/init.d/quake-wifi)

#!/bin/sh

DHCP_PID=/var/run/udhcpc.eth0.pid
WPAS_PID=/var/run/wpa_supplicant.eth0.pid

export PATH=/usr/sbin:/sbin:/usr/bin:/bin:"$PATH"

up_wifi() {
	echo Powering up wifi
	echo s3c2440-sdi > /sys/bus/platform/drivers/s3c2440-sdi/bind
	wmiconfig -i eth0 --wlan enable
	ifconfig eth0 up
}

start_wpa() {
	echo Starting wpa_supplicant
	wpa_supplicant -ieth0 -Dwext -c/etc/wpa_supplicant/wpa_supplicant.conf -B -P $WPAS_PID
}

wait_wpa() {
	echo Wating till wpa_supplicant connects
	wpa_cli -g/var/run/wpa_supplicant/eth0 -ieth0 ping | grep PONG || return 1
	while ! wpa_cli -g/var/run/wpa_supplicant/eth0 -ieth0 status | grep wpa_state=COMPLETED; do
		sleep 5
	done
	return 0
}

start_dhcp() {
	echo Starting udhcpc
	udhcpc -i eth0 -p $DHCP_PID
}

renew_dhcp() {
	echo Renewing DHCP lease
	kill -USR1 `cat $DHCP_PID` || start_dhcp
}

stop_dhcp() {
	echo Stopping udhcpc
	kill `cat $DHCP_PID`
}

stop_wpa() {
	echo Stopping wpa_supplicant
	kill `cat $WPAS_PID`
}

kill_wpa() {
	echo Killing wpa_supplicant
	killall wpa_supplicant
}

kill_dhcp() {
	echo Killing udhcpc
	kill udcpc
}

if [ "$1" = "start" ]; then
	up_wifi
	start_wpa
	wait_wpa && start_dhcp
elif [ "$1" = "stop" ]; then
	stop_dhcp
	stop_wpa
elif [ "$1" = "kill" ]; then
	kill_dhcp
	kill_wpa
elif [ "$1" = "reload" ]; then
	wait_wpa && renew_dhcp
elif [ "$1" = "restart" ]; then
	stop_dhcp
	stop_wpa
	up_wifi
	start_wpa
	start_dhcp
elif [ "$1" = "force-restart" ]; then
	kill_dhcp
	kill_wpa
	up_wifi
	start_wpa
	start_dhcp
fi

Plik wpa_supplicant.conf

Żeby wszystko świetnie chodziło, upewnijcie się, że macie takie linie na początku pliku /etc/wpa_supplicant/wpa_supplicant.conf:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1

Jeśli nie macie tam zapamiętanych żadnych sieci, to możecie wrzucić dokładnie ten plik jako /etc/wpa_supplicant/wpa_supplicant.conf. Najważniejsza jest linia update_config=1, bo to ona sprawia, że ustawienia wpisane do lint-wifi będą się zapisywać.

Ustawienie automatycznego łączenia:

  • Przy starcie: nie potrafię tego dobrze rozegrać. Poczekaj aż przejdzie do suspendu i go odsuspenduj.
  • Po suspendzie:

echo "#!/bin/sh" > /etc/resume.d/05quake-wifi
echo "sleep 1" >> /etc/resume.d/05quake-wifi
echo "/etc/init.d/quake-wifi restart" >> /etc/resume.d/05quake-wifi
chmod 0755 /etc/resume.d/05quake-wifi

  • Co jakiś czas – np. co 10 minut (się przyda np. jak chodzimy po mieście z włączonym telefonem):

echo '*/10 * * * *  root /etc/init.d/quake-wifi reload' >> /etc/crontab

Uwagi

  • Bateria zeżre się szybciej z włączonym wifi
  • Róbcie ze skryptem co chcecie, mam nadzieje, że się przyda komuś
  • Z jakiegoś powodu mój /etc/crontab był zepsuty, było tam:

*/5 * * * *   /sbin/logrotate /etc/logrotate.conf

Brakuje oczywiście pola użytkownika, powinno być:

*/5 * * * *   root /sbin/logrotate /etc/logrotate.conf

Nie wiem, czy to mogłoby zepsuć uruchamianie co 10 minut mojego skryptu, ale warto crontaba poprawić tak czy inaczej ;-).

 
 
Kontakt z administatorem
Projekt wspiera STN