`
talin2010
  • 浏览: 503128 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

[Linux内核完全剖析]第七章 初始化程序(init)总结

阅读更多

系统初始化程序init/main.c主要功能是对系统进行初始化,并切换到用户模式下执行登录程序。
主要步骤如下:
1、系统初始化部分:

2、然后是切换到用户层(即idle进程),并使用fork系统调用来生成init进程,idle则循环使用pause()进入进程调度。

3、fork出来的新进程调用init()函数执行shell以及登录程序

4、系统完成了初始化过程,进入shell程序继续执行。
注意:init进程(进程1)是从idle进程(进程0)中fork出来,init继承了idle的代码、数据空间、堆栈、文件描述符等等。但由于直接从内核切换出来的idle进程没有写时复制技术,所以这两个进程共享了上述内容。为了确保数据不发生混乱,idle进程对堆栈不进行任何操作,即没有函数调用。所以在move_to_user()宏调用之后进入idle进程开始,整个idle进程使用了宏的fork(),pause()作为替换。

分享到:
评论

相关推荐

    深入分析Linux内核源码.chm

    第七章 进程间通信 7.1 管道 7.2 信号(signal) 7.3 System V 的IPC机制 第八章 虚拟文件系统 8.1 概述 8.2 VFS中的数据结构 8.3 高速缓存 8.4 文件系统的注册、安装与拆卸 8.5 限额机制 8.6 具体文件系统举例 8.7 ...

    深入分析Linux内核源码

    第七章 进程间通信 7.1 管道 7.1.1 Linux管道的实现机制 7.1.2 管道的应用 7.1.3 命名管道(FIFO) 7.2 信号(signal) 7.2.1 信号种类 7.2.2 信号掩码 7.2.3 系统调用 7.2.4 典型系统调用的实现 7.2.5 进程与...

    linux 内核mutex.c 源码分析实例

    linux 内核 mutex.c 源码分析实例,我的实例主要先初始化了一个互斥体m,然后获取互斥体的锁(解锁),紧接着释放互斥体的锁(解锁)。最后释放互斥体。中间通过输出m.count来显示互斥体的状态。

    精通LINUX设备驱动程序开发

    串行设备驱动程序 118 6.1 层次架构 119 6.2 uart驱动程序 121 6.2.1 设备实例:手机 122 6.2.2 rs-485 132 6.3 tty驱动程序 132 6.4 线路规程 134 6.5 查看源代码 141 第7章 输入设备驱动程序 143 7.1 ...

    boot memory内核源代码情景分析

    Linux PowerPC的引导有三步:首先... 本文件的代码分析将从第二次引导,即start_kernel()开始,直到mem_init()执行完毕的这段时间里,观察bootmem初始化、使用分配、释放的全过程,与内存无关的初始化代码就简略带过。

    ARM_Linux启动分析.pdf

    init()函数作为核心线程,首先锁定内核(仅对SMP机器有效),然后调用 do_basic_setup()完成外设及其驱动程序的加载和初始化。过程如下: 总线初始化(比如pci_init()) 网络初始化(初始化网络数据结构,包括sk...

    Linux内核:从底层向上分析驱动程序层+链路层

     我们首先有第一篇博文中知道在网络栈初始化的时候在net/socket.c中的函数sock_init()函数中当proto_init()完成后会执行dev_init()来进行网络设备模块的初始化。  首先说明一下,在drivers/net/space.c中定义了...

    《精通Linux 设备驱动程序开发》.(Sreekrishnan).pdf

    第7章 输入设备驱动程序143 7.1 输入事件驱动程序144 7.2 输入设备驱动程序150 7.2.1 serio150 7.2.2 键盘150 7.2.3 鼠标152 7.2.4 触摸控制器157 7.2.5 加速度传感器158 7.2.6 输出事件158 7.3 ...

    嵌入式linux文件系统启动脚本及分析 linuxrc init shell busybox 分析

    在内核初始化完成后,嵌入式linux 文件系统的启动过程主要包含一下几个步骤: 1. 执行/sbin/init 文件 2. 执行/etc/inittab 文件 3. 执行/etc/init.d/rcS 文件 4. 执行挂载文件系统脚本 5. 执行内核模块脚本 6. 执行...

    系统初始化相关脚本分析.rar

    linux启动的流程是: 载入BIOS信息; 读取MBR; 载入kernel; kernel执行init; init执行rc.sysinit 启动内核外挂模块modules.conf 后面省略了。 本脚本主要是介绍rc.sysinit这个脚本及在这个脚本中调用到得...

    zram-init:具有zsh和openrc支持的zram linux内核模块的包装器脚本

    zram-init 具有交互式和init支持的zram内核模块的包装器脚本(C)MartinVäth(马丁在mvath.de)。 非常感谢AUTHORS文件中的所有人做出的贡献。 该软件包的许可证是GNU公共许可证GPL-2。 SPDX许可证标识符:仅GPL-...

    Linux中的内核链表实例详解

    A、Linux内核链表中的几个主要函数(下面是内核中的源码拿出来给大家分析一下) 1)初始化: #define INIT_LIST_HEAD(ptr) do { \ (ptr)->next = (ptr); (ptr)->prev = (ptr); \ } while (0) // ptr为struct list_...

    Android-start-boot-analyze-.rar_android_android bootloader_andro

    本文主要介绍Android系统的启动过程,以Androidinit进程之后部分为主,init之前部分同标准Linux内核启动完全相同。于Android启动过程复杂,涉及C、C++及java部分内容,本文以流程分析为主线旨在让大家在分析Android...

    RED HAT LINUX 6大全

    第7章 SMTP和协议 105 7.1 Internet电子邮件标准的历史简述 105 7.1.1 sendmail介绍 105 7.1.2 邮局协议 105 7.1.3 Internet邮件访问协议 106 7.2 SMTP和sendmail 106 7.2.1 Internet邮件协议 106 7.2.2 域名系统和...

    linux驱动学习去开发入门

    Linux设备驱动程序学习(0)-Hello, world!模块 Linux设备驱动程序学习(0) -Hello, world!模块 ...以上就是我对《Linux设备驱动程序(第3版)》的《第二章 构造和运行模块》 的学习总结

    嵌入式系统/ARM技术中的Linux启动过程剖析

    接着启动设备上安装的引导程序lilo或grub开始引导Linux,Linux首先进行内核的引导,接下来执行init程序,init程序调用了rc.sysinit和rc等程序,rc.sysinit和rc当完成系统初始化和运行服务的任务后,返回init;...

    linux网卡工作原理

    net_device中有很多提供系统访问和协议层调用的设备方法,包括提供设备初始化和往系统注册用的init函数,打开和关闭网络设备的open和stop函数,处理数据包发送的函数hard_start_xmit,以及中断处理函数。

    libusb 源码(win32 & linux USB开发)

     从函数名称可以看出这个函数是用来初始化相关数据的,这个函数大家只要记住必须调用就行了,而且是一开始就要调用的.  usb_find_busses  函数定义: int usb_find_busses(void);  寻找系统上的usb总线,任何usb...

Global site tag (gtag.js) - Google Analytics