linux系统的启动,指的是从系统加电到系统控制台显示“login:”登录提示符为止的系统运行阶段,与这部分动作密切相关的代码主要是:

  • 四个汇编程序:bootsect.S setup.S head.S entry.S
  • init目录下的main.c文件

    主要查看init/main.c中的start_kernel函数:

在系统启动过程中,主要关注一下几个方面:

  1. 中断系统及调度系统
  2. 文件系统的初始化
  3. 设备管理系统的初始化
  4. 网络协议的初始化

init/main.creset_init函数:

在此函数中,有kernel_thread函数,这个函数创建了内核线程,原型如下:

int kernel_thread(int (*fn), void *arg, unsigned long flags)

此函数定义在arch/xxx/kernel/process.c中,它利用do_fork()函数创建一个新的内核态线程,linux的内核线程是没有虚拟存储空间的进程,它们运行在内核中,直接使用物理地址空间。
kernel_thread创建的新的内核线程是init,然后返回,执行unlock_kernel(与start_kernel中的lock_kernel对应),接着执行cpu_idle(),这实际是执行初始化主线程的归宿:它观察自己是否处于TIF_NEED_RESCHED——在need_resched实现,如果不是,就让自己睡眠,否者完成schedule()函数。TIF即Thread Information Flag的意思。

下一步转入init函数中:

init线程调用了许多函数,但与网络有关的在do_basic_setup中初始化的sock_init(),然后继续执行do_initcalls函数,此函数定义在c文件中,有两个重要的变量__initcall_start__initcall_end,它们的定义如下:

extern initcall_t __initcall_start, __initcall_end;
static void __init do_initcalls(void)
{initcall_t *call;int count = preempt_count();/*从start遍历到end*/for(call = &__initcall_start; call < &__initcall_end; call++){char *mesg;......(*call)();msg = NULL;
}}

initcall_t类与__initcall_start__initcall_end定义在include/linux目录下的init.h文件中。

Linux系统初始化流程相关推荐

  1. Linux启动芯片的初始代码,Linux系统初始化流程(简述)

    1,POST[power on self test]: 接通电源后,CPU通过出厂指定的存储地址读取代码[主板芯片上的ROM],然后测试内存,风扇,显示设备等是否正常,并通过BOIS的Boot Seq ...

  2. 开机流程简介--init 处理系统初始化流程 (/etc/rc.d/rc.sysinit)

    init 处理系统初始化流程 (/etc/rc.d/rc.sysinit) 还记得上面提到 /etc/inittab 里头有这一句' si::sysinit:/etc/rc.d/rc.sysinit ...

  3. linux内核ufs设备树,Linux内核初始化流程笔记

    Linux内核初始化流程笔记 分类: LINUX 作者:gfree.wind@http://www.doczj.com/doc/fc580419c1c708a1294a4409.html 博客:htt ...

  4. s5.CentOS、Ubuntu、Rocky Linux系统初始化脚本

    CentOS.Ubuntu.Rocky Linux系统初始化脚本 Shell脚本源码地址 Gitee:https://gitee.com/raymond9/shell Github:https://g ...

  5. 兄弟连Linux在线课堂:第5讲Linux系统引导流程

    兄弟连Linux在线课堂:第5讲 Linux系统引导流程 大家好,我是李明,Linux爱好者,我计划推出一套Linux学习的在线课及视频教程,课程内容主要针对Linux初学者,大概每周一讲,差不多在春 ...

  6. LINUX系统初始化

     说明BIOS是位于位于主板flash rom(掉电不丢失0)中的程序,操作系统Boot Loader位于硬盘MBR中.BIOS在完成 硬件检测和资源分配后.将硬盘MBR中的Boot Loader读到 ...

  7. Linux系统初始化更新(更换阿里源)(centos7mini)

    1. Centos6.7 修改Linux配置 更换yum 更新源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.r ...

  8. 简述linux系统引导流程,简单介绍如何用WinGrub 引导Linux系统简述

    以下主要介绍我的第一次安装Linux系统遭遇,以及怎么度过这个遭遇的,希望对大家有所帮助.不喜欢的可以略过. 一.开篇叙述我第一次安装Linux系统和接下来的经历 开篇:按照北南兄弟的<FC4菜 ...

  9. windows7下安装vmware虚拟机linux系统详细流程

    超多图预警!!! 在进行下面操作之前,首先得确保Vmware workstation已经安装成功,然后还得提前准备好一个即将安装的linux系统的iso文件,然后就可以进行下面操作,本次安装是在 Vm ...

最新文章

  1. 软工实践原型设计——PaperRepositories
  2. 以下用于数据存储领域的python第三方库是-南开《网络爬虫与信息提取》19秋期末考核题目【标准答案】...
  3. 【JVM调优工具篇】jvisualvm工具导出dump文件教程
  4. Task02:SQL基础查询与排序-天池龙珠计划SQL训练营
  5. vs2017安装完成,但有错误。
  6. 【洛谷习题】尼克的任务
  7. 【Java数据结构】赫夫曼树
  8. 时隔 5 年,华为再发旧文《华为到该炸掉研发金字塔的时候了》意欲何为?
  9. JavaScript中的字面量
  10. 离散时间信号常见函数的实现(matlab)
  11. 获取目标服务器c盘下flag文件信息,公开课基础演练靶场 第六章 webshell控制目标详细解题思路...
  12. c#.net配置mysql数据库连接池_c# 创建 mysql数据库连接池
  13. vue+mars3d 组件封装与应用 +简单示例
  14. 惯性导航(IMU)误差分析
  15. golang之jsonb类型的支持
  16. 英文单词搜索之词霸搜索
  17. 闲话四巨头:腾讯,阿里,百度,华为
  18. charles把抖音数据保存到本地处理
  19. Mac下设置idea的代码提示快捷键
  20. 知乎python练手的_Python新手应该如何练手?知乎5600赞答案告诉你!

热门文章

  1. 【极光笔记】iOS 15推送新特性初探
  2. 九寨沟游玩体会-03-旅程
  3. Qt自定义的ColorDialog--仿QColorDialog
  4. 更换人工晶体的最佳时期是什么时候?
  5. 关于日志打印的几点建议
  6. C语言编写函数把字符串里面的大写字母改成小写字母
  7. 爆强,一个网友对上海地铁的超强描述
  8. 利用线性表实现通讯录管理
  9. 智能鞋为老年人走失问题提供解决方案
  10. ZYNQ 7000 PS和PL 信号、接口、管脚分布