ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2012年6月22日 星期五

SD card 的 cid

在 /sys 裡: cat /sys/block/mmcblk0/../../cid
因為 /sys 這個 node 是 ln,所以用 ../../


ref: http://stackoverflow.com/questions/3348643/how-to-read-the-sd-card-id-number

工作...

  • 設定環境變數
  • Make

至於工作目錄,sync source 則是.....

希望所有人都可以用自己的機器 build release

有工作目錄的問題...
如果只有兩個 file:
  1. setup environment
  2. Makefile to build all

這樣只要 copy 兩個file 到 path accessable folder 就可以動作了 (不然就是copy 到"目前" 目錄)。

工作目錄的安排:
  • working : source code & out
  • release : output release root folder

2012年6月20日 星期三

fb console -- disable cursor blinking

fbcon.c : store_cursor_blink( )
FBCON_FLAGS_CURSOR_TIMER
fbcon_add_cursor_timer / fbcon_del_cursor_timer

diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
index b0a3fa0..abaecba 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -150,7 +150,7 @@ static int fbcon_set_origin(struct vc_data *);
 #define CURSOR_DRAW_DELAY              (1)
 
 static int vbl_cursor_cnt;
-static int fbcon_cursor_noblink;
+static int fbcon_cursor_noblink=1;
 
 #define divides(a, b)  ((!(a) || (b)%(a)) ? 0 : 1)

2012年6月15日 星期五

support http_proxy on wifi connection

Android framewok 好像有寫 http_proxy 的 support。但是有限制,wifi 不能用。

