start_kernel函数
内核启动后使用ps查看进程
root@ubuntu:~# ps -A
PID TTY TIME CMD
1 ? 00:00:01 init
2 ? 00:00:00 kthreadd
3 ? 00:00:01 ksoftirqd/0
4 ? 00:00:00 kworker/0:0
5 ? 00:00:00 kworker/0:0H
7 ? 00:00:01 rcu_sched
8 ? 00:00:00 rcu_bh
9 ? 00:00:00 migration/0
10 ? 00:00:00 watchdog/0
init 进程的 PID 为 1,kthreadd 进程的 PID 为 2。
入口函数
asmlinkage void __init start_kernel(void)
1)asmlinkage 是宏定义
- 让传送给函数的参数全部使用栈式传送,不用寄存器来传送。
- 声明这个函数是给汇编代码调用的
x86
#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))
2)__init,这个宏定义
- 主要用来标志这个函数编译出来的目标代码放在那一段里
- 同一段的代码都是编译在一起,这样当加载代码到缓存时,就可以一起命中,提高缓存的命中率,提高代码的执行速度
#define __init __section(.init.text) __cold notrace