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 |