/dev/kmsg
부팅 프로세스 중 어느 시점에 초기화되어 쓸 수 있는지 알아내려고 합니다 . 내 시스템에서 dmesg에 나타나는 첫 번째 줄은 printk(KERN_INFO "Initializing cgroup subsys %s\n", ss->name);
에서 나옵니다 kernel/cgroup.c
. 커널을 추적하고 검색해 보았지만 /dev/kmsg
초기화되는 함수를 찾을 수 없습니다.
아는 사람 있나요?
답변1
/dev/kmsg
파일에 대한 표준 작업을 나타내는 유형의 kmsg_fops
구조 로 표현됩니다.file_operations
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,
};
정의는 kmsg_fops
다음에서 찾을 수 있습니다.printkc. 초기화 방법은 다른 가상 장치와 동일 합니다 /dev/zero
./dev/null
chr_dev_init기능.
이 함수는 Linux 커널 초기화 프로세스 중에 그리고 커널이 시작되고 압축이 풀린 후에 호출됩니다. 이 chr_dev_init
기능 이후에 주의하세요:
fs_initcall(chr_dev_init);
__define_initcall
매크로 로 확장되는 매크로:
#define fs_initcall(fn) __define_initcall(fn, 5)
두 개의 매개변수: initcall
캐릭터 장치와 레벨을 초기화하는 함수, 5
여기서 fs
:
static char *initcall_level_names[] __initdata = {
"early",
"core",
"postcore",
"arch",
"subsys",
"fs",
"device",
"late",
};
이는 __define_initcall
다음으로 확장됩니다.초기화 호출정의는 do_initcalls
다음과 같습니다.초기화/main.c