linux 内核 重启函数,Linux系统启动函数start_kernel探秘

asmlinkage __visible void __init start_kernel(void)

{

...

//lockdep_init()是个宏,定义在kernel/fork.c中第388行,如下:

//# define lockdep_init()             do { } while (0)// 可见没做什么事,留作未来扩展之用。

lockdep_init();

// init_task的类型为task_struct.task_struct包含了一个进程相关的所有信息,

// task_struct就是进程描述符(process descriptor)。

// init_task就是内核中第一个进程,也就是idle进程或0号进程的process descriptor,

// init_task由INIT_TASK宏完成初始化,

//set_task_stack_end_magic函数定义在kernel/fork.c中第297行到303行,

// 用于设置进程栈增长的终点。进程描述符和紧挨着的线程描述符thread_info,通常占据内核

// 分配的8K空间,并占据两个连续的内存页框,堆栈从这8K的高地址开始增长,在thread_info

// 结构外设置一个魔数,避免栈数据覆盖了thread_info结构。

set_task_stack_end_magic(&init_task);

// 以下3个函数定义为空,不做分析

smp_setup_processor_id();

debug_objects_early_init();

boot_init_stack_canary();

// 函数体为return 0,不做分析

cgroup_init_early();

// 关闭当前CPU中断

local_irq_disable();

early_boot_irqs_disabled = true;

// 在多CPU机器上选择CPU

boot_cpu_init();// 定义在mm/highmem.c第479行,用于高端内存初始化page_address_init();

// 打印lin

你可能感兴趣的:(linux,内核,重启函数)