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进程
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)