ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2012年8月21日 星期二

system 下的 vold, netd 有類似的架構。
都是用 CommandListener.


netd 也負責 Tethering ,叫起 dnsmasq,這同時負責 dhcp (竟然不是獨立的 dhcp 程式)。

netd 負責很多事: class CommandListener : public FrameworkListener { static TetherController *sTetherCtrl; static NatController *sNatCtrl; static PppController *sPppCtrl; static PanController *sPanCtrl; static SoftapController *sSoftapCtrl; static UsbController *sUsbCtrl; static RouteController *sRouteCtrl;



CommandListenener 繼承 FrameworkListener。
FrameworkListener 是用 unix socket 作為溝通的 interface。

使用的 unix socket,要先 create 好 (init.rc:) service netd /system/bin/netd socket netd stream 0660 root system 然後在 netd 啟動的時候,告訴 FrameworkListener,要 listen 哪一個 unix socket (CommandListener.cpp) : CommandListener::CommandListener() : FrameworkListener("netd") { registerCmd(new InterfaceCmd()); registerCmd(new IpFwdCmd()); registerCmd(new TetherCmd()); registerCmd(new NatCmd()); registerCmd(new ListTtysCmd()); registerCmd(new PppdCmd()); registerCmd(new PanCmd()); registerCmd(new SoftapCmd()); registerCmd(new UsbCmd()); registerCmd(new RouteCmd());
command 的內容好像是用 plain text。

command 本身也是,所以每個 command 都有一個 "name" (CommandListener.cpp): CommandListener::TetherCmd::TetherCmd() : NetdCommand("tether") { }
FrameworkListener 從 netd socket 收到 command 後,在 dispatchCommand ( ) parsing 一下,
把command 整理成: command, argc, argv[],之後,比對 command 字串,
然後 call 比對到的 runCommand(cli, argc, argv)

2012年8月9日 星期四

usb auto_suspend & wakeup

奇怪,一個 usb hub 在 xp 下可以正常動作,在 7 下就 fail。

-- 發現只要 hub 上一直有插著裝置,就OK。

一旦 hub 空了,3,4 sec 後, hub 上的clk 就停了。
在 xp 上,即使 hub 空了,clk 也不會停。



大概是因為 7 的 usb driver 有 auto suspend 吧。
hub 支援 auto-suspend,所以 7 在問 hub 時,知道他可以 auto-suspend。
所以當 hub 上沒東西的時候,過一段時間, 7 就、把他 suspend 了。

為了配合,還要有 wakeup 功能。
一旦 suspend 後,只要有東西插入 hub,hub 就會發出 interrupt,通知 7。

這個wakeup function 在 linux source code 是(以 imx51 為例):
arch/arm/mach-mx5/usb_dr.c

2012年8月8日 星期三

debian-multimedia ---- deb-multimedia

www.debian-multimedia.org 改為 www.deb-multimedia.org 了
所以 apt update 會 fail..

ref : http://www.deb-multimedia.org/

2012年8月3日 星期五

NativeDaemonConnector
配合
INativeDaemonConnectorCallback

可以用來實做:程式中,需要用 Thread 來完成的動作。

任何 object 都可以用來同步。
任何 Handler 都可以用來作 message 傳遞。

?

obtainMessage, new Messasge

from http://www.cnblogs.com/android007/archive/2012/05/10/2494766.html

Android 中 SendMessage( ) 時,Message 主體都是用: msg = obtainMessage( ..)
然後再用 sendMessasge(msg) 送出去。

不用 General 的: msg = new Message( ) 的原因,是因為 obtainMessage 會從 message pool 中拿出來,
new 的話,就要請系統作記憶體管理,new object 出來。
所以 obtainMessage( ) 比較快。

2012年8月1日 星期三

unmount fail 的原因是因為沒有 任何一個 external storage 是 MOUTED,
所以 UNMOUNT 都沒作,
所以沒有 UNMOUNT DONE event,
所以 observer 沒有被 call 到.....

標籤

網誌存檔