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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值