内核启动过程

内核启动过程,第1张

vmlinux.lds ENTRY(stext)

head.S ENTRY(stext)

head-common.S

1.校验

machid __vet_atags

2.__create_page_tables:建立粗页表 开MMU

3.创建C语言环境:

b start_kernel(都给uboot做了,就不用做太多了)

找到machine,并初始化架构相关的初始化

2.start_kernel

setup_arch(&command_line) 初始化架构相关的一些

setup_macharch_type

cmd_line 内核维护了一个默认的cmd_line

parse_early_param parse_args 解析cmd_line

各种子系统的初始化

rest_init

kernel_thread(启动了2个内核线程)

        kernel_thread(kernel_init)内核中运行一个函数就是变成内核线程  这就是init进程
        kernel_thread(kthreadd) 内核守护进程(保证内核自己本身能正常工作)

进程0:死循环 进程1:kernel_init

cpu_idle 结束内核调用 while(1)(cpu必须干活,不干活,就会跑飞,cpu每个时钟周期如果不干活就会跑飞)(没事干就死循环,有事干被调度去干活)

init进程 :一个进程2个状态

init在内核态下挂载根文件系统(mount_blocK_root)(根文件系统提供用户态init程序),并试图找到用户态的init程序,找到后,就转化为了用户态进程。通过执行kernel_execve来来执行一个用户空间编译连接的一个用户程序。内核态和用户态的init进程都是进程1。

挂载完根文件系统init_post(kernel_execve)

用户态init进程启动login进程,shell进程

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1353258.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-14
下一篇 2022-06-14

发表评论

登录后才能评论

评论列表(0条)

保存