ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2014年5月28日 星期三

3g dongle - SIM5320

插到 debian 上,直接出現 都採用 default setting 後,就撥接 OK
tail -f /var/log/messages
看到是對 /dev/ttyUSB2 工作。

remove 掉 modemmanager
重新插入 debian, demsg 看,是有 ttyUSB0~4

分別:
cat /dev/ttyUSB?
另一個
echo -e 'at/n' > /dev/ttyUSB?
另一個 cat 的就會出現 OK

ttyUSB 的 default baudrate 都是 9600

結果,只有對 ttyUSB2 下 AT command 有反應。

所以,依照另一份資料:
  • ttyUSB2 : AT Command
  • ttyUSB3 : Modem

2014年5月23日 星期五

MediaScanner 實際scan, extract 的是 StagFrightMetadataRetriever

FileSource.cpp 負責 open, read, seek file , close file 的動作。

總共有:
java/android/media/ThumbnailUtils.java:        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
jni/android_media_MediaMetadataRetriever.cpp:    MediaMetadataRetriever* retriever = new MediaMetadataRetriever();
libstagefright/StagefrightMediaScanner.cpp:    : mRetriever(new MediaMetadataRetriever) {
生成 MediaMetadataRetriever()

2014年5月20日 星期二

Dalvik : CheckJni

Dalvik VM 有一個控制參數: checkjni

因為 jni code 比較難 debug,還有一旦出問題,就會造成整個 vm crash.
所以 android 提供一個 switch, 讓 user 決定是不是要啟動 dalvik 對 jni 的安全檢查。

ro.kernel.android.checkjni

這個 option 在 build eng type 的 image 時,會被加進 build.prop

framework 中參考這個 option 是在:framework/base/core/jni/AndroidRuntime.cpp:
 
   property_get("dalvik.vm.checkjni", propBuf, "");
    if (strcmp(propBuf, "true") == 0) {
        checkJni = true;
    } else if (strcmp(propBuf, "false") != 0) {
        /* property is neither true nor false; fall back on kernel parameter */
        property_get("ro.kernel.android.checkjni", propBuf, "");
        if (propBuf[0] == '1') {
            checkJni = true;
        }
    }
所以在 init.rc 中加上
 setprop dalvik.vm.checkjni false

也可以。

在 dalvik 的 source code 中。
vm/Jni.c:


        } else if (strcmp(optStr, "-Xcheck:jni") == 0) {
            checkJni = true;
        } else if (strncmp(optStr, "-Xjniopts:", 10) == 0) {
        ...
        
    if (checkJni) {
        dvmUseCheckedJniVm(pVM);
        pVM->useChecked = true;
    }


...

    if (vm->useChecked)
        dvmUseCheckedJniEnv(newEnv);


也就是說,一旦 enable check:jni..
vm 就會..
vm/CheckJni.c

void dvmUseCheckedJniEnv(JNIEnvExt* pEnv)
{
    assert(pEnv->funcTable != &gCheckNativeInterface);
    pEnv->baseFuncTable = pEnv->funcTable;
    pEnv->funcTable = &gCheckNativeInterface;
}


其中,gCheckNativeInterface 就是一些 check function..
static const struct JNINativeInterface gCheckNativeInterface = {
    NULL,
    NULL,
    NULL,
    NULL,

    Check_GetVersion,

    Check_DefineClass,
    Check_FindClass,

    Check_FromReflectedMethod,
    Check_FromReflectedField,
    Check_ToReflectedMethod,

    Check_GetSuperclass,
    Check_IsAssignableFrom,

    Check_ToReflectedField,

    ...
    ...

其中的一個,checkUtfString, 就是檢查 passing throught 的 string 是不是符合 modified utf 的格式。
/*
 * Verify that "bytes" points to valid "modified UTF-8" data.
 */
static void checkUtfString(JNIEnv* env, const char* bytes, bool nullOk,
    const char* func)
{
    const char* origBytes = bytes;
    ...
    ...
    while (*bytes != '\0') {
        u1 utf8 = *(bytes++);
        // Switch on the high four bits.
        switch (utf8 >> 4) {
            case 0x00:
            case 0x01:
            case 0x02:
            case 0x03:
            case 0x04:
            case 0x05:
            case 0x06:
            case 0x07: {
                // Bit pattern 0xxx. No need for any extra bytes.
                break;
            }
    .,,,

這個 function check fail 的話,在logcat 就會出現:
W/dalvikvm( 1044): JNI WARNING: illegal start byte 0xa6
W/dalvikvm( 1044):              string: '米??007亞洲初登場超級紀念盤 Disc 2'
W/dalvikvm( 1044):              in Landroid/media/MediaScanner;.processFile (Ljava/lang/String;Ljava
 /lang/String;Landroid/media/MediaScannerClient;)V (NewStringUTF)
..


ref:

2014年5月15日 星期四

Pi 能用嗎? - Bt and Wifi Dongle


IOGEAR GBU521 迷你型藍牙傳輸器 A2DP 藍芽接收器
這個好像是網路上唯一有寫出明子,pi support 的 bt dongle

http://www.ioncannon.net/linux/1570/bluetooth-4-0-le-on-raspberry-pi-with-bluez-5-x/

在gnome 3 (Wheezy) 的 application list 中加入新莊的 application

ref: http://blog.randell.ph/2011/08/01/how-to-create-custom-application-launchers-in-gnome-3/

大概就是利用 alacarte ( Main Menu) 的新增 功能。

在 gnome (腳) -- System Tool -- Main Menu
就會啟動 alacarte.

然後選你要的 category, 選右邊 New Item,
接著就跟以前一樣了..

2014年5月12日 星期一

標籤

網誌存檔