系统启动与Linux的初始化_1】的更多相关文章

boot 的起源: the term bootstrap refers to a person who tries to stand up by pulling her own boots. (Understanding The Linux Kernel) 西方谚语:  拽着自己的鞋带站起来  (类似于我们说的:用手拽着自己的头发把自个拎起来). 对于系统的启动犹如上面的谚语:即用自己的引导程序把自己启动起来.引导程序在硬盘分区中,引导程序必须加载到内存中才能被CPU 执行并完成后续内核的初始化…
加载initrd(上) 一.目的 本文主要讲述linux3.10文件系统初始化过程的第二阶段:加载initrd. initrd是一个临时文件系统,由bootload负责加载到内存中,里面包含了基本的可执行程序和驱动程序.在linux初始化的初级阶段,它提供了一个基本的运行环境.当成功加载磁盘文件系统后,系统将切换到磁盘文件系统并卸载initrd. 如果是嵌入式设备,那么最终的文件系统就是initrd. 二.cpio文件格式 initrd常用的的文件格式是cpio,cpio格式记录了文件系统的结构…
术语表: struct task:进程 struct mnt_namespace:命名空间 struct mount:挂载点 struct vfsmount:挂载项 struct file:文件 struct super_block:超级块 struct dentry:目录 struct inode:索引节点 一.目的 linux文件系统主要分为三个部分:文件系统调用:虚拟文件系统(VFS):挂载到VFS的实际文件系统. 其中,VFS是核心,linux文件系统的本质就是在内存中创建一棵VFS树.…
一.目的 linux把文件分为常规文件.目录文件.软链接文件.硬链接文件.特殊文件(设备文件.管道文件.socket文件等)几种类型,分别对应不同的新建函数sys_open().sys_mkdir().sys_symlink().sys_link().sys_mknod(). 系统初始化阶段成功加载initrd后,调用这些接口函数创建各种文件,因此这些函数在linux文件系统初始化过程中起到了重要作用,本文将详细描述这些接口函数的实现过程. 这些接口函数主要在fs/namei.c.fs/open…
一.目的 本文主要讲述linux3.10文件系统初始化过程的第一阶段:挂载rootfs文件系统. rootfs是基于内存的文件系统,所有操作都在内存中完成:也没有实际的存储设备,所以不需要设备驱动程序的参与.基于以上原因,linux在启动阶段使用rootfs文件系统,当磁盘驱动程序和磁盘文件系统成功加载后,linux系统会将系统根目录从rootfs切换到磁盘文件系统.   二.主要函数调用过程 图1描述了挂载rootfs的函数调用关系(图中红色部分),便于后面的分析. 从图中发现,在挂载root…
术语表: struct task:进程 struct mnt_namespace:命名空间 struct mount:挂载点 struct vfsmount:挂载项 struct file:文件 struct super_block:超级块 struct dentry:目录 struct inode:索引节点 一.目的 linux文件系统主要分为三个部分:文件系统调用:虚拟文件系统(VFS):挂载到VFS的实际文件系统. 其中,VFS是核心,linux文件系统的本质就是在内存中创建一棵VFS树.…
linux文件系统初始化步骤 System V init启动过程 概括地讲,Linux/Unix系统一般有两种不同的初始化启动方式. 1) BSD system init 2) System V init 大多数发行套件的Linux使用了与System V init相仿的init也就是Sys V init,它比传统的BSD system init更容易且更加灵活. System V init的主要思想是定义了不同的"运行级别(runlevel)".通过配置文件/etc/inittab定…
Linux启动初始化配置文件(1)/etc/profile 登录时,会执行. 全局(公有)配置,不管是哪个用户,登录时都会读取该文件. (2)/ect/bashrc Ubuntu没有此文件,与之对应的是/ect/bash.bashrc bash.bashrc 是交互式shell的初始化文件. (3)~/.profile 某个用户读取的配置. 若bash是以login方式执行时,读取~/.bash_profile,若它不存在,则读取~ /.bash_login,若前两者不存在,读取~ /.prof…
start_kernel -> setup_arch 在这个函数中我们主要看这几个函数. machine_specific_memory_setup max_low_pfn = setup_memory(); paging_init zone_sizes_init 然后我们还要看 build_all_zonelists(); mem_init(); //处理内存图,最后保存在e820中 char * __init machine_specific_memory_setup(void) { ...…
博客:http://blog.csdn.net/younger_china/article/details/51615916 Linu系统启动是一个"冗长乏味"的过程,那么我们现就需要去经历一下这个冗长乏味的生活.我们按照如下流程来分析: 1. 史前时代:BIOS 计算机在上电那一刻几乎是毫无用处的,此时,RAM中包含的全部是随机数据. 在开始启动时,一个特殊的硬件电路在CPU的一个引脚上产生一个RESET逻辑值,在RESET产生之后,就把处理器的一些寄存器设置成固定的值,并执行在物理…
一.目的 上文详细介绍了CPIO格式的initrd文件,本文从源代码角度分析加载并解析initrd文件的过程. initrd文件和linux内核一般存储在磁盘空间中,在系统启动阶段由bootload负责把磁盘上的内核和initrd加载到指定的内存空间中:然后,再由内核读取和解析initrd文件,在VFS(目前只有rootfs的根目录)中新建目录.常规文件.符号链接文件以及特殊文件:这样VFS就从根目录"/"成长为一棵枝繁叶茂的大树了. 二.函数调用过程 initrd详细的加载过程在in…
转自:http://www.cnblogs.com/super-king/p/3291120.html start_kernel -> setup_arch 在这个函数中我们主要看这几个函数. machine_specific_memory_setup max_low_pfn = setup_memory(); paging_init zone_sizes_init 然后我们还要看 build_all_zonelists(); mem_init(); //处理内存图,最后保存在e820中 cha…
一.前言 一直以来,我都非常着迷于两种电影拍摄手法:一种是慢镜头,将每一个细节全方位的展现给观众.另外一种就是快镜头,多半是反应一个时代的变迁,从非常长的时间段中,截取几个典型的snapshot,合成在十几秒的镜头中,可以让观众很快的了解一个事物的发展脉络.对应到技术层面,慢镜头有点类似情景分析,把每一行代码都详细的进行解析,了解技术的细节.快镜头类似数据流分析,勾勒一个过程中,数据结构的演化.本文采用了快镜头的方法,对内存初始化部分进行描述,不纠缠于具体函数的代码实现,只是希望能给大家一个概略…
系统的初始化和服务 1. Linux 系统启动流程 打开计算机,从主板 BIOS(Basic Input/Out System)读取其中所存储的程序,引导你找到存储系统的硬件(如光盘.硬盘等) 接下来,机械手臂读取硬盘中起始的 512 bytes 程序,这个叫作 主引导记录MBR(master boot record),MBR 会引导你找到该硬盘中存储系统的分区(partiton),并找到加载系统的程序 boot loader Boot Loader 存储系统的相关信息,如系统名称.系统内核(k…
linux 初始化系统配置(centos6) (2013-04-03 13:19:15) 转载▼   分类: linux 这篇博文是从别处转来的,原文地址http://zhoualine.iteye.com/blog/1587086 linux 初始化系统配置(centos6)  在配置服务器之前一般都需要根据自己的需要对系统进行初始化的一些工作,我自己在配置服务器之前都会做些初始化的配置这里主要包括5个设置: 1.  限制某些用户使用su命令 2.  限制只能wheel组能使用sudo命令 3…
转载:http://blog.csdn.net/beatbean/article/details/8448623 1. Compile宏控制 位于include/linux/init.h /* These are for everybody (although not all archs will actually discard it in modules) */ #define __init      __section(.init.text) __cold notrace #define …
随着智能终端功能的越来越庞大,与之,硬件配置越来越高,开机时间却越来越长.人们在享受强大功能的同时,对冗长的智能终端的开机时间却越来越缺乏耐心. 为了"取悦"用户,需要提供较好的用户体验,那么就必须使得智能终端尽可能短的进入"可工作"状态.        本文中的"尽可能短的开机时间","开机优化"."开机时间优化"均表示同一个意思.        如果计划对linux系统进行开机时间优化,那么就必须熟悉l…
Linux开机过程: 1 开机自检(BIOS):初始化硬件,查找启动介质 2 MBR引导 3 GRUB引导菜单:GRUB程序安装在Bootloader 4 加载内核(kernel) 5 运行INIT进程 6 读取inittab配置文件,执行/etc/rc.d/rc.sysinit,/ect/rc.d/rc等脚本 7 启动mingetty进程,进入系统登陆界面 Linux系统运行级别一般为0-6 0 关机模式 1 单用户模式 2 无NFS的多用户模式 3 文本模式 4 无用 5 图形化 6 重启模…
一.目的 本文主要讲述linux3.10文件系统初始化过程的第二阶段:加载initrd. initrd是一个临时文件系统,由bootload负责加载到内存中,里面包含了基本的可执行程序和驱动程序.在linux初始化的初级阶段,它提供了一个基本的运行环境.当成功加载磁盘文件系统后,系统将切换到磁盘文件系统并卸载initrd. 如果是嵌入式设备,那么最终的文件系统就是initrd. 二.cpio文件格式 initrd常用的的文件格式是cpio,cpio格式记录了文件系统的结构和内容. cpio格式具…
1)/etc/profile   登录时,会执行. 全局(公有)配置,不管是哪个用户,登录时都会读取该文件. (2)/ect/bashrc   Ubuntu没有此文件,与之对应的是/ect/bash.bashrc bash.bashrc 是交互式shell的初始化文件.   (3)~/.profile  某个用户读取的配置. 若bash是以login方式执行时,读取~/.bash_profile,若它不存在,则读取~ /.bash_login,若前两者不存在,读取~ /.profile. 另外,…
执行init程序 一.目的 内核加载完initrd文件后,为挂载磁盘文件系统做好了必要的准备工作,包括挂载了sysfs.proc文件系统,加载了磁盘驱动程序驱动程序等.接下来,内核跳转到用户空间的init程序,由init完成创建磁盘设备文件.加载磁盘文件系统.从rootfs切换到磁盘根文件系统等工作. 由于在不同的linux发行版中,init的实现方式差异很大,不能将所有的发行版都分析一遍,因此本文选取ubuntu12.04发行版来描述如何从rootfs切换到磁盘根文件系统. 二.创建磁盘设备文…
一.目的 内核加载完initrd文件后,为挂载磁盘文件系统做好了必要的准备工作,包括挂载了sysfs.proc文件系统,加载了磁盘驱动程序驱动程序等.接下来,内核跳转到用户空间的init程序,由init完成创建磁盘设备文件.加载磁盘文件系统.从rootfs切换到磁盘根文件系统等工作. 由于在不同的linux发行版中,init的实现方式差异很大,不能将所有的发行版都分析一遍,因此本文选取ubuntu12.04发行版来描述如何从rootfs切换到磁盘根文件系统. 二.创建磁盘设备文件 init程序使…
一.前言 经过内存初始化代码分析(一)和内存初始化代码分析(二)的过渡,我们终于来到了内存初始化的核心部分:paging_init.当然本文不能全部解析完该函数(那需要的篇幅太长了),我们只关注创建系统内存地址映射这部分代码实现,也就是解析paging_init中的map_mem函数. 同样的,我们选择的是4.4.6的内核代码,体系结构相关的代码来自ARM64. 二.准备阶段 在进入实际的代码分析之前,我们首先回头看看目前内存的状态.偌大的物理地址空间中,系统内存占据了一段或者几段地址空间,这些…
一.前言 同样的,本文是内存初始化文章的一份补充文档,希望能够通过这样的一份文档,细致的展示在初始化阶段,Linux 4.4.6内核如何从device tree中提取信息,完成内存布局的任务.具体的cpu体系结构选择的是ARM64. 二.memory type region的构建 memory type是一个memblock模块(内核初始化阶段的内存管理模块)的术语,memblock将内存块分成两种类型:一种是memory type,另外一种是reserved type,分别用数组来管理系统中的…
一.前言 本文没有什么框架性的东西,就是按照__create_page_tables代码的执行路径走读一遍,记录在初始化阶段,内核是如何创建内核运行需要的页表过程.想要了解一些概述性的.框架性的东西可以参考内存初始化文档. 本文的代码来自ARM64,内核版本是4.4.6,此外,阅读本文最好熟悉ARMv8中翻译表描述符的格式. 二.create_table_entry 这个宏定义主要是用来创建一个中间level的translation table中的描述符.如果用linux的术语,就是创建PGD.…
1.Kali Linux安装VirtualBox增强功能 VirtualBox增强功能介绍:物理机与虚拟机之间的文件共享.物理机与虚拟机之间的剪切板共享.虚拟机的direct3D支持,这样虚拟机窗口就可以随便放大或缩小了...... . 01.启动 Kali Linux 系统->菜单栏选择“设备”->“安装增强功能”快捷键(右 Ctrl+D),提示是否自动运行,点击取消 .02.在桌面双击光盘图标(增强工具),拷贝“VBoxlinuxAdditions.run”文件到 root 根目录,给予这…
sysinit文件写法详解 sysinit文件是linux初始化文件系统时执行的第一个脚本文件.它主要做在各个运行级别中进行初始化工作,包括: 启动交换分区;检查磁盘;设置主机名;检查并挂载文件系统;加载并初始化硬件模块. 具体执行的脚本由inittab文件中的action为sysinit的一行确定.如LFS中为如下一行: si::sysinit:/etc/rc.d/init.d/rc sysinit 这代表init初始化程序执行的第一个脚本为/etc/rc.d/init.d/rc,并传入sys…
inittab文件解析 inittab配置文件每行的基本格式如下. id:runlevels:action:process 其中某些部分可以为空,下面我们逐一介绍. 1.id 1-2个字符,配置行的唯一标识,在配置文件中不能重复. 2.runlevels 配置行适用的运行级别,在这里可填入多个运行级别,比如12345或者35等. Linux有7个运行级别. 0:关机. 1:单用户字符界面. 2:不具备网络文件系统(NFS)功能的多用户字符界面. 3:具有网络功能的多用户字符界面. 4: 保留不用…
转自:http://blog.51cto.com/19055/1144600 1)/etc/profile   登录时,会执行. 全局(公有)配置,不管是哪个用户,登录时都会读取该文件. (2)/ect/bashrc   Ubuntu没有此文件,与之对应的是/ect/bash.bashrc bash.bashrc 是交互式shell的初始化文件.   (3)~/.profile  某个用户读取的配置. 若bash是以login方式执行时,读取~/.bash_profile,若它不存在,则读取~…
本文介绍的内容是基于Linux3.1源码,并参考了很多网上找来的资料 Linux内核的启动的流程如下: start_kernel->rest_init->kernel_init->do_basic_setup->driver_init 由driver_init函数完成设备驱动子系统的初始化,这里重点分析driver_init函数,该函数通过调用一系列的初始化函数主要完成了设备驱动子系统的一个整体框架: /** * driver_init - initialize driver mo…