/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
ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上
service recovery /sbin/recovery
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 
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);
}
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)extern int reboot(int reboot_type); extern int __reboot(int, int, int, void *);
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
}
#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
deb http://cz.archive.ubuntu.com/ubuntu quantal main universe再 apt-get update, apt-get install libgmp3c2
/usr/include/zlib.h:34: fatal error: zconf.h: No such file or directory
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;
}
VGA Compatile controller: Advanced Micro Device [AMD] nee ATI Madison [Radeon HD 5000M Series]
# Debian 7 "Wheezy" deb http://http.debian.net/debian/ wheezy main contrib non-free
# aptitude update # aptitude -r install linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') fglrx-driverinstall 過程會出現要作 aticonfig 的提示,紀錄一下,裝完作一次。
$sudo aticonfig --initial> 做完後重開。
sudo apt-get install gcc-4.4 g++-4.4 gcc-4.4-multilib g++-4.4-multilib
make CC=gcc-4.4 CXX=g++-4.4to 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++";
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.7OK, 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:
sudo apt-get install ttf-wqy-zenhei ttf-wqy-microhei xfonts-wqy sudo apt-get install ttf-arphic-ukai ttf-arphic-uming
apt-get install firmware-brcm80211然後 modprobe -r brcmsmac
# export LS_COLORS=none