View source for Manually using GPRS
From Openmoko
You do not have permission to edit this page, for the following reasons:
You can view and copy the source of this page:
Templates used on this page:
Return to Manually using GPRS.
You do not have permission to edit this page, for the following reasons:
You can view and copy the source of this page:
Templates used on this page:
Return to Manually using GPRS.
The GPRS connection is made using the PPP protocol to a server identified by an "APN" at the network operator. Once a GPRS connection is made, it is possible to share that connection with a connected computer, allowing that computer to access the internet through the phone!
NOTE: The following does not appear to work if you have a SIM PIN. The dialog to enter your SIM PIN never pops up and the GSM multiplexing daemon continuous loops and runs into a SIM PIN error. |
GSM multiplexing allows both a GPRS connection and a phone call to be handled at the same time. By default, Om 2008.8 does not multiplex the GSM device. The FSO distribution, however, introduces GSM multiplexing with a new service and a DBus API to that service. The instructions to modify the OM2008.8 distribution to make use of GSM multiplexing and allow you to start GPRS from a GUI can be found here: http://freeyourphone.de/portal_v1/viewtopic.php?f=21&t=295 (Note: Script package seems to be no longer be available, but a later post in the thread links to a version at http://fyp-archiv.relei.de/.)
However, using those instructions, you will encounter a few hurdles. Do not use the gsm0710muxd that is found in the OM2008.8 repository. It will not work, instead, use the one from the Angstrom Repositories (see Repositories).
Alternatively, if you simply want to download all the packages, you can get them from here:
and the dependencies from here:
http://www.angstrom-distribution.org/repo/?pkgname=gsm0710muxd
Make sure that you install the armv4t versions of all packages.
The most important step after installing gsm0710muxd is to tell QPE to use the MUX instead of the device directly. If you follow the instructions in the link above, there is a step that replaces the 89qtopia init script with one from their script package. The key difference is the addition of the following lines that tells QPE to use the MUX:
in /etc/X11/Xsession.d/89qtopia
identvar=$(date +%s) ptsvar=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$identvar | grep string | awk -F '"' '{ print $2 }') export QTOPIA_PHONE_DEVICE=$ptsvar
The APN Reference table may come in handy when you are looking for the required network specific information for the other scripts.
Once you follow through with all the instructions, you will notice that the "Services" GUI will crash. This has to do with this bug: http://docs.openmoko.org/trac/ticket/1718
The fix is to change the "init()" call on line 82 of /usr/lib/python2.5/site-packages/gtk-2.0/gtk/_init_.py to "_init()" (add an underscore).
You may also have to modify your /etc/resolv.conf file and add the nameserver (DNS Server) of your service provider if you have DNS resolution problems.
Then, hopefully, you should be up in running with GPRS and a GUI to turn it on and off. Note that you can use the command line scripts "gprson" and "gprsoff" in place of the GUI if you need to do some debugging.
You will have to get gsm0710muxd the same way as detailed in Option 1.
1) In /etc/rc5.d start gsm0710muxd before gsmd:
2) Modify S35gsmd so it can start either with or without gsm0710muxd:
... case "$1" in start) if [ "$(pidof gsm0710muxd)" ] ; then id=$(date +%s) GSM_DEV=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \" -f 2) else [ -n "$GSM_POW" ] && ( echo "0" >$GSM_POW; sleep 1 ) [ -n "$GSM_POW" ] && ( echo "1" >$GSM_POW; sleep 1 ) [ -n "$GSM_RES" ] && ( echo "1" >$GSM_RES; sleep 1 ) [ -n "$GSM_RES" ] && ( echo "0" >$GSM_RES; sleep 2 ) fi if [ ! "$GSM_DEV" ] ; then echo "GSM_DEV was not set" exit 1 fi echo -n "Starting GSM daemon: " start-stop-daemon -S -x /usr/sbin/gsmd -- gsmd -p $GSM_DEV $GSMD_OPTS -d -l /var/log/gsmd if [ $? = 0 ]; then echo "gsmd." else echo "(failed.)" fi ;; stop) if [ ! "$(pidof gsm0710muxd)" ] ; then [ -n "$GSM_POW" ] && echo "0" >$GSM_POW fi echo -n "Stopping GSM daemon: " ...
3) Remove the tty from /etc/ppp/peers/simyo (replace simyo with your provider).
4) Use a ppp start script like this:
$ cat /usr/local/bin/ppp-start #!/bin/sh id=$(date +%s) TTY=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \" -f 2) logger -t ppp-start "using tty $TTY" pppd $TTY call simyo
5) Use "killall pppd" to terminate the PPP connection.
Here is some strace information from gsm0710muxd, showing how the daemon responds when receiving a call when GPRS is up.
[Important Note: It has been pointed out that this is only for 2007.2 and not for the 2008.8 images. If someone can confirm this and update this comment with more detail it would help out this page. Thanks]
The program that implements PPP on Linux is pppd, which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.
You'll need /etc/ppp/peers/gprs:
# Uncomment the following if you want some debug. #debug #logfile /var/volatile/log/pppd.log lock /dev/ttySAC0 115200 crtscts connect /etc/ppp/gprs-connect-chat disconnect /etc/ppp/gprs-disconnect-chat hide-password usepeerdns ipcp-accept-local noauth noipdefault novj novjccomp defaultroute replacedefaultroute # Reopen the connection if it fails, pausing for a while. persist holdoff 15 # Check the line every 20 seconds and presume # the peer is gone if no replay for 4 times. lcp-echo-interval 20 lcp-echo-failure 4
Depending on the APN, you may need password authentication using CHAP or PAP. In /etc/ppp/pap-secrets you can add the following default line for "password-less" connections:
# client server secret IP addresses * * "" *
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the "user" option in pppd the config file (below). You can use * to mean any here, but the option user "" doesn't mean empty!
For example:
# Secrets for authentication using CHAP # client server secret IP addresses "user" * "password" *
For this you need the following options in /etc/ppp/peers/gprs:
# username to use for authentication, should match "client" in /etc/ppp/{chap,pap}-secrets user "user"
You'll also need /etc/ppp/gprs-connect-chat (needs "chmod +x"):
#!/bin/sh -e exec chat -v -S -s\ TIMEOUT 15\ "" "\K\K\K\d+++ATH"\ OK-AT-OK ATZ\ OK ATE1\ ABORT BUSY\ ABORT DELAYED\ ABORT "NO ANSWER"\ ABORT "NO DIALTONE"\ ABORT VOICE\ ABORT ERROR\ ABORT RINGING\ TIMEOUT 60\ OK AT+CFUN=1\ OK AT+COPS\ OK AT+CGDCONT=1,\"IP\",\"internet\"\ OK ATD*99#\ CONNECT /n/d
Note: In the 3rd last line, replace the word internet by your provider's APN (listed below).
(08/18/08) Note: I needed to add the command "AT+CMOD=2" (formatted as "OK AT+CMOD=2\" without the quotes) in order to get GPRS working with the above script (otherwise it would ERROR on the CFUN, COPS, or the ATD if the other two were removed). I have T-Mobile (US) with the $5.99 "tzones" addon, which works with Minimo as it supports HTTP proxy setups.
Update: On my freerunner the first AT+CFUN=1 always generated ERROR. I managed to get gprs work by using the following script from http://lists.openmoko.org/pipermail/community/2008-July/023246.html:
#!/bin/sh -e exec /usr/sbin/chat -v \ TIMEOUT 10 \ OK-AT-'' ''\ ABORT BUSY\ ABORT DELAYED\ ABORT "NO ANSWER"\ ABORT "NO DIALTONE"\ ABORT VOICE\ ABORT ERROR\ ABORT RINGING\ TIMEOUT 30 \ '' ATZ\ OK ATE1\ OK AT+CFUN=1\ ERROR AT+CPIN=\"XXXX\"\ << USE YOUR OWN OK AT+COPS\ OK AT+CGDCONT=1,\"IP\",\"internet\"\ OK 'ATDT*99***1#'\ CONNECT ''
The error seems to vary a bit, sometimes it's before AT+COPS, sometimes as above. I have two versions of the gprs-connect-chat, which I vary between depending on which is needed. Or is there a way to specify two acceptable answers like {OK,ERROR}?
You will need to adjust the APN name "internet" in at+cgdcont line and possibly the phone number in the ATD line to match what your network operator provides. See below in the table "Some APN names for reference" for the right settings for your operator.
Also good to have is /etc/ppp/gprs-disconnect-chat (needs "chmod +x"):
#!/bin/sh -e /usr/sbin/chat -v\ ABORT OK\ ABORT BUSY\ ABORT DELAYED\ ABORT "NO ANSWER"\ ABORT "NO CARRIER"\ ABORT "NO DIALTONE"\ ABORT VOICE\ ABORT ERROR\ ABORT RINGING\ TIMEOUT 12\ "" "\K\K\K\d+++ATH"\ "NO CARRIER-AT-OK" "\c"
The following script can be used to start the ppp connection. First it stops gsmd because gsmd may put the phone in a unknown state. It then turns on the power to the phone, modifies the ownership, and then creates a tty connection. Finally it starts pppd with the gprs settings.
/etc/init.d/gsmd stop echo "1" > /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on chown uucp.uucp /dev/ttySAC0 stty -F /dev/ttySAC0 crtscts pppd call gprs
If you are having problems connecting ensure you have a good GSM signal and replace the last line with the below line. This will allow you to see the details of the connection on the console.
pppd debug nodetach call gprs
The config above will establish a persistant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.
The latest build seems to have solved the following issue, it should be automatically updated by pppd.
If you expeience DNS issues after connecting to DNS you may need a proper /etc/resolv.conf:
ln -sf /var/run/resolv.conf /etc
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.
The image does not set a correct resolv.conf. i do so with an
echo nameserver 192.168.0.201 > /var/run/resolv.conf
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:
#!/bin/sh ACTUALCONF=/var/run/resolv.conf PPPCONF=/var/run/ppp/resolv.conf if [ -f $PPPCONF ] ; then if [ -f $ACTUALCONF ] ; then if [ ! -h $ACTUALCONF -o ! "`readlink $ACTUALCONF 2>&1`" = "$PPPCONF" ] ; then mv $ACTUALCONF $ACTUALCONF.ppporig fi fi ln -sf $PPPCONF $ACTUALCONF fi
Country | Carrier | Plan | APN/Phone | user/password if required | Working pppd scripts |
---|---|---|---|---|---|
Australia | Virgin | Any | VirginInternet | ||
Australia | Vodafone | Any | vfinternet.au | ||
Canada | Fido | Any, behind NAT | internet.fido.ca | fido/fido | use pap authetication
proxy address 205.151.011.011:8080 mdbus -s org.freesmartphone.frameworkd /org/freesmartphone/GSM/Device org.freesmartphone.GSM.PDP.ActivateContext internet.fido.ca fido fido |
Canada | Rogers | Any, behind NAT | internet.com | wapuser1/wap | nameserver 207.181.101.4 |
Canada | Rogers | $7 unlimited browsing | goam.com | wapuser1/wap | Must use a proxy server 10.128.1.69:80 (or 172.25.0.107:80 or 208.200.67.150:8080) |
Czech Republic | Vodafone | any postpaid | internet | must be empty | Works with FSO Behind NAT. |
Czech Republic | Vodafone | prepaid | ointernet | must be empty | Works with FSO Behind NAT. |
Denmark | Telmore | wap | must be empty | ||
Denmark | Unotel | internet | must be empty | Note: APN not tested | |
Estonia | Elisa | Any, behind NAT | internet | ||
Estonia | EMT | Any, behind NAT | internet.emt.ee | ||
Finland | Saunalahti | Any | internet.saunalahti | ||
Finland | Sonera | Any, behind NAT | internet | ||
Finland | Sonera | Any, public IP | prointernet | ||
France | SFR | 10.x.x.x? | websfr | under tests | |
France | SFR | 10.x.x.x? | wapsfr[1] | under tests | |
France | Orange | ??? | orange.fr | under tests | |
France | Bouyges Telecom | Web & Mail | mmsbouygtel.com | Work great under FSO. Just follow instructions at http://wiki.openmoko.org/wiki/GPRS_FSO. Proxy: 62.201.129.225:8080. For emails, only ports 25 (smtp) and 110 (pop) are allowed. (They use a transparent proxy ...) | |
Germany | E-Plus | BASE (and others?) | internet.eplus.de | eplus gprs | Base pppd scripts |
Germany | E-Plus | Simyo | internet.eplus.de | simyo simyo | simyo pppd scripts |
Germany | T-Mobile | internet.t-mobile | |||
Germany | Vodafone | Any, behind NAT | web.vodafone.de | ||
Hungary | T-Mobile | Any | internet / *99***1# | must be empty | must disable chap auth: refuse-chap, refuse-mschap, refuse-mschap-v2 |
India | AirTel | MobileOffice | airtelgprs.com | ||
Italy | Wind | Superinternet, public IP | internet.wind / *99# | wind/wind (any string) | Wind pppd scripts |
Netherlands | Vodafone | Any | live.vodafone.com / *99***1# | Vodafone pppd scripts | |
New Zealand | Vodafone | Any | live.vodafone.com / *99***2# | ||
Norway | Netcom | Any | internet.netcom.no | ||
Norway | OneCall | Any | internet | ||
Norway | Telenor | Any | telenor | ||
Spain | Simyo | Any | gprs-service.com / *99# | ||
Sweden | Parlino | internet.parlino.se | Works with FSO | ||
Sweden | Telia | online.telia.se | Works with FSO | ||
Switzerland | Sunrise | internet | |||
Switzerland | Sunrise | MMS | mms.sunrise.ch | ||
Switzerland | Swisscom | e.g. Natel Basic Liberty, behind NAT | gprs.swisscom.ch | ||
UK | T-Mobile | general.t-mobile.uk | |||
UK | Virgin | goto.virginmobile.uk | user | ||
UK | other providers | ||||
USA | AT&T | Unlimited data plan (attached to pay-as-you-go voice plan) | wap.cingular / *99***1# | WAP@CINGULARGPRS.COM/CINGULAR1 | |
USA | Cincinnati Bell Wireless | wap.gocbw.com | cbw | ||
USA | Cingular (AT&T) | Less than full internet | wap.cingular / may require *99***1# | ||
USA | T-mobile | Anything less than full internet | wap.voicestream.com | Need to set proxy to 216.155.165.50 T-Mobile docs say "216.155.165.050". 050 octal = 40 decimal and will *not* work. I think port is 8080 or 9100. No luck w/ pppd scripts. GPRS_FSO directions work under FSO though. | |
USA | T-mobile | Regular internet plan | internet2.voicestream.com | T-Mobile pppd scripts | |
USA | T-mobile | "VPN" internet plan | internet3.voicestream.com | ||
Venezuela | Digitel | Pre- y post-pago | gprsweb.digitel.ve |
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)
[2] Unless stated otherwise the phone number to call is "*99#"
Also see Ross Barkman's page for a detailed list of more global GPRS providers APN details
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished. Make sure you understand the impact of this change to your carrier plan billing. This is not recommended unless you have a large-use or unlimited data plan. These scripts do NOT prompt you before connecting.
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out. If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.
# Wait until needed before connecting demand # Disconnect if idle for given amount of seconds idle 20
Add the following definition to /etc/network/interfaces:
auto ppp0 iface ppp0 inet ppp provider gprs
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x). The /etc/init.d/ppp script will call it to set up the daemon.
#!/bin/sh # # Rename this file to ppp_on_boot and pppd will be fired up as # soon as the system comes up, connecting to `provider'. # # If you also make this file executable, and replace the first line # with just "#!/bin/sh", the commands below will be executed instead. # # The location of the ppp daemon itself (shouldn't need to be changed) PPPD=/usr/sbin/pppd # The default provider to connect to $PPPD call gprs # Additional connections, which would just use settings from # /etc/ppp/options.<tty> #$PPPD ttyS0 #$PPPD ttyS1 #$PPPD ttyS2 #$PPPD ttyS3
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories. I chose the following:
/etc/rc0.d/K25ppp /etc/rc1.d/K45ppp /etc/rc2.d/S45ppp /etc/rc3.d/S45ppp /etc/rc4.d/S45ppp /etc/rc5.d/S45ppp /etc/rc6.d/K25ppp
See Tethering
![]() |
Languages: |
English • العربية • Български • Česky • Dansk • Deutsch • Esperanto • Eesti • Español • فارسی • Suomi • Français • עברית • Magyar • Italiano • 한국어 • Nederlands • Norsk (bokmål) • Polski • Português • Română • Русский • Svenska • Slovenčina • Українська • 中文(中国大陆) • 中文(台灣) • Euskara • Català |