Onde no kernel / dev / kmsg é inicializado?

3

Estou tentando descobrir em que ponto do processo de inicialização /dev/kmsg é inicializado e pode ser escrito. No meu sistema, a primeira linha que ocorre no dmesg é printk(KERN_INFO "Initializing cgroup subsys %s\n", ss->name); de kernel/cgroup.c . Tentei rastrear para trás e pesquisar o kernel, mas não encontrei a função em que /dev/kmsg está sendo inicializado.

Alguém sabe?

    
por JohnnyFromBF 04.07.2015 / 16:47

1 resposta

3

O /dev/kmsg representado pela estrutura kmsg_fops que possui file_operations type que representa operações padrão com um arquivo:

const struct file_operations kmsg_fops = {
    .open = devkmsg_open,
    .read = devkmsg_read,
    .write_iter = devkmsg_write,
    .llseek = devkmsg_llseek,
    .poll = devkmsg_poll,
    .release = devkmsg_release,
};

Você pode encontrar a definição de kmsg_fops e operações relacionadas no printk.c . Sua inicialização e inicialização de outros dispositivos virtuais como /dev/zero , /dev/null está no chr_dev_init função.

Esta função é chamada durante o processo de inicialização do kernel do Linux, após o kernel ser inicializado e descompactado. Note que após a função chr_dev_init , o:

fs_initcall(chr_dev_init);

macro que se expande para a macro __define_initcall :

#define fs_initcall(fn)         __define_initcall(fn, 5)

dois parâmetros: function que inicializará o dispositivo de caracteres e initcall level, em que 5 é fs :

static char *initcall_level_names[] __initdata = {
    "early",
    "core",
    "postcore",
    "arch",
    "subsys",
    "fs",
    "device",
    "late",
};

A macro __define_initcall expande para a definição initcall que será chamado no do_initcalls do init / main.c

    
por 04.07.2015 / 19:27