linux从上电到到启动流程简要过程以及关键函数
来源:互联网 发布:北京建筑软件培训 编辑:程序博客网 时间:2024/06/10 06:51
linux 4.1.x
ARM上电。执行BOOTLOADER
bootloader加载kernel 。传递参数给kernel 然后执行kernel
设置一些寄存器,初始化一些状态等等。然后跳到head.s执行
head.s已经属于kernel的部分了
head.s主要是硬件相关的部分,解压kernel等等。最终跳转到
start_kernel里面执行
start_kernel 依旧需要很多初始化 pid 中断等等
这些基本完成后调用rest_init
static noinline void __init_refok rest_init(void)
{
..............................
kernel_thread(kernel_init, NULL, CLONE_FS);
pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
cpu_startup_entry(CPUHP_ONLINE);
}
cpu_startup_entry 调用cpu_idle_loop
void cpu_startup_entry(enum cpuhp_state state)
{
cpu_idle_loop();
}
cpu_idle_loop 是一个死循环 idle进程是0号进程。当CPU没有任何事情可以做的时候就进入了Idle进程。
static void cpu_idle_loop(void)
{
while (1)
{
xx
}
}
所以后续的事情其实主要是
kernel_thread(kernel_init, NULL, CLONE_FS);
pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
也就是创建两个进程
第二个 kthreadd主要是调度其他的线程。
idle进程Pid=0
kernel_init 进程Pid=1
kthreadd 进程pid=2
所以最关键的就是kernel_init函数了(之前vfs_cache 以及后续的操作 什么的已经将文件系统建立起来了)
kernel_init 主要是执行一个特定的进程任务。
只要由一个任务执行成功就返回。否则一直try 到最后一个。如果还是执行失败,那么系统起不来
执行顺序是
1 传递给内核的参数 init=xxxxxxxxx
ramdisk_execute_command
2传递给内核的参数 rdinit=xxxxxxxxxxxx
execute_command
3 /sbin/init
4 /etc/init
5 /bin/init
有一个启动成功就返回。全部失败。系统启动失败panic
- linux从上电到到启动流程简要过程以及关键函数
- Linux启动流程以及初始化
- linux启动过程以及登陆
- uboot简要分析、启动流程
- Spring启动流程简要分析
- linux启动简要描述
- Linux的启动流程以及GRUB详解
- linux启动流程分析-内核解压缩过程
- linux启动流程分析-内核解压缩过程
- 变革从关键流程入手
- Activity启动过程简要介绍
- linux启动流程(从start_kernel中的rest_init函数到init进程(1))
- 从main函数启动过程说起
- 从Linux启动过程到android启动过程
- linux驱动开发简要流程
- 捋一捋 Activity 的启动流程 以及 界面的初始化过程
- [转载] linux启动流程分析(1)---bootloader启动内核过程
- linux启动流程分析(1)---bootloader启动内核过程
- PHP制作图片缩略图、加水印、加字体
- 深度学习Deep learning:四十九(RNN-RBM简单理解)
- wait()和notify(),notifyAll()是Object类的方法,sleep()和yield()是Thread类的方法
- Linux中fork函数分析
- socket编程 单向服务端与客户端通信之简单协议,仅供参考
- linux从上电到到启动流程简要过程以及关键函数
- 在AWS上使用GPU实现分布式神经网络Distributed Neural Networks with GPUs in the AWS Cloud
- ie8文件上传onchange无效
- transform的使用纯代码方式
- 字符串搜索算法(一)Boyer-Moore算法
- 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”
- 当<div>中含有<img>时,<div>的高度比<img>的高度要多3px。如何解决?
- opengl纹理示例
- 【ZOJ 1976】 【POJ 1942】 Paths on a Grid