service ril-daemon /system/bin/rild -l /system/lib/libreference-ril.so
socket rild stream 660 root radio
socket rild-debug stream 660 radio system
socket rild-ppp stream 660 radio system
user root
group radio cache inet misc audio
service pppd_gprs /etc/init.gprs-pppd
user root
group radio cache inet misc
disabled
oneshot
rild 的部份是直接 run rild (實際是去 run libreference-ril.so 的 Init)rild 負責 modem 的初始化,語音撥撥號,接聽,modem 連線狀態維護 (連線中, operator, signal strength.. etc)。
pppd 則負責 ppp protocol,並形成 ppp0 這個 network interface
pppd 是 run script : /etc/init.gprs-pppd:
PPPD_PID=
/system/bin/setprop "net.gprs.ppp-exit" ""
/system/bin/log -t pppd "Starting pppd"
#/system/xbin/pppd $*
# pppd was put into /system/bin instead of /system/xbin after SDK1.6
if ls /dev/ttyUSB0 > /dev/null 2>&1; then
/system/bin/pppd connect 'chat -f "/etc/3gdata.conf"' /dev/ttyUSB3 115200 mru 1280 mtu 1280 nodetach debug dump defaultroute usepeerdns novj novjccomp noipdefault ipcp-accept-local ipcp-accept-remote connect-delay 5000 linkname ppp0
else
/system/bin/pppd ttyACM0 921600 nodetach noauth noipdefault defaultroute usepeerdns linkname ppp0 connect "chat -v '' AT OK ATD*99***1# CONNECT" debug
fi
PPPD_EXIT=$?
PPPD_PID=$!
/system/bin/log -t pppd "pppd exited with $PPPD_EXIT"
/system/bin/setprop "net.gprs.ppp-exit" "$PPPD_EXIT"
.. 這個 file 在 /system/core/rootfs/etc/ script 是啟動 pppd ,在參數指定連接的動作,使用 chat:
connect 'chat -f "/etc/3gdata.conf" '
這樣寫是要 chat 使用 3gdata.conf 作 連線參數。 connect "chat -v ''AT OK ATD*99***1# CONNECT"
這樣寫是使用簡單是 chat 設定,所以直接寫出來。chat 是一種 send - reply 對應的程式,會依照config 送 string,並且依照 config 檢查回應的string。
pppd 的 help 中,connet 的說明是:
connect <p> Invoke shell command <p> to set up the serial line
就是另外 run script 'p' 來作建立連線的動作 (撥號)。啟動 pppd 還要給的就是 pppd 對應的 3g modem data port number,一般會是 /dev/ttyUSB?
3g modem 會提供很多 ttyUSB port,每個有不同的功能
- AT Command 語音撥號
- ppp 資料
- AT Command 系統狀態
同理,撥號也一樣,如果撥號和 ppp 通訊在同一個,就可以寫在 這裡,叫 pppd 撥號。
如果 撥號 和 ppp 通訊在不同的 port,就不能請 pppd 做了 (也就沒有 connect 這個 參數)
port 是 支援 3g modem 時最麻煩的東西。
不同的 modem 有不同的 port 指定。
不僅 pppd 要知道對哪一個 port 動作, rild 也要知道。
舊版的 android,是把 port number 直接寫在 init.rc 的 啟動命令參數,所以要同時支持多個 3g modem 是不可能的。
新版修改了 rild reference-ril,會由 3g modem 的 vid, pid 知道是哪一個 modem,然後有一個內建的 table,決定 port。
所以只要有在 vid. pid table 中的 3g modem, rild 都可以正確動作。
* 但是這樣只有作半套...
pppd 的 port 還是由 init.rc 寫死,所以沒辦法依照 vid.pid 來決定。
2 則留言:
rild reference-ril,會由 3g modem 的 vid, pid 知道是哪一個 modem,然後有一個內建的 table,決定 port。
所以只要有在 vid. pid table 中的 3g modem, rild 都可以正確動作。
你好,請問該table 在哪個位置? 找了很久 謝謝
我是查詢 ICS 4.0.4
張貼留言