IAMROOT.ORG에서 세미나를 한 문서

2010년 11월 20일, 서울대학교에서 함. 끝나고, 동호회 사람들이랑 찐하게 뒷풀이.. 


Posted by blee
,


cd C:\and\android-sdk-windows-1.5_r3\tools

* emulator 실행

emulator.exe -avd blee

* shell 를 보고 싶을때

adb shell

* 파일 복사 ( push 는 emulator 로 복사 )

adb push acp.exe /data/acp.exe

* 파일 복사 ( pull 는 emulator 에서 가져 오는것 )
adb pull /init.rc ttt

* shell 에서 insmod 를 입력하면 .. 아래와 같이 나온다.
# insmod
insmod
usage: insmod <module.o>
#


hardware/libhardware/modules/README.android

# cd /system/lib/hw/
# ls -l
-rw-r--r-- root     root         9812 2009-07-01 00:24 sensors.goldfish.so
-rw-r--r-- root     root         5292 2009-07-01 00:26 lights.goldfish.so

'안드로이드 > 플랫폼' 카테고리의 다른 글

Goldfish-emulator용 커널 빌드  (0) 2009.10.20
SystemServer, MediaServer  (0) 2009.10.12
결과물  (0) 2009.09.30
service_manager 흐름  (0) 2009.08.25
init 분석 open 하는 디바이스 - null, kmsg  (0) 2009.08.18
Posted by blee
,
안드로이드 스터디모임에서 첫 결과물이 나왔습니다.

init 프로세스 정리 문서 :

* 스프링노트 사라짐.

IAMROOT 에서 세미나:


세미나(0.2)20101118.pdf





'안드로이드 > 플랫폼' 카테고리의 다른 글

ADB 사용  (0) 2009.10.18
SystemServer, MediaServer  (0) 2009.10.12
service_manager 흐름  (0) 2009.08.25
init 분석 open 하는 디바이스 - null, kmsg  (0) 2009.08.18
init 분석 - 메인루프의 poll 의 timeout  (0) 2009.07.28
Posted by blee
,
service manager 의 binder_parse 에서 처리하는 cmd 는 BR_NOOP, BR_TRANSACTION, BR_TRANSACTION_COMPLETE 입니다.

BR_NOOP, BR_TRANSACTION 는 항상 같이 붙어서 옵니다. 만찮가지로 BR_NOOP, BR_TRANSACTION_COMPLETE 는 항상 같이 붙어서 옵니다.

수신한 데이타의 포인터 처리는 mmap 의 영역내에 존재하고, 송신 하기 위한 데이타의 포인터 처리는 user 의 영역에 존재 합니다. ( binder 내부에서 사용자 영역을 mmap 영역으로 복사가 이루어 질 것이라고 예상합니다. )

다음은 로그를 찍어 가며 분석한 메모리 공간에서 포인터 처리와 서비스 핸들러 ( svcmgr_handler ) 에서 처리 하는 cmd 인 SVC_MGR_ADD_SERVICE, SVC_MGR_CHECK_SERVICE 에 대한 내용입니다.

binder_io 구조체가 두개 있는데, msg , reply 입니다. msg 는 수신한 데이타를 읽기 위한 포인터 조작에 사용되며, reply 는 송신할 데이타를 쓰기 위한포인터 조작에 사용됩니다. data, off 는 각각 읽거나 쓰면서 변경 되고,
data0, off0 는 초기 설정 값을 유지 합니다.

'안드로이드 > 플랫폼' 카테고리의 다른 글

SystemServer, MediaServer  (0) 2009.10.12
결과물  (0) 2009.09.30
init 분석 open 하는 디바이스 - null, kmsg  (0) 2009.08.18
init 분석 - 메인루프의 poll 의 timeout  (0) 2009.07.28
init 분석 - firmware  (0) 2009.07.28
Posted by blee
,

void open_devnull_stdio(void) 함수에서 "/dev/__null__" 이름의 노드를 만들어서 open 후 곧 삭제 합니다.

