如何解救 u-boot bootdelay=0 的情況

昨天因為想避免serial port干擾,就把 bootdelay 設為 0,想不到這卻是悲劇的開始。因為 bootdelay=0,所以,根本無法進入 u-boot … (冏),不能進 u-boot,就不能 update。
請 HW 同事幫忙看是否有線路可以設定強制用 SD 開,但試的結果是不行,一整個陷入困境,只好回家。
晚上睡覺時想到,公司用的 OMAP solution,把 NAND 切成7個部份:

  1. x-loader
  2. u-boot
  3. env
  4. kernel
  5. system
  6. userdata
  7. cache

開機以後,會把後面3個部份掛載成檔案系統來使用,那麼,開機以後我是不是也可以如法泡製把env那一塊抹掉,這樣u-boot讀這塊時,就不是我之前燒錄進入的bootdelay=0,那麼就有機會進u-boot了。
所以我在開機之後,先試著去mount,結果是不行,因為它不是正常的檔案系統。所以改用dd,用dd if=/dev/zero of=/dev/block/mtdblock2 bs=1024 count=1就抹除掉了。接著重新開機,果然讓我有機會按下任意鍵停在u-boot prompt下了。

調整音量

實驗結果發現要讓音量狀態的Widget出現,只要加上 FLAG_SHOW_UI 就行了。
如果要調了以後,出現一個叮的聲音,我想應該只要再加 FLAG_PLAY_SOUND。
能調的東西,可以參考 AudioManager

AudioManager am=null;
int amFlags;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
am = (AudioManager)getSystemService(AUDIO_SERVICE);
amFlags = AudioManager.FLAG_SHOW_UI;
Button button3 = (Button)findViewById( R.id.Button03 );
button3.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
am.adjustVolume( AudioManager.ADJUST_RAISE, amFlags );
}
});
Button button4 = (Button)findViewById( R.id.Button04 );
button4.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
am.adjustVolume( AudioManager.ADJUST_LOWER, amFlags );
}
});
}

Trace WebView.loadUrl

為了想知道 Android 到底使用哪個 proxy 設定,所以只能往下追了。
WebView.loadUrl( String url ) 送 message (LOAD_URL) 給 WebViewCore
WebViewCore.transfermessages() 收到以後呼叫 loadUrl( String url )
loadUrl() 呼叫 BrowserFrame.loadUrl()
BrowserFrame.loadUrl( String url ) 如果 url 是 javascript: 開頭的,丟給 javascript engine,一般情況則是呼叫 nativeLoadUrl( url )
nativeLoadUrl() 位於 WebCoreFrameBridge.cpp 裡,根據 JNI 函數對照表,對應到的是 loadUrl()。loadUrl() 則先依照 url 建立 ResourceRequest 物件,再傳入 pFrame->loader()->load() 裡。
pFrame 真正的身份是 external/webkit/WebCore/page 下的 Frame,裏面的 loader() 真實身份則是 external/webkit/WebCore/loader/FrameLoader。
接下來可以參考 http://trac.webkit.org/wiki/CodePaths 最後一項: Get data from network。
稍稍不一樣的是,Android 使用 external/webkit/WebCore/platform/network/android 下的 ResourceRequest、ResourceHandleAndroid…等類別,而非一般的 soup 或是 curl。
我幾乎可以確定應該是 ResourceHandleAndroid 類別負責真正的下載工作,但我卻看不懂裏面是怎麼呼叫的,裏面使用了相當迂迴的方法來呼叫。
以 network/curl/ResourceHandleCurl 來說,裏面就很清楚的用到 curl library,network/qt/ResourceHandleQt、network/soup/ResourceHandleSoup 也是如此。
今天就先看到這裡吧。