所以改一下,把限制拿掉: diff --git a/core/java/android/net/http/RequestQueue.java b/core/java/android/net/http/RequestQueue.java index a31639f..a1f8f1b 100644 --- a/core/java/android/net/http/RequestQueue.java +++ b/core/java/android/net/http/RequestQueue.java @@ -261,7 +261,8 @@ public class RequestQueue implements RequestFeeder { */ private synchronized void setProxyConfig() { NetworkInfo info = mConnectivityManager.getActiveNetworkInfo(); - if (info != null && info.getType() == ConnectivityManager.TYPE_WIFI) { + //if (info != null && info.getType() == ConnectivityManager.TYPE_WIFI) { + if (false) { mProxyHost = null; } else { String host = Proxy.getHost(mContext);
然後,就可以去設定 http_proxy 的值。

proxy 的設定,default 只有寫在 vpn 和 3g 連線。

所以用手動改 database setting 比較快,這部份就跟網路上一般的說明一樣:

adb shell #sqlite3 /data/data/com.android.providers.settings/database/settings.db #sqlite > INSERT INTO secure VALUES(99,'http_proxy','192.168.147.242:3128'); #.quit
然後重開。
-- 如果是在 setting 裡面設定,是可以不用重開的。

** 2.3 之前的 database 好像是 system,之後改成 secure 了。



ref:

其他:

要開啟 Http 的 LOG,修改 frameworks/base/core/java/android/net/HttpLog.java,
其中: private static final boolean DEBUG = true;

Database 改由 secure 的 code 是在同目錄的 Proxy.java:
static final public String getHost(Context ctx) { ContentResolver contentResolver = ctx.getContentResolver(); Assert.assertNotNull(contentResolver); String host = Settings.Secure.getString( contentResolver, Settings.Secure.HTTP_PROXY); if (host != null) { int i = host.indexOf(':'); if (i == -1) { if (DEBUG) { Assert.assertTrue(host.length() == 0); } return null; } return host.substring(0, i); } return getDefaultHost(); }

2012年6月11日 星期一

run script during boot phase.

sh. mke2fs, busybox 都是 static。
所以可以用 init.rc 先啟動 static sh。
先在 static sh 中操作所有動作 (fdisk, dd, mkfs, cp,, etc) 都 OK 後。
寫成 script。

要在 init.rc 中 run script,但是又要在 system partition 還沒 mount 起來的時候作。
所以不能用 service,要在一般的 on boot 中用 exec 命令

因為要 run 的 script 是在外部 sd card
所以寫一個程式來啟動..



因為這時候system 還沒 mount 起來,所以要準備 static build 的 sh 和所有 script 中會 run 到的 program。

並且都放到 外部 sdcard 中。


這裡, ss.sh 要作的就是把 data partition format 掉,所以是: /extsd/mke2fs -t ext4 /dev/block/mmcblk0p5 /extsd/busybox sleep 1

和一般 shell script 不一樣,這個 ssh 不需要在前面寫 shell 的 run path,直接寫command 就可以。
另外,sleep 不是 android shell 的 buildin command,所以要用 busybox 來作。




有關 debug.. 因為 init.rc 這個階段,尤其是 on boot phase ,run 的 program 沒有取得console,所以 debug 起來很麻煩。

基本上把 init.rc 的 loglevel 改為 6 ,只能確認有叫起 init 中的 program,和 取得 exit code,
program run 的狀態就不得而知了。

所以修改 /system/core/init...

diff --git a/init/init.c b/init/init.c index 21ded0e..380ec54 100755 --- a/init/init.c +++ b/init/init.c @@ -170,7 +170,9 @@ int wait_for_service(char *filename) { sprintf(tmp, "%d,%d", dup(fd), sz); add_environment("ANDROID_PROPERTY_WORKSPACE", tmp); /* redirect stdio to null */ - zap_stdio(); + //zap_stdio(); + setsid(); + open_console(); setpgid(0, getpid()); /* execute */ 這樣就可以把 stdio 傳給 exec 的 program。在 console 上看到結果了。

android : static build mke2fs & sh

source 是在 /external/ext2fs

大概是因為他需要的 library 也都在這個 folder 中,而 libc 本身已經有build static (libc.a)。
所以只修改這個 project 就可以 build 出 static 版本的 mke2fs..





shell - sh 也一樣,要改的比較少: diff --git a/sh/Android.mk b/sh/Android.mk index b5e5c38..a342244 100644 --- a/sh/Android.mk +++ b/sh/Android.mk @@ -33,7 +33,9 @@ LOCAL_MODULE:= sh LOCAL_CFLAGS += -DSHELL -DWITH_LINENOISE -LOCAL_STATIC_LIBRARIES := liblinenoise +LOCAL_STATIC_LIBRARIES := liblinenoise libc + +LOCAL_FORCE_STATIC_EXECUTABLE := true LOCAL_C_INCLUDES += system/core/liblinenoise

另外用到的 liblinenoise 也要改一下..

... liblinenoise 好像原來就是 static 的......

android : static & share library

從 bionic/libc/Android.mk 可以看到同時 build static (.a) 和 share (.so) library 的 Makefile:

2012年6月8日 星期五

android 有關 pnp 的部份 (monitor uevent) 的部份,寫了一個class: NetlinkEvent。
其中的 dump( ) function 可以把 uevent 內容印出來。

以 Vold 來看,

2012年6月6日 星期三

imx51 的 touch calibration

BoardConfig.mk 有定義 TARGET_TS_DEVICE := "mxc_ts"

ts_calibrator 的 Android.mk LOCAL_CFLAGS += -DTS_DEVICE=$(TARGET_TS_DEVICE)

ts_calibrator.c 的 code: #define TS_INPUT_DEV DEV_(TS_DEVICE) ... static const char dev_name[] = TS_INPUT_DEV; ... sprintf(param_path, "/sys/module/%s/parameters/calibration", dev_name); fd = open(param_path, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
所以 touch calibration sysfs 位置 是 : /sys/module/mxc_ts/parameters/calibration

在 kernel 的 mxc_ts driver 有說明 calibration 裡面的數值意義: calibration array refers to (delta_x[0], delta_x[1], delta_x[2], delta_y[0], delta_y[1], delta_y[2], delta). Which generated by calibration service. In this driver when we got touch pointer (x', y') from PMIC ADC, we calculate the display pointer (x,y) by: x = (delta_x[0] * x' + delta_x[1] * y' + delta_x[2]) / delta; y = (delta_y[0] * x' + delta_y[1] * y' + delta_y[2]) / delta;

2012年6月1日 星期五

標籤

網誌存檔