ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2013年11月27日 星期三

android recovery .. image & source

recovery 在 android/bootable/recovery

/etc 目錄下有 init.rc,這就是後來 recovery image root 的 init.rc

這個 init.rc 很簡單,除了 uevent, console 以外。
就只有 launch 一個 service:
service recovery /sbin/recovery

這個 recovery 的 source code 就在 android/bootable/recovery/recovery.c

2013年11月26日 星期二

kernel reboot

以 arm 來看..
arch/arm/kernel/process.c:
void arm_machine_restart(char mode, const char *cmd)
{
        .....

        /*
         * Now call the architecture specific reboot code.
         */
        arch_reset(mode, cmd);
這個 arch_reset( ),是 implement 在 mach/system.h
mach 是在 arch/arm/mach-XXX/include 下。

所以每一個 mach-XXX 都有自己的 implememt。



往上看..
void (*arm_pm_restart)(char str, const char *cmd) = arm_machine_restart;
EXPORT_SYMBOL_GPL(arm_pm_restart);
..
void machine_restart(char *cmd)
{
        machine_shutdown();
        arm_pm_restart(reboot_mode, cmd);
}

這是在 kernel/sys.c 中呼叫:
void kernel_restart(char *cmd)
{
        kernel_restart_prepare(cmd);
        if (!cmd)
                printk(KERN_EMERG "Restarting system.\n");
        else
                printk(KERN_EMERG "Restarting system with command '%s'.\n", cmd);
        kmsg_dump(KMSG_DUMP_RESTART);
        machine_restart(cmd);
}
EXPORT_SYMBOL_GPL(kernel_restart);

然後是這個:
/*
 * Reboot system call: for obvious reasons only root may call it,
 * and even root needs to set up some magic numbers in the registers
 * so that some mistake won't make this reboot the whole machine.
 * You can also set the meaning of the ctrl-alt-del-key here.
 *
 * reboot doesn't sync: do that yourself before calling this.
 */
SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,
                void __user *, arg)
{
        ...
        switch (cmd) {
        case LINUX_REBOOT_CMD_RESTART:
                kernel_restart(NULL);
                break;
        ...
        case LINUX_REBOOT_CMD_RESTART2:
                if (strncpy_from_user(&buffer[0], arg, sizeof(buffer) - 1) < 0) {
                        ret = -EFAULT;
                        break;
                }
                buffer[sizeof(buffer) - 1] = '\0';

                kernel_restart(buffer);
                break;
        ...
轉成 syscall 介面 (reboot)


User Space: bionic

libc/include/sys/reboot.h
extern int reboot(int  reboot_type);
extern int __reboot(int, int, int, void *);

在 android framework 中..
framework/base/core/jni/android_os_Power.cpp:
static void android_os_Power_reboot(JNIEnv *env, jobject clazz, jstring reason)
{
    sync();
#ifdef HAVE_ANDROID_OS
    if (reason == NULL) {
        reboot(RB_AUTOBOOT);
    } else {
        const char *chars = env->GetStringUTFChars(reason, NULL);
        __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,
                 LINUX_REBOOT_CMD_RESTART2, (char*) chars);
        env->ReleaseStringUTFChars(reason, chars);  // In case it fails.
    }
    jniThrowIOException(env, errno);
#endif
}

2013年11月25日 星期一

http://roger.steneteg.org/299/mount-mtp-device-on-debian-7-wheezy/ dh_make 和fakeroot build deb 的方法挺神奇的。

2013年11月21日 星期四

try ubuntu 13.10 -- for building android 2.3.7

都選 english,裝完開機後 會出現要你裝完剩下的 language,這時後可以加上 Chinese(Traditional)

裝完 4G
java6 比較麻煩,要加入 ppa.
ref : How to Install Oracle Java JDK 6 in Ubuntu 13.10 Saucy Salamander
大概就是
#sudo add-apt-repository ppa:webupd8team/java
#sudo apt-get update
#sudo apt-get install oracle-java6-installer
 會出現確認按鍵,之後開始 download...
#sudo apt-get install oracle-java6-set-default
以後要刪除的話...
#sudo apt-get purge oracle-java6-installer
然後 follow 這一篇, 改 default gcc 為 4.4
之後把需要的 build tool 都裝起來 (ref: google android)
現在用到5G

repo sync 完用掉 16G.


try build...

說缺 libgmp.so.3, 是 package libgmp3c2
只好 ref: http://packages.ubuntu.com/search?keywords=libgmp3c2
加入舊版 repo 到 sources.list:
deb http://cz.archive.ubuntu.com/ubuntu quantal main universe 
再 apt-get update, apt-get install libgmp3c2


出現 error: Dalvik 有不認識 rilm==> 加 include resource.h

/usr/include/zlib.h:34: fatal error: zconf.h: No such file or directory

因為 ubuntu 13.10 把 zconf.h 改放到 /usr/include/x86_64 下了。
所以手動建 link 到 /usr/include

build 玩用掉 21G

2013年11月18日 星期一

i2c register in linux

linux kernel 在 register i2c device 時,會一一去 check 同一個 i2c 中,是不是有child 跟你的 id 一樣,
如果有,就 Failed regiser i2c device

driver/i2c/i2c-core.c

i2c_check_addr_busy( )

static int __i2c_check_addr_busy(struct device *dev, void *addrp)
{
        struct i2c_client       *client = i2c_verify_client(dev);
        int                     addr = *(int *)addrp;

        if (client && client->addr == addr)
                return -EBUSY;
        return 0;
}

... 應該要 print 一下 client->name.
這樣才知道 誰衝突了。

2013年11月14日 星期四

糟糕,哪台 e431 今天說:
Message from syslogd@squeeze at Nov 14 18:38:17 ...
 kernel:[35971.171859] journal commit I/O error
然後有 "beeeeee!"

2013年11月11日 星期一

wheezy... dell n1418

安裝很順利,就是在選target disk 時,要注意外接 esata 和內建的差別。
我的 esata 是 /dev/sdb

最後安裝 grub 時,他說有偵測到 內建 hd 的 win7,
並且說可以卻安裝。
但是這是把 grub 裝到內建 hd。
這樣會 fail
-- 雖然 grub 可以正確 boot win7,但是沒有外接 esata 的話,grub 會說 fail

所以要選 no,然後手動輸入... /dev/sdb
說是裝在 sdb 的master boot record
-- 所以一開始的安裝位置要記起來,是 sdb, 還是 sdc

裝完啟動後 gnome3 boot fail -- 說是 display driver 有問題。
lspci 看一下... VGA 是..
VGA Compatile controller: Advanced Micro Device [AMD] nee ATI Madison [Radeon HD 5000M Series]

google 一下 'HD5000M wheezy' 一樣出現那一頁...ATIProprietary

follow link ..
在 source 中加入 non-free:
# Debian 7 "Wheezy"
deb http://http.debian.net/debian/ wheezy main contrib non-free


安裝 fglrx 和 build module 時需要的 kernel header:
# aptitude update
# aptitude -r install linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') fglrx-driver
install 過程會出現要作 aticonfig 的提示,紀錄一下,裝完作一次。

裝完後,follow 剛剛的指示:
$sudo aticonfig --initial
>
做完後重開。
正確進入 gnome3 (雖然 gnome3 也沒比較好用..)


for building android..
sudo apt-get install gcc-4.4 g++-4.4 gcc-4.4-multilib g++-4.4-multilib

update-alternatives, set 4.4 higher priority: --- seems not necessary.
ref : this

just use commands:
make CC=gcc-4.4 CXX=g++-4.4 
to build android,.. ..結果 webkit , webcore 出現問題,大概是 webkit 有字己的 Makefile,沒有吃環境變數,
所以還是要改:
charles-chang@whell:~/speedsnail/android/external/webkit$ git diff
diff --git a/WebCore/dom/make_names.pl b/WebCore/dom/make_names.pl
index 083e309..4494ee7 100755
--- a/WebCore/dom/make_names.pl
+++ b/WebCore/dom/make_names.pl
@@ -47,7 +47,7 @@ my %tags = ();
 my %attrs = ();
 my %parameters = ();
 my $extraDefines = 0;
-my $preprocessor = "/usr/bin/gcc -E -P -x c++";
+my $preprocessor = "/usr/bin/gcc -E -x c++";



Still have problems .. so, use update-alternatives to choose the default gcc versions:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 50 --slave /usr/bin/g++ g++ /usr/bin/g++-4.4 --slave /usr/bin/gcov gcov /usr/bin/gcov-4.4

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7 --slave /usr/bin/gcov gcov /usr/bin/gcov-4.7
OK, check..
sudo update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path              Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gcc-4.4   50        auto mode
  1            /usr/bin/gcc-4.4   50        manual mode
  2            /usr/bin/gcc-4.7   40        manual mode

Press enter to keep the current choice[*], or type selection number: 


一樣時間快了 8 hr 的問題。
一樣是 ref local(bios) time。
但是 wheezy 時間設定已經不用 rc.S,改用/etc/adjtime
所以/etc/adjtime 的最後一行由 UTC 改為 LOCAL 就可以。
-- 還要記得改 bios


中文輸入:
用 gcin 和 酷音。
就安裝 gcin-chewing 就可以,他會順便安裝 im config

裝完到 application -- system tool --- input method 選 gcin 就可以。
然後要重開機,輸入語系切換才會在右下出現。

再到 application -- system tool -- 中文輸入 選酷音,結果很難用。
因為 backspace 好像沒有動作,要切回英文才有用。
所以還是用 詞音。
使用 就一般。右shift 可以切換 中英。
但是 default 最後選 標點符號會自動 輸入,要記得 uncheck 調。
這樣就一樣了。



virtualbox, ref: https://www.virtualbox.org/wiki/Linux_Downloads
把 apt/source.list 加入virtualbox dep,然後 download key,
就可以 install virtualbox 了。



字型:
sudo apt-get install ttf-wqy-zenhei ttf-wqy-microhei xfonts-wqy
sudo  apt-get install ttf-arphic-ukai ttf-arphic-uming




wifi
follow 以前 squeeze 的作法 (http://r40eubuntu.blogspot.tw/2011/12/enable-dell-inspiron-n4010-wireless.html)

到 debian wiki 去。
apt-get install firmware-brcm80211
然後 modprobe -r brcmsmac

lsmod 看一下有沒有 load 進去。
iwconfig 可以列出 wlan0

好像稍等一下,gnome3 右上的 network manager 就會出現 wireless

.... 連線一陣子,就不通了。
重開機竟然開不了,好像是 display driver 卡住。

只好進 mantain mode, 然後用 ctrl-D 繼續開機。
開進系統後,按下螢幕 tool 就變成花畫面。
猜是 display driver 和 wifi 衝突。
只好移除 (rmmod, purge) 這個 package.

2013年11月6日 星期三

adb shell ls 顯示亂碼

只有在 windows 系統cmd上用 adb 才會有這個問題。
是 shell 的color code 導致。
windows cmd 不認識這個。

解決方法就是叫 shell 不要使用 color:
# export LS_COLORS=none

可以寫在 init.rc 裡。

ref: http://forum.geeksphone.com/index.php?topic=1093.0

標籤

網誌存檔