static const char *name = "/dev/__null__";
if (mknod(name, S_IFCHR | 0600, (1 << 8) | 3) == 0) {
:


void log_init(void) 함수에서 "/dev/__kmsg__" 이름의 노드를 만들어서 open 후 곧 삭제 합니다.

static const char *name = "/dev/__kmsg__";
if (mknod(name, S_IFCHR | 0600, (1 << 8) | 11) == 0) {
:

노드는 open 후 모두 삭제 하고, __null__ 를 stdin, stdout, stderr 로 지정 합니다.
__kmsg__ 는 로그를 남기기 위해서 open 하며, __kmsg__ 는 내부적으로 printk 함수를 사용해서 로그를 남깁니다.

커널 소스 kernel/drivers/char/mem.c 에서 정의된 memory device 목록 메이져 번호는 모두 1 번입니다.

static const struct {
    unsigned int        minor;
    char            *name;
    umode_t         mode;
    const struct file_operations    *fops;
} devlist[] = { /* list of minor devices */
#ifdef CONFIG_DEVMEM
    {1, "mem",     S_IRUSR | S_IWUSR | S_IRGRP, &mem_fops},
#endif
#ifdef CONFIG_DEVKMEM
    {2, "kmem",    S_IRUSR | S_IWUSR | S_IRGRP, &kmem_fops},
#endif
    {3, "null",    S_IRUGO | S_IWUGO,           &null_fops},
#ifdef CONFIG_DEVPORT
    {4, "port",    S_IRUSR | S_IWUSR | S_IRGRP, &port_fops},
#endif
    {5, "zero",    S_IRUGO | S_IWUGO,           &zero_fops},
    {7, "full",    S_IRUGO | S_IWUGO,           &full_fops},
    {8, "random",  S_IRUGO | S_IWUSR,           &random_fops},
    {9, "urandom", S_IRUGO | S_IWUSR,           &urandom_fops},
    {11,"kmsg",    S_IRUGO | S_IWUSR,           &kmsg_fops},
#ifdef CONFIG_CRASH_DUMP
    {12,"oldmem",    S_IRUSR | S_IWUSR | S_IRGRP, &oldmem_fops},
#endif
};

'안드로이드 > 플랫폼' 카테고리의 다른 글

결과물  (0) 2009.09.30
service_manager 흐름  (0) 2009.08.25
init 분석 - 메인루프의 poll 의 timeout  (0) 2009.07.28
init 분석 - firmware  (0) 2009.07.28
init 분석 - 안드로이드 보안 및 권한  (0) 2009.07.28
Posted by blee
,

poll 에서 사용하는 timeout 변수의 계산은 재 시작해야 하는 서비스의 시작 시간을 맞추기 위해서 입니다. 재 시작 할 서비스는 이전에 시작 한 시간에서 5 초 후에 재 시작을 해주는 룰을 적용하고 있습니다.

서비스가 시작되면 time_started 에 시작 시간을 지정합니다.
서비스의 시작은 service_start 함수에서 처리하며, 이 함수의 마지막 단계에서 서비스의 시작 시간을 gettime() 으로 지정합니다.
( gettime() 은 초 단위로 리턴합니다. )

svc->time_started = gettime();

다음은 init 의 메인 루프 코드 입니다.
여기서 중요한 것들은 restart_processes, process_needs_restart, timeout , wait_for_one_process 의 관계입니다.

 

for(;;) {
    :
        restart_processes();

        if (process_needs_restart) {
            timeout = (process_needs_restart - gettime()) * 1000;
            if (timeout < 0)
                timeout = 0;
        }

        nr = poll(ufds, fd_count, timeout);
        if (nr <= 0)
            continue;

        if (ufds[2].revents == POLLIN) {
            /* we got a SIGCHLD - reap and restart as needed */
            read(signal_recv_fd, tmp, sizeof(tmp));
            while (!wait_for_one_process(0))
                ;
            continue;
        }
     :
    }

서비스가 종료 되어, SIGCHLD 시그널을 받으면( 여러 논의가 있었지만 여기서는 이것만 주목 하겠습니다.)
wait_for_one_process 함수를 호출 합니다.
wait_for_one_process 에서 주목 할 점은 해당 서비스의 flags 에 SVC_RESTARTING 속성을 더합니다.
실제로 재 시작 시키지는 않습니다.

svc->flags |= SVC_RESTARTING;

이후 init 의 for 루프를 다시 돌아서 restart_processes 를 호출 합니다.

static void restart_processes()
{
    process_needs_restart = 0;
    service_for_each_flags(SVC_RESTARTING,
                           restart_service_if_needed);
}

restart_processes 함수에서 process_needs_restart 변수를 0 으로 초기화 하고,
서비스 리스트 중에서 flags 에 SVC_RESTARTING 속성이 있는 것에 한해서 restart_service_if_needed 함수를 호출 합니다.
여기서 주목할 점은 링크드 리스트를 돈다는 것입니다. process_needs_restart 를 restart_service_if_needed 함수 내에서 설정 또는 변경 하는데, 모든 리스트가 다 돌고 난 후에 그 process_needs_restart 값이 init 에서 사용 됩니다.

 

static void restart_service_if_needed(struct service *svc)
{
    time_t next_start_time = svc->time_started + 5;

    if (next_start_time <= gettime()) {
        svc->flags &= (~SVC_RESTARTING);
        service_start(svc);
        return;
    }

    if ((next_start_time < process_needs_restart) ||
        (process_needs_restart == 0)) {
        process_needs_restart = next_start_time;
    }
}

restart_service_if_needed 함수에서는 svc->time_started 변수를 참조하는데, 이는 위에서도 설명 했듯이
서비스의 시작 시간 이였습니다. next_start_time 변수는 서비스가 이전에 시작 되었던 시간에서 5초를 더한 시간입니다.

결국 서비스가 재 시작 되어야 할 시간입니다. 서비스가 재 시작되어야 할 시간이 지났으면, service_start 함수를 호출해서 해당 서비스를 시작 시킴니다.
아직 재 시작 시킬 시간이 안되었다면, process_needs_restart 를 갱신하게 됩니다.

process_needs_restart 값이 초기값(0)이면, 지금 서비스의 재 시작 시간으로 갱신 되지만,
이 서비스 보다 링크드 리스트의 이전에 있던 서비스에 의해 갱신된 process_needs_restart 값을 가질 수도  있습니다.
그래서 지금 서비스의 재 시작 시간이 이전 서비스의 재 시작 시간보다 작으면, 지금 서비스의 재 시작 시간으로 process_needs_restart 를 갱신합니다.


결국 재시작 하려고 하는 서비스 중 가장 먼저 재 시작 되어야 할 시간으로 process_needs_restart 가 갱신 됩니다.

다시 init 으로 돌아 와서

      if (process_needs_restart) {
            timeout = (process_needs_restart - gettime()) * 1000;
            if (timeout < 0)
                timeout = 0;
        }

 

timeout 값은 재 시작 되어야 할 서비스들 중에서 가장 먼저 재 시작 할 서비스의 재 시작 시간 만큼을 위한 대기 시간이 지정됩니다.

그리고 그 값을 poll 의 timeout 으로 지정합니다. poll 의 timeout 발생후 다시 restart_processes 함수를 호출 하게 됩니다.

'안드로이드 > 플랫폼' 카테고리의 다른 글

service_manager 흐름  (0) 2009.08.25
init 분석 open 하는 디바이스 - null, kmsg  (0) 2009.08.18
init 분석 - firmware  (0) 2009.07.28
init 분석 - 안드로이드 보안 및 권한  (0) 2009.07.28
프로세스, 기본 환경  (0) 2009.07.28
Posted by blee
,

오늘날 리눅스 커널에서 firmware를 사용하는 가장 광범위한 방법은 header file 에 static 하게 link 하는 것입니다.
이는 정책적으로 기술적으로 다음과 같은 이슈가 있습니다.

1. 드라이버의 firmware 는 업그레이드 되어 재배포 될 수 있습니다.
2. 비록 단 한번의 사용 일지라도 static 하게 link 된 firmware 는 영구히 메모리를 차지 합니다.
3. 사용자들은 firmware 를 메모리에서 해제하고, 드라이버를 제거하는 것에 대해 신경쓰지 않습니다.

그러한 이유로 request_firmware() 와 hotplug 간의 interface 나오게 된 것입니다.

다음의 리눅스에서 driver 와 hotplug 간의 일련의 절차 입니다.

kernel 에서 처리 : 
driver 초기화 시에 request_firmware 함수를 호출합니다.

  if(request_firmware(&fw_entry, $FIRMWARE, device) == 0)
  copy_fw_to_device(fw_entry->data, fw_entry->size);
 release(fw_entry);

$FIRMWARE 는 파일 이름입니다. 이는 제조사에서 배포되는 특정 hw가 동작 되도록 하는 code image 일 것입니다.
request_firmware -> _request_firmware -> fw_setup_device 함수를 거치면서,
/sys/class/firmware/xxx/loading, /sys/class/firmware/xxx/data 파일을 생성합니다.
 
( hotplug 를 호출 하기 전에 firmware 를 __start_builtin_fw ~ __end_builtin_fw 영역에서 먼저 찾습니다.
이는 kernel 에 static 하게 포함된 firmware 들 중에 맞는 것이 있는지 먼저 검색합니다. 이 영역에 있다면
hotplug 관련 절차를 거치지 않습니다. )
 
그리고 사용자 공간의 hotplug 가 호출 됩니다.
request_firmware 함수는 block 됩니다.

( /sys/class/firmware/timeout 에 지정된 시간 만큼 입니다. )

사용자 공간 - hotplug 에서 처리 :

사용자 영역에서 /sys/class/firmware/xxx/loading, /sys/class/firmware/xxx/data 파일이 나타나며,
 $DEVPATH, $FIRMWARE 는 환경변수로 전달 됩니다.

 HOTPLUG_FW_DIR=/usr/lib/hotplug/firmware/

 echo 1 > /sys/$DEVPATH/loading
 cat $HOTPLUG_FW_DIR/$FIRMWARE > /sysfs/$DEVPATH/data
 echo 0 > /sys/$DEVPATH/loading

 /sys/$DEVPATH/loading 에 1 를 write 하므로써, firmware 복사가 시작됨을 알립니다.
펌웨어 파일 $HOTPLUG_FW_DIR/$FIRMWARE 를 /sysfs/$DEVPATH/data 로 복사를 합니다.
/sys/$DEVPATH/loading 에 0 를 write 하므로써, firmware 복사가 완료됨을 알립니다. request_firmware 함수는 성공을 리턴합니다.
/sys/$DEVPATH/loading 에 -1 를 write 하면, 중지되며, request_firmware 함수는 실패를 리턴합니다.
 
kernel 에서 처리 :
request_firmware() 함수가 return 되면, fw_entry->data, fw_entry->size 에 firmware와 size 정보가 저장됩니다.
이를 driver 에서 특정 hw 에 맞는 작업을 수행하면 됩니다.

사용자 공간으로 전달되는 환경변수 :

SUBSYSTEM=module
DEVPATH=/module/firmware_sample_driver
LD_LIBRARY_PATH=:/user/app/lib
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/user/app/bin
ACTION=add
PWD=/
SHLVL=1
HOME=/
SEQNUM=933
_=/usr/bin/env

정리 :
안드로이드 플래폼의 init 에서 uevent 를 이용하여, add 절차를 거치면서, firmware 를 필요로 하는 driver에서
firmware 를 전달 하는 과정(hotplug 와 driver 사이의 일어나는 일련의 절차)를 처리 해주고 있는 것입니다.

static int load_firmware(int fw_fd, int loading_fd, int data_fd)
{
    struct stat st;
    long len_to_copy;
    int ret = 0;

    if(fstat(fw_fd, &st) < 0)                     <--(주석) fstat는 열린 파일이나 핸들과 연관된 디렉토리의 정보를 stat 구조체에 저장
        return -1;
    len_to_copy = st.st_size;

//------------------------------------------------------------ 
//! echo 1 > /sys/$DEVPATH/loading
//------------------------------------------------------------ 
    write(loading_fd, "1", 1);  /* start transfer */

//------------------------------------------------------------ 
//! cat $HOTPLUG_FW_DIR/$FIRMWARE > /sysfs/$DEVPATH/data
//------------------------------------------------------------ 
    while (len_to_copy > 0) {
        char buf[PAGE_SIZE];
        ssize_t nr;

        nr = read(fw_fd, buf, sizeof(buf));    
        if(!nr)
            break;
        if(nr < 0) {
            ret = -1;
            break;
        }

        len_to_copy -= nr;
        while (nr > 0) {
            ssize_t nw = 0;

            nw = write(data_fd, buf + nw, nr); 
            if(nw <= 0) {
                ret = -1;
                goto out;
            }
            nr -= nw;
        }
    }

//------------------------------------------------------------ 
// echo 0 > /sys/$DEVPATH/loading 
//------------------------------------------------------------ 
out:
    if(!ret)
        write(loading_fd, "0", 1);  /* successful end of transfer */
    else
        write(loading_fd, "-1", 2); /* abort transfer */

    return ret;
}

참고 :  
kernel/Documentation/firmware_class/README
linux device driver model 관련 문서


Posted by blee
,

http://d.android.com/guide/topics/security/security.html

위 사이트는 안드로이드 security, permission 정책에 관한 문서 입니다.

문서의 서론만 옮겨 봤습니다.

Security and Permissions
Android is a multi-process system, in which each application (and parts of the system) runs in its own process. Most security between applications and the system is enforced at the process level through standard Linux facilities, such as user and group IDs that are assigned to applications. Additional finer-grained security features are provided through a "permission" mechanism that enforces restrictions on the specific operations that a particular process can perform, and per-URI permissions for granting ad-hoc access to specific pieces of data.
보안 및 권한
안드로이드는 멀티-프로세스 시스템이다, 시스템의 각 응용 프로그램은 자체 프로세스에서 실행됩니다. 응용 프로그램과 시스템 사이의 대부분의 보안은 프로세스 수준에서 애플리케이션에 할당된 사용자와 그룹 ID등으로 표준 리눅스 환경을 통해 시행됩니다. 추가적인 세밀한 보안 기능은 특정 프로세스 수행 할수 있는 구체적인 작업에 대한 제한을 적용하는 "permission" 메커니즘과 지정된 데이타에 ad-hoc 접권의 하가를 위한 per-URI 권한을 통해 제공되어 집니다.

이미 알고 있듯이 전통적인 linux 환경의 /etc/passwd 파일을 이용한 사용자 및 /etc/group 파일을 이용한 그룹 설정을 사용하지 않는 다는 것이 인상적입니다.

application 권한은 설치할때, 이러한 permission 이 결정되고, 이 후 변경하지 못 한다라고 하는데, 모든 안드로이드 어플리케이션은 AndroidManifest.xml 파일을 가지고 있으며, 이 파일을 통해서 권한 설정을 합니다. 그리고 안드로이드 어플리케이션은 인증서로 서명을 해야 합니다. 이 부분은 프로그램을 직접 만들어 봐야 겠네요 -_-;

안드로이드 어플리케이션에 대한 분석이라는 글에서 AndroidManifest.xml 파일에 대한 언급이 있어서 링크 합니다.  http://breathair.tistory.com/70

그렇다면, 안드로이드는 어떠한 사용자와 그룹으로 관리하는가? 이에 대한 인터넷 자료를 구할 수가 없었습니다. 그래서 직접 소스를 올렸습니다.

android_filesystem_config.h 파일에 USER ID, GROUP ID 가 정의 되어 있습니다.
( 소스경로 : system/core/include/private/android_filesystem_config.h )

android_dirs, android_files 의 배열은 mkrootfs 와 mkyaffs2image 툴로 루트 파일 시스템을 만들 때 적용된다고 주석에 나와 있습니다.
( mkbootfs 소스경로 : system/core/cpio/mkbootfs.c )

devices.c 에 정의된 devperms 배열은 init 에서 uevent 처리 하며, /dev/ 이하 파일을 만들어 줍니다.
( 소스경로 : system/core/init/devices.c )

USER ID와 GROUP ID 를 아래와 같이 분류해논 이유를 찾을려고 했는데, 잘 못 찾겠네요. -_-;

//---------------------------------------------------------------------------
// system/core/include/private/android_filesystem_config.h
//---------------------------------------------------------------------------
/* This is the master Users and Groups config for the platform.
** DO NOT EVER RENUMBER.
*/

#define AID_ROOT             0  /* traditional unix root user */
#define AID_SYSTEM        1000  /* system server */
#define AID_RADIO         1001  /* telephony subsystem, RIL */
#define AID_BLUETOOTH     1002  /* bluetooth subsystem */
#define AID_GRAPHICS      1003  /* graphics devices */
#define AID_INPUT         1004  /* input devices */
#define AID_AUDIO         1005  /* audio devices */
#define AID_CAMERA        1006  /* camera devices */
#define AID_LOG           1007  /* log devices */
#define AID_COMPASS       1008  /* compass device */
#define AID_MOUNT         1009  /* mountd socket */
#define AID_WIFI          1010  /* wifi subsystem */
#define AID_ADB           1011  /* android debug bridge (adbd) */
#define AID_INSTALL       1012  /* group for installing packages */
#define AID_MEDIA         1013  /* mediaserver process */
#define AID_DHCP          1014  /* dhcp client */
#define AID_SHELL         2000  /* adb and debug shell user */
#define AID_CACHE         2001  /* cache access */
#define AID_DIAG          2002  /* access to diagnostic resources */

/* The 3000 series are intended for use as supplemental group id's only.
 * They indicate special Android capabilities that the kernel is aware of. */
#define AID_NET_BT_ADMIN  3001  /* bluetooth: create any socket */
#define AID_NET_BT        3002  /* bluetooth: create sco, rfcomm or l2cap sockets */
#define AID_INET          3003  /* can create AF_INET and AF_INET6 sockets */
#define AID_NET_RAW       3004  /* can create raw INET sockets */
#define AID_MISC          9998  /* access to misc storage */
#define AID_NOBODY        9999
#define AID_APP          10000 /* first app user */

static struct android_id_info android_ids[] = {
    { "root",      AID_ROOT, },
    { "system",    AID_SYSTEM, },
    { "radio",     AID_RADIO, },
    { "bluetooth", AID_BLUETOOTH, },
    { "graphics",  AID_GRAPHICS, },
    { "input",     AID_INPUT, },
    { "audio",     AID_AUDIO, },
    { "camera",    AID_CAMERA, },
    { "log",       AID_LOG, },
    { "compass",   AID_COMPASS, },
    { "mount",     AID_MOUNT, },
    { "wifi",      AID_WIFI, },
    { "dhcp",      AID_DHCP, },
    { "adb",       AID_ADB, },
    { "install",   AID_INSTALL, },
    { "media",     AID_MEDIA, },
    { "shell",     AID_SHELL, },
    { "cache",     AID_CACHE, },
    { "diag",      AID_DIAG, },
    { "net_bt_admin", AID_NET_BT_ADMIN, },
    { "net_bt",    AID_NET_BT, },
    { "inet",      AID_INET, },
    { "net_raw",   AID_NET_RAW, },
    { "misc",      AID_MISC, },
    { "nobody",    AID_NOBODY, },
};

/* Rules for directories.
** These rules are applied based on "first match", so they
** should start with the most specific path and work their
** way up to the root.
*/

static struct fs_path_config android_dirs[] = {
    { 00770, AID_SYSTEM, AID_CACHE,  "cache" },
    { 00771, AID_SYSTEM, AID_SYSTEM, "data/app" },
    { 00771, AID_SYSTEM, AID_SYSTEM, "data/app-private" },
    { 00771, AID_SYSTEM, AID_SYSTEM, "data/dalvik-cache" },
    { 00771, AID_SYSTEM, AID_SYSTEM, "data/data" },
    { 00771, AID_SHELL,  AID_SHELL,  "data/local/tmp" },
    { 00771, AID_SHELL,  AID_SHELL,  "data/local" },
    { 01771, AID_SYSTEM, AID_MISC,   "data/misc" },
    { 00770, AID_DHCP,   AID_DHCP,   "data/misc/dhcp" },
    { 00771, AID_SYSTEM, AID_SYSTEM, "data" },
    { 00750, AID_ROOT,   AID_SHELL,  "sbin" },
    { 00755, AID_ROOT,   AID_SHELL,  "system/bin" },
    { 00755, AID_ROOT,   AID_SHELL,  "system/xbin" },
    { 00777, AID_ROOT,   AID_ROOT,   "system/etc/ppp" }, /* REMOVE */
    { 00777, AID_ROOT,   AID_ROOT,   "sdcard" },
    { 00755, AID_ROOT,   AID_ROOT,   0 },
};


/* Rules for files.
** These rules are applied based on "first match", so they
** should start with the most specific path and work their
** way up to the root. Prefixes ending in * denotes wildcard
** and will allow partial matches.
*/
static struct fs_path_config android_files[] = {
    { 00555, AID_ROOT,      AID_ROOT,      "system/etc/ppp/ip-up" },
    { 00555, AID_ROOT,      AID_ROOT,      "system/etc/ppp/ip-down" },
    { 00440, AID_ROOT,      AID_SHELL,     "system/etc/init.goldfish.rc" },
    { 00550, AID_ROOT,      AID_SHELL,     "system/etc/init.goldfish.sh" },
    { 00440, AID_ROOT,      AID_SHELL,     "system/etc/init.trout.rc" },
    { 00550, AID_ROOT,      AID_SHELL,     "system/etc/init.ril" },
    { 00550, AID_ROOT,      AID_SHELL,     "system/etc/init.testmenu" },
    { 00550, AID_ROOT,      AID_SHELL,     "system/etc/init.gprs-pppd" },
    { 00550, AID_DHCP,      AID_SHELL,     "system/etc/dhcpcd/dhcpcd-run-hooks" },
    { 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/dbus.conf" },
    { 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/bluez/hcid.conf" },
    { 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/bluez/input.conf" },
    { 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/bluez/audio.conf" },
    { 00440, AID_RADIO,     AID_AUDIO,     "/system/etc/AudioPara4.csv" },
    { 00644, AID_SYSTEM,    AID_SYSTEM,    "data/app/*" },
    { 00644, AID_SYSTEM,    AID_SYSTEM,    "data/app-private/*" },
    { 00644, AID_APP,       AID_APP,       "data/data/*" },
        /* the following two files are INTENTIONALLY set-gid and not set-uid.
         * Do not change. */
    { 02755, AID_ROOT,      AID_NET_RAW,   "system/bin/ping" },
    { 02755, AID_ROOT,      AID_INET,      "system/bin/netcfg" },
        /* the following four files are INTENTIONALLY set-uid, but they
     * are NOT included on user builds. */
    { 06755, AID_ROOT,      AID_ROOT,      "system/xbin/su" },
    { 06755, AID_ROOT,      AID_ROOT,      "system/xbin/librank" },
    { 06755, AID_ROOT,      AID_ROOT,      "system/xbin/procrank" },
    { 06755, AID_ROOT,      AID_ROOT,      "system/xbin/procmem" },
    { 00755, AID_ROOT,      AID_SHELL,     "system/bin/*" },
    { 00755, AID_ROOT,      AID_SHELL,     "system/xbin/*" },
    { 00750, AID_ROOT,      AID_SHELL,     "sbin/*" },
    { 00755, AID_ROOT,      AID_ROOT,      "bin/*" },
    { 00750, AID_ROOT,      AID_SHELL,     "init*" },
    { 00644, AID_ROOT,      AID_ROOT,       0 },
};

//---------------------------------------------------------------------------
// system/core/init/devices.c
//---------------------------------------------------------------------------

static struct perms_ devperms[] = {
    { "/dev/null",          0666,   AID_ROOT,       AID_ROOT,       0 },
    { "/dev/zero",          0666,   AID_ROOT,       AID_ROOT,       0 },
    { "/dev/full",          0666,   AID_ROOT,       AID_ROOT,       0 },
    { "/dev/ptmx",          0666,   AID_ROOT,       AID_ROOT,       0 },
    { "/dev/tty",           0666,   AID_ROOT,       AID_ROOT,       0 },
    { "/dev/random",        0666,   AID_ROOT,       AID_ROOT,       0 },
    { "/dev/urandom",       0666,   AID_ROOT,       AID_ROOT,       0 },
    { "/dev/ashmem",        0666,   AID_ROOT,       AID_ROOT,       0 },
    { "/dev/binder",        0666,   AID_ROOT,       AID_ROOT,       0 },

        /* logger should be world writable (for logging) but not readable */
    { "/dev/log/",          0662,   AID_ROOT,       AID_LOG,        1 },

        /* these should not be world writable */
    { "/dev/android_adb",   0660,   AID_ADB,        AID_ADB,        0 },
    { "/dev/android_adb_enable",   0660,   AID_ADB,        AID_ADB,        0 },
    { "/dev/ttyMSM0",       0600,   AID_BLUETOOTH,  AID_BLUETOOTH,  0 },
    { "/dev/ttyHS0",        0600,   AID_BLUETOOTH,  AID_BLUETOOTH,  0 },
    { "/dev/uinput",        0600,   AID_BLUETOOTH,  AID_BLUETOOTH,  0 },
    { "/dev/alarm",         0664,   AID_SYSTEM,     AID_RADIO,      0 },
    { "/dev/tty0",          0660,   AID_ROOT,       AID_SYSTEM,     0 },
    { "/dev/graphics/",     0660,   AID_ROOT,       AID_GRAPHICS,   1 },
    { "/dev/hw3d",          0660,   AID_SYSTEM,     AID_GRAPHICS,   0 },
    { "/dev/input/",        0660,   AID_ROOT,       AID_INPUT,      1 },
    { "/dev/eac",           0660,   AID_ROOT,       AID_AUDIO,      0 },
    { "/dev/cam",           0660,   AID_ROOT,       AID_CAMERA,     0 },
    { "/dev/pmem",          0660,   AID_SYSTEM,     AID_GRAPHICS,   0 },
    { "/dev/pmem_gpu",      0660,   AID_SYSTEM,     AID_GRAPHICS,   1 },
    { "/dev/pmem_adsp",     0660,   AID_SYSTEM,     AID_AUDIO,      1 },
    { "/dev/pmem_camera",   0660,   AID_SYSTEM,     AID_CAMERA,     1 },
    { "/dev/oncrpc/",       0660,   AID_ROOT,       AID_SYSTEM,     1 },
    { "/dev/adsp/",         0660,   AID_SYSTEM,     AID_AUDIO,      1 },
    { "/dev/mt9t013",       0660,   AID_SYSTEM,     AID_SYSTEM,     0 },
    { "/dev/akm8976_daemon",0640,   AID_COMPASS,    AID_SYSTEM,     0 },
    { "/dev/akm8976_aot",   0640,   AID_COMPASS,    AID_SYSTEM,     0 },
    { "/dev/akm8976_pffd",  0640,   AID_COMPASS,    AID_SYSTEM,     0 },
    { "/dev/msm_pcm_out",   0660,   AID_SYSTEM,     AID_AUDIO,      1 },
    { "/dev/msm_pcm_in",    0660,   AID_SYSTEM,     AID_AUDIO,      1 },
    { "/dev/msm_pcm_ctl",   0660,   AID_SYSTEM,     AID_AUDIO,      1 },
    { "/dev/msm_snd",       0660,   AID_SYSTEM,     AID_AUDIO,      1 },
    { "/dev/msm_mp3",       0660,   AID_SYSTEM,     AID_AUDIO,      1 },
    { "/dev/msm_audpre",    0660,   AID_SYSTEM,     AID_AUDIO,      0 },
    { "/dev/htc-acoustic",  0660,   AID_SYSTEM,     AID_AUDIO,      0 },
    { "/dev/smd0",          0640,   AID_RADIO,      AID_RADIO,      0 },
    { "/dev/qmi",           0640,   AID_RADIO,      AID_RADIO,      0 },
    { "/dev/qmi0",          0640,   AID_RADIO,      AID_RADIO,      0 },
    { "/dev/qmi1",          0640,   AID_RADIO,      AID_RADIO,      0 },
    { "/dev/qmi2",          0640,   AID_RADIO,      AID_RADIO,      0 },
    { NULL, 0, 0, 0, 0 },
};

'안드로이드 > 플랫폼' 카테고리의 다른 글

init 분석 - 메인루프의 poll 의 timeout  (0) 2009.07.28
init 분석 - firmware  (0) 2009.07.28
프로세스, 기본 환경  (0) 2009.07.28
안드로이드 부팅과정  (0) 2009.07.28
안드로이드 커널 빌드  (0) 2009.07.28
Posted by blee
,
# ps
USER   PID   PPID  VSIZE RSS   WCHAN    PC         NAME
root     1     0     280   192   c00bd90c 0000c8dc S /init
root     2     0     0     0     c005bd7c 00000000 S kthreadd
root     3     2     0     0     c004c6d4 00000000 S ksoftirqd/0
root     4     2     0     0     c0077b58 00000000 S watchdog/0
root     5     2     0     0     c00584f0 00000000 S events/0
root     6     2     0     0     c00584f0 00000000 S khelper
root     9     2     0     0     c00584f0 00000000 S netns
root     14    2     0     0     c00584f0 00000000 S suspend
root     151   2     0     0     c00584f0 00000000 S kblockd/0
root     157   2     0     0     c00584f0 00000000 S ksuspend_usbd
root     162   2     0     0     c022dc24 00000000 S khubd
root     165   2     0     0     c02424f0 00000000 S kseriod
root     189   2     0     0     c008f080 00000000 S pdflush
root     190   2     0     0     c008f080 00000000 S pdflush
root     191   2     0     0     c00938cc 00000000 S kswapd0
root     193   2     0     0     c00584f0 00000000 S aio/0
root     194   2     0     0     c00584f0 00000000 S nfsiod
root     902   2     0     0     c021d508 00000000 S mtdblockd
root     979   2     0     0     c00584f0 00000000 S rpciod/0
root     1777  1     740   328   c004a204 afe0d08c S /system/bin/sh
system   1778  1     808   264   c0257cec afe0c45c S /system/bin/servicemanager
root     1780  1     840   360   c00bd90c afe0c584 S /system/bin/vold
root     1781  1     668   264   c02678d4 afe0cdec S /system/bin/debuggerd
radio    1782  1     4372  684   ffffffff afe0cacc S /system/bin/rild
root     1783  1     69252 19788 c00bd90c afe0c584 S zygote
media    1784  1     16232 3620  ffffffff afe0c45c S /system/bin/mediaserver
bluetooth 1786  1     1168  568   c00bd90c afe0d25c S /system/bin/dbus-daemon
root     1788  1     804   304   c02c553c afe0c1bc S /system/bin/installd
root     1794  1     1268  124   ffffffff 0000e8f4 S /sbin/adbd
system   1807  1783  185064 26652 ffffffff afe0c45c S system_server
radio    1846  1783  109532 17840 ffffffff afe0d3e4 S com.android.phone
app_1    1852  1783  122476 24276 ffffffff afe0d3e4 S android.process.acore
app_11   1882  1783  91352 15736 ffffffff afe0d3e4 S com.android.mms
app_2    1907  1783  97336 17452 ffffffff afe0d3e4 S android.process.media
app_5    1919  1783  90088 15328 ffffffff afe0d3e4 S com.android.alarmclock
app_7    1928  1783  93640 16692 ffffffff afe0d3e4 S com.android.calendar
app_1    1945  1783  92116 15568 ffffffff afe0d3e4 S com.android.inputmethod.latin
root     1975  1777  892   340   00000000 afe0c1bc R ps
# ls -l
drwxrwxrwt root     root              1970-01-01 00:00 sqlite_stmt_journals
drwxrwx--- system   cache             1970-01-01 00:00 cache
drwxrwx--x system   system            2009-06-08 23:50 data
drwxr-xr-x root     root              2009-06-09 05:34 system
d--------- system   system            1970-01-01 00:00 sdcard
lrwxrwxrwx root     root              1970-01-01 00:00 etc -> /system/etc
drwxr-xr-x root     root              1970-01-01 00:00 sys
dr-xr-xr-x root     root              1970-01-01 00:00 proc
drwxr-xr-x root     root              1970-01-01 00:00 dev
-rwxr-xr-x root       root         106568 2009-07-02 08:07 init
drwxr-xr-x root     root              2009-06-09 05:34 sbin
-rw-r--r-- root       root           9270 2009-07-02 08:36 init.rc
-rw-r--r-- root       root           1682 2009-07-02 08:08 init.goldfish.rc
-rw-r--r-- root     root          118 2009-06-09 05:34 default.prop
drw-rw-rw- root     root              1970-01-01 00:00 lost+found

# mount
rootfs / rootfs rw 0 0
/dev/root / yaffs2 ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600,ptmxmode=000 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0
/dev/block/mtdblock5 /system yaffs2 ro 0 0
/dev/block/mtdblock6 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock4 /cache yaffs2 rw,nosuid,nodev 0 0

# df
/: 4096K total, 1420K used, 2676K available (block size 4096)
/: 4096K total, 1420K used, 2676K available (block size 4096)
/dev: 100900K total, 0K used, 100900K available (block size 4096)
/sqlite_stmt_journals: 4096K total, 0K used, 4096K available (block size 4096)
/system: 51200K total, 45212K used, 5988K available (block size 4096)
/data: 457344K total, 18332K used, 439012K available (block size 4096)
/cache: 8192K total, 6344K used, 1848K available (block size 4096)

Posted by blee
,

Starting kernel ...

Uncompressing Linux................................................................................................................................... done,
 booting the kernel.
Linux version 2.6.29 (qt@hs) (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-41) ) #38 PREEMPT Thu Jul 2 16:57:30 KST 2009
CPU: ARMv6-compatible processor [410fb766] revision 6 (ARMv7), cr=00c5387f
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine: SMDK6410
Memory policy: ECC disabled, Data cache writeback
CPU goldfish (id 0x36410101)
S3C24XX Clocks, (c) 2004 Simtec Electronics
S3C64XX: PLL settings, A=666000000, M=532000000, E=24000000
S3C64XX: HCLKx2=266000000, HCLK=133000000, PCLK=66500000
mout_apll: source is fout_apll (1), rate is 666000000
mout_epll: source is fout_epll (1), rate is 24000000
mout_mpll: source is mpll (1), rate is 532000000
mmc_bus: source is mout_epll (0), rate is 24000000
mmc_bus: source is mout_epll (0), rate is 24000000
mmc_bus: source is mout_epll (0), rate is 24000000
usb-host-bus: source is mout_epll (0), rate is 24000000
uclk1: source is dout_mpll (1), rate is 66500000
spi-bus: source is mout_epll (0), rate is 24000000
spi-bus: source is mout_epll (0), rate is 24000000
audio-bus: source is mout_epll (0), rate is 24000000
audio-bus: source is mout_epll (0), rate is 24000000
irda-bus: source is mout_epll (0), rate is 24000000
s3c64xx: 10485760 bytes SDRAM reserved for fimc at 0x506e2000
s3c64xx: 24117248 bytes SDRAM reserved for pp at 0x510e2000
s3c64xx: 8388608 bytes SDRAM reserved for tv at 0x527e2000
s3c64xx: 6291456 bytes SDRAM reserved for mfc at 0x52fe2000
s3c64xx: 4194304 bytes SDRAM reserved for jpeg at 0x535e2000
s3c64xx: 1048576 bytes SDRAM reserved for cmm at 0x539e2000
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 65024
Kernel command line: root=/dev/mtdblock3 rootfstype=yaffs2 init=/init console=ttySAC0,115200
PID hash table entries: 1024 (order: 10, 4096 bytes)
Console: colour dummy device 80x30
console [ttySAC0] enabled
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 256MB = 256MB total
Memory: 201472KB available (3752K code, 1030K data, 140K init)
Calibrating delay loop... 665.19 BogoMIPS (lpj=3325952)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 564 bytes
NET: Registered protocol family 16
S3C6410 Power Management, (c) 2008 Samsung Electronics
S3C6410: Initialising architecture
S3C DMA-pl080 Controller Driver, (c) 2006-2007 Samsung Electronics
Total 32 DMA channels will be initialized.
bio: create slab <bio-0> at 0
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
NET: Registered protocol family 2
IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
TCP established hash table entries: 8192 (order: 4, 65536 bytes)
TCP bind hash table entries: 8192 (order: 5, 163840 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
TCP reno registered
NET: Registered protocol family 1
S3C64XX ADC driver, (c) 2008 Samsung Electronics
S3C64XX ADC driver successfully probed
audit: initializing netlink socket (disabled)
type=2000 audit(0.450:1): initialized
ashmem: initialized
NTFS driver 2.1.29 [Flags: R/W].
yaffs Jul  2 2009 12:04:53 Installing.
msgmni has been set to 393
alg: No test for stdrng (krng)
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
S3C_LCD clock got enabled :: 133.000 Mhz
LCD TYPE :: LTE480WV will be initialized
Window[0] - FB1: map_video_memory: clear ff000000:003a9800
            FB1: map_video_memory: dma=5f000000 cpu=ff000000 size=003a9800
Console: switching to colour frame buffer device 100x30
fb0: s3cfb frame buffer device
Window[1] - FB1: map_video_memory: clear ff3aa000:000bb800
            FB1: map_video_memory: dma=5fb00000 cpu=ff3aa000 size=000bb800
fb1: s3cfb frame buffer device
Window[2] - FB1: map_video_memory: clear ff466000:000bb800
            FB1: map_video_memory: dma=5fc00000 cpu=ff466000 size=000bb800
fb2: s3cfb frame buffer device
Window[3] - FB1: map_video_memory: clear ff522000:000bb800
            FB1: map_video_memory: dma=5fd00000 cpu=ff522000 size=000bb800
fb3: s3cfb frame buffer device
Window[4] - FB1: map_video_memory: clear ff5de000:000bb800
            FB1: map_video_memory: dma=5fe00000 cpu=ff5de000 size=000bb800
fb4: s3cfb frame buffer device
s3c6400-uart.0: s3c2410_serial0 at MMIO 0x7f005000 (irq = 16) is a S3C6400/10
s3c6400-uart.1: s3c2410_serial1 at MMIO 0x7f005400 (irq = 20) is a S3C6400/10
brd: module loaded
loop: module loaded
nbd: registered device at major 43
usbcore: registered new interface driver ub
dm9000: found (0x90000a46)(0x90000a46/0x90100a46)
<DM9KS> I/O: f7600000, VID: 90000a46
eth0 (): not using net_device_ops yet
dm9000: found (0x90000a46)(0x90000a46/0x90100a46)
Linux video capture interface: v2.00
gspca: main v2.4.0 registered
s3c-fimc: controller 0 registered successfully
s3c-fimc: controller 1 registered successfully
S3C6400 MFC Driver, (c) 2007 Samsung Electronics
S3C PostProcessor Driver v3.12, (c) 2009 Samsung Electronics
S3C6410 TV encoder Driver, (c) 2008 Samsung Electronics
 S3C6410 TV encoder Driver init OK.
S3C6410 TV scaler Driver, (c) 2008 Samsung Electronics
 S3C6410 TV scaler Driver init OK.
S3C Rotator Driver, (c) 2008 Samsung Electronics
s3c_rotator_probe called
s3c_rotator_probe success
S3C JPEG Driver, (c) 2007 Samsung Electronics
>> peter jpg_data_base_addr = 0x535e2000 <<
s3c_g2d_probe called
 s3c_g2d_probe Success
 S3C G2D Init : Done
S3C G3D Driver, (c) 2007-2009 Samsung Electronics
s3c_g3d version : 0x1050000
 S3C G3D Init : Done
S3C CMM Driver, (c) 2008 Samsung Electronics
Driver 'sd' needs updating - please use bus_type methods
S3C NAND Driver, (c) 2008 Samsung Electronics
S3C NAND Driver is using hardware ECC.
NAND device: Manufacturer ID: 0xec, Chip ID: 0xdc (Samsung NAND 512MiB 3,3V 8-bit)
Creating 7 MTD partitions on "NAND 512MiB 3,3V 8-bit":
0x000000000000-0x000000040000 : "Bootloader"
0x000000040000-0x000000060000 : "Environment"
0x000000060000-0x000000360000 : "Kernel"
0x000000360000-0x000000760000 : "Root"
0x000000760000-0x000000f60000 : "cache"
0x000000f60000-0x000004160000 : "system"
0x000004160000-0x000020000000 : "userdata"
spi /dev entries driver
S3C64XX SPI Driver
hspi registers d0834000 (cfde0520, c03dcb18)
hspi irq resource c03dcb34 (80)
s3c2410-spi s3c2410-spi.0: s3c2410-spi.0: S3C SPI adapter
s3c2410-spi.0: S3C SPI adapter
hspi registers d0838000 (cfde0480, c03dcb58)
hspi irq resource c03dcb74 (81)
s3c2410-spi s3c2410-spi.1: s3c2410-spi.1: S3C SPI adapter
s3c2410-spi.1: S3C SPI adapter
aoe: AoE v47 initialised.
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
s3c2410-ohci s3c2410-ohci: S3C24XX OHCI
s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1
s3c2410-ohci s3c2410-ohci: irq 79, io mem 0x74300000
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
s3c-udc : S3C HS USB OTG Device Driver, (c) 2008-2009 Samsung Electronics
s3c-udc : version 15 March 2009 (DMA Mode)
mice: PS/2 mouse device common for all mice
S3C Touchscreen driver, (c) 2008 Samsung Electronics
S3C TouchScreen got loaded successfully : 12 bits
input: S3C TouchScreen as /class/input/input0
S3C24XX RTC, (c) 2004,2006 Simtec Electronics
s3c2410_rtc: tick irq 34, alarm irq 92
s3c2410-rtc s3c2410-rtc: rtc disabled, re-enabling
s3c2410-rtc s3c2410-rtc: rtc core: registered s3c as rtc0
i2c /dev entries driver
s3c2440-i2c s3c2440-i2c.0: slave address 0x10
s3c2440-i2c s3c2440-i2c.0: bus frequency set to 377 KHz
parent clock for camera: 266.000 MHz, divisor: 6
s3c2440-i2c s3c2440-i2c.0: i2c-0: S3C I2C adapter
s3c2440-i2c s3c2440-i2c.1: slave address 0x10
s3c2440-i2c s3c2440-i2c.1: bus frequency set to 377 KHz
parent clock for camera: 266.000 MHz, divisor: 6
s3c2440-i2c s3c2440-i2c.1: i2c-1: S3C I2C adapter
S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics
s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled
logger: created 64K log 'log_main'
logger: created 256K log 'log_events'
logger: created 64K log 'log_radio'
oprofile: using arm/armv6
TCP cubic registered
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5
s3c2410-rtc s3c2410-rtc: hctosys: invalid date/time
yaffs: dev is 32505859 name is "mtdblock3"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.3, "mtdblock3"
yaffs: restored from checkpoint
yaffs_read_super: isCheckpointed 1
VFS: Mounted root (yaffs2 filesystem) on device 31:3.
Freeing init memory: 140K
Warning: unable to open an initial console.
init: hardware=goldfish
init: cannot open '/initlogo.rle'
init: command 'loglevel' r=0
init: command 'export' r=0
init: command 'export' r=0
init: command 'export' r=0
init: command 'export' r=0
init: command 'export' r=0
init: command 'export' r=0
init: command 'export' r=0
init: command 'export' r=0
init: command 'symlink' r=-1
init: command 'mkdir' r=-17
init: command 'mkdir' r=-17
init: command 'mkdir' r=-17
init: command 'mkdir' r=-17
init: command 'mkdir' r=-17
init: command 'mount' r=0
init: command 'mount' r=0
init: command 'write' r=0
init: command 'write' r=0
init: command 'write' r=0
init: command 'write' r=0
init: command 'write' r=0
init: mtd partition 0, Bootloader
init: mtd partition 1, Environment
init: mtd partition 2, Kernel
init: mtd partition 3, Root
init: mtd partition 4, cache
init: mtd partition 5, system
init: mtd partition 6, userdata
yaffs: dev is 32505861 name is "mtdblock5"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.5, "mtdblock5"
yaffs: restored from checkpoint
yaffs_read_super: isCheckpointed 1
init: command 'mount' r=0
init: command 'mount' r=0
yaffs: dev is 32505862 name is "mtdblock6"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.6, "mtdblock6"
s3c-nand: ECC uncorrectable error detected
s3c-nand: ECC uncorrectable error detected
block 580 is bad
block 581 is bad
yaffs_read_super: isCheckpointed 0
init: command 'mount' r=0
init: command 'chown' r=0
init: command 'chmod' r=0
yaffs: dev is 32505860 name is "mtdblock4"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.4, "mtdblock4"
yaffs_read_super: isCheckpointed 0
init: command 'mount' r=0
init: command 'chown' r=0
init: command 'chmod' r=0
init: command 'chown' r=-2
init: command 'chmod' r=-2
init: command 'mkdir' r=-17
init: command 'mkdir' r=-17
init: command 'mkdir' r=-17
init: command 'mkdir' r=-17
init: command 'mkdir' r=-17
init: command 'mkdir' r=-17
init: command 'mkdir' r=-17
init: command 'mkdir' r=-17
init: command 'mkdir' r=-17
init: command 'chown' r=0
init: command 'chmod' r=0
init: command 'mkdir' r=-17
init: command 'mkdir' r=-17
init: command 'chown' r=0
init: command 'chmod' r=0
init: command 'chown' r=0
init: command 'chmod' r=0
init: /system/default.prop:open error
init: /data/local.prop:open error
init: Created socket '/dev/socket/property_service' with mode '666', user '0', group '0'
init: processing action 0x26cc8 (boot)
init: command 'ifup' r=0
init: command 'hostname' r=0
init: command 'domainname' r=0
init: command 'setrlimit' r=0
init: command 'write' r=-1
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'write' r=0
init: command 'write' r=0
init: command 'write' r=0
init: command 'write' r=0
init: command 'write' r=0
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=0
init: command 'chown' r=0
init: command 'chown' r=0
init: command 'chmod' r=0
init: command 'chmod' r=0
init: command 'chmod' r=0
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=-2
init: command 'chown' r=0
init: command 'chown' r=0
init: command 'chown' r=0
init: command 'chown' r=0
init: command 'chown' r=0
init: command 'chown' r=0
init: command 'chown' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: starting 'console'
init: starting 'servicemanager'
init: starting 'vold'
init: Created socket '/dev/socket/vold' with mode '660', user '0', group '1009'
init: starting 'debuggerd'
init: starting 'ril-daemon'
init: Created socket '/dev/socket/rild-debug' with mode '660', user '1001', group '1000'
init: Created socket '/dev/socket/rild' with mode '660', user '0', group '1001'
init: starting 'zygote'
init: Created socket '/dev/socket/zygote' with mode '666', user '0', group '0'
init: starting 'media'
init: cannot find '/system/bin/playmp3', disabling 'bootsound'
init: starting 'dbus'
init: Created socket '/dev/socket/dbus' with mode '660', user '1002', group '1002'
init: starting 'installd'
init: Created socket '/dev/socket/installd' with mode '600', user '1000', group '1000'
init: starting 'flash_recovery'
init: starting 'goldfish-setup'
sh: can't access tty; job control turned off
# init: starting 'qemud'
init: Created socket '/dev/socket/qemud' with mode '666', user '0', group '0'
init: starting 'goldfish-logcat'
init: command 'class_start' r=0
init: processing action 0x289a0 (boot)
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: command 'stop' r=0
init: command 'stop' r=0
init: command 'setprop' r=0
init: command 'setprop' r=0
init: processing action 0x278d0 (property:persist.service.adb.enable=1)
init: starting 'adbd'
init: command 'start' r=0
init: waitpid returned pid 1789, status = 00000100
init: process 'flash_recovery', pid 1789 exited
init: event { 'add', '/class/vc/vcs1', 'vc', '', 7, 1 }
init: event { 'add', '/class/vc/vcsa1', 'vc', '', 7, 129 }
init: event { 'remove', '/class/vc/vcs1', 'vc', '', 7, 1 }
init: event { 'remove', '/class/vc/vcsa1', 'vc', '', 7, 129 }
init: event { 'add', '/class/vc/vcs1', 'vc', '', 7, 1 }
init: event { 'add', '/class/vc/vcsa1', 'vc', '', 7, 129 }
init: event { 'remove', '/class/vc/vcs1', 'vc', '', 7, 1 }
init: event { 'remove', '/class/vc/vcsa1', 'vc', '', 7, 129 }
init: event { 'add', '/class/vc/vcs1', 'vc', '', 7, 1 }
init: event { 'add', '/class/vc/vcsa1', 'vc', '', 7, 129 }
init: event { 'remove', '/class/vc/vcs1', 'vc', '', 7, 1 }
init: event { 'remove', '/class/vc/vcsa1', 'vc', '', 7, 129 }
init: event { 'add', '/kernel/uids/1000', 'uids', '', -1, -1 }
init: event { 'add', '/kernel/uids/1013', 'uids', '', -1, -1 }
init: event { 'add', '/kernel/uids/1002', 'uids', '', -1, -1 }
init: waitpid returned pid 1791, status = 00000100
init: process 'qemud', pid 1791 exited
init: waitpid returned pid 1792, status = 00000000
init: process 'goldfish-logcat', pid 1792 exited
DM9000 work in 16 bus width
DM9000: INT active high
init: event { 'add', '/kernel/uids/1001', 'uids', '', -1, -1 }
warning: `rild' uses 32-bit capabilities (legacy support in use)
init: waitpid returned pid 1790, status = 00000000
init: process 'goldfish-setup', pid 1790 exited
init: event { 'add', '/class/vc/vcs1', 'vc', '', 7, 1 }
init: event { 'add', '/class/vc/vcsa1', 'vc', '', 7, 129 }
init: event { 'remove', '/class/vc/vcs1', 'vc', '', 7, 1 }
init: event { 'remove', '/class/vc/vcsa1', 'vc', '', 7, 129 }
init: event { 'add', '/class/vc/vcs7', 'vc', '', 7, 7 }
init: event { 'add', '/class/vc/vcsa7', 'vc', '', 7, 135 }
init: event { 'add', '/kernel/uids/10001', 'uids', '', -1, -1 }
init: event { 'add', '/kernel/uids/10011', 'uids', '', -1, -1 }
init: event { 'add', '/kernel/uids/10002', 'uids', '', -1, -1 }
init: event { 'add', '/kernel/uids/10005', 'uids', '', -1, -1 }
init: event { 'add', '/kernel/uids/10007', 'uids', '', -1, -1 }

Posted by blee
,