linux 3.6 启动源码分析(五) kernel_init进程

本文深入剖析Linux 3.6版本的启动源码,重点讲解kernel_init线程的角色。该线程负责设备驱动初始化,并启动用户空间的init进程,标志着内核初始化完成,进入用户空间初始化阶段。do_basic_setup函数在此过程中起到关键作用,初始化设备驱动和加载内核模块。
摘要由CSDN通过智能技术生成

在start_kernel最后的rest_init函数中内核创建了两个内核线程,一个是内核线程的管理者,另一个是内核初始化线程kernel_init.

kernel_init它将完成设备驱动程序的初始化,并调用init_post函数启动用户空间的init进程。

static int __init kernel_init(void * unused)
{
	/*Wait until kthreadd is all set-up.*/
	wait_for_completion(&kthreadd_done);
	/* Now the scheduler is fully set up and can do blocking allocations */
	gfp_allowed_mask = __GFP_BITS_MASK;

	/* init can allocate pages on any node */
	set_mems_allowed(node_states[N_HIGH_MEMORY]);
	/* init can run on any cpu. */
	set_cpus_allowed_ptr(current, cpu_all_mask);
	cad_pid = task_pid(current);
	smp_prepare_cpus(setup_max_cpus);
	do_pre_smp_initcalls();
	lockup_detector_init();
	smp_init();
	sched_init_smp();
	//以上代码是在SMP系统做准备,激活所有CPU,并开始SMP系统的调度

	/*do_basic_setup函数主要是初始化设备驱动,完成其他驱动程序(直接编译进内核的模块)的初始化。内核中大部分的启动数据输出(都是各设备的驱动模块输出ÿ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值