2008年5月27日 星期二

幫android換掉 sh

android的 init是 google自己寫的, 它會讀取 /etc/init.rc 作一些動作
我不喜歡它原本 sh , 因為不方便使用沒有 history的功能,

我修改如下

console {
exec /system/bin/busybox
args {
0 sh
}
console yes
}

這樣 run emulator的時候加上 -console 就會直接執行 busybox sh
但是 adb shell 則是直接 run /system/bin/sh 這要怎麼辦呢
先把原本的sh改名, 然後 ln -s busybox sh.

對了 android的 sh可不是由 toolbox link過來的喔 是一隻獨立的程式.

Busybox testing on android emulator

busybox 是一套 balabala 不多說了 有些功能可以動作 有些會造成 segmentation fault 以下是我測試目前ok的功能

補充一下 ln -s busybox cat 會產生 symbol file cat 這樣就可以執行cat的功能

cat , cmp ,chmod ,date , dd ,df , dmesg, mkdir, netstat, ps , printenv, rm, rmdir, route, sleep, sync, umount, mount, kill, ls

目前已知會造成 segmentation fault的功能, vi, lsmod, insmod, rmmmod

ifdown , ifup, ifconfig 會說需要 /etc/network/interfaces 這個檔案 我在模擬器上面就沒有多加測試了.

Android 的 一些小心得

目前因為版子還不能 run android 的關係 (只有 shell 出現 沒有 gui ),
所以我就只能模擬器上面作一些工作, 這邊是我的一些小心得.

ramdisk.img 是一個 gzip + cpio 的檔案
先用 gunzip 解壓縮後 得到一個 cpio file ramdisk

我們可以用這一行命令解開它

cpio -iv < ../ramdisk

這一行命令會把 ramdisk 的內容解開到當前的目錄當中.


修改完後要壓回去, 可以執行下面的命令
find | cpio -H newc -o | gzip -9 > ../ramdisk.img

這樣就會還原成原來的 gzip + cpio 的 ramdisk.img

當然這些動作只有在 emulator 上面執行才需要
如果要在 target board 上面執行時 只要像一般的處理 rootfs 那樣即可
不過我只會 NFS mount 的方式.

android JNI debug method

這是一篇小小的心得, 當時我正在寫 android的 jni 準備放在 /system/lib 裡面讓 java的 application 呼叫.

但是苦於沒有辦法知道 android's java application 是否呼叫到了 jni 所以一直很苦惱,
後來靈機一動, 直覺的認為可能是 權限的問題所以想到的解法. 請各位不要笑我 因為我剛開始接觸 linux也不超過一年.

  • adb shell
  • chmod 777 /dev/pts/0

in c code write below this to generate debug message

  • char message[] = "hello android jni interface.";
  • int tty = open ("/dev/pts/0", O_RDWR);
  • write ( tty, message, sizeof(message) );
補充一下 /dev/pts/x 是在使用模擬器的時候使用 adb shell 會自動建立的 device node , 第一次使用時編號為0 第二次為1 以此類推.

所以這個 debug 方法只是用在 emulator 上面.
另外前面可以加上 access("/dev/pts/0", R_OK | W_OK | X_OK ) 作判斷看看檔案是否存在

chm2pdf on linux(在 fedora上面 )

這個是今天在網路上看到的轉檔方法 (在 fedora7 上面 )

首先下載 http://code.google.com/p/chm2pdf/
上面是網頁上說所需要的檔案.

我自己在 fedora 7裡面安裝的經驗是
使用更新搜尋尋找 libchm 全選, python-chm , htmldoc 全選
最後解開 chm2pdf-x.tar

進入解壓縮後的chm2pdf目錄
執行
python setup.py install


產生
/usr/bin/chm2pdf

接下來就可以直接在 shell底下使用
轉檔的方式很簡單 我自己喜歡的閱讀方式是
上下個留 1 inch 的空白 左右 1.2
執行下面的命令即可

chm2pdf --book --left 1.2in --right 1.2in --top 1in --down 1in --size a4 --textfont helvetica --no-overflow --jpeg 100 "filename.chm"

有時後轉檔會失敗 這個時候請把 --book 替換成 --webpage 即可