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
,