Linux系统的启动流程以及做个小小的Linux
内核的作用
进程管理:进程间切换
内存管理:内存空间分割为内核空间和用户空间
IO管理:对底层硬件的使用必须由内来实现,不能由用户空间进程来实现
文件系统管理
驱动程序管理
安全管理:包括netfilter模块和selinux模块等
内核的设计模式
单内核:模块都是集成在内核内部(Linux是单内核)
微内核:模块都是独立的,随用随加载(Windows是微内核)
Ps:1.linux是单内核,但是广泛采用了微内核的设计思想
2.内核模块是和内核紧密相关的,一旦换了内核,所有的模块都不能再使用
单线程:只有一个执行流
多线程:有多个执行流
提升程序的执行速度
1、必须寻多线程开发模式
2、运行的主机必须有多个或者多核CPU
启动流程
1、POST(Power On and Self Test):加电自检
检查硬件是否工作正常
将CMOS中的BIOS程序加载到CPU中,依此来检测硬件工作,然后根据设定的启动次序去指定的设备上找 系统内核
BIOS的基本功能(很重要)
1、检查硬件
2、获取硬件信息
3、指定启动次序(bootsquence)
2、查找内核
【此时因为没有内核,所无法直接使用文件系统,因此就找不到文件系统删的内核文件】
MBR
446:bootloader,在文件系统上找内核【bootloader指定了加载内核的方式】
64:分区表
2:幻数
加载内核步骤(重要)
1)找指定设备的上的MBR(bootloader)
2)根据bootloader的指引去加载内核文件(vmlinuz-xxx)
3)然后会将boot分区当做根分区来使用,来获取系统的基本信息(硬件、软件)
PS:因为bootloader可以执行系统加载内核,因此,内核所在的分区的一定是一个特殊分区,此分区没有文件系统也可以访问,分区名称是:/boot
系统中的分区(第一个分区必须是boot)
/:根分区 (5G以上)
/boot:开机引导分区
【在手动分区的时候,第一个分必须是boot分区】
/proc:/sys:伪文件系统分区
/swap:交换分区
内核(kernel)
源码:kernel.org
二进制:/boot/vmlinuz-xxx(压缩存放,支持自解压)
二进制的好处:
节省内存和存储空间
提高IO
3、启动用户空间进程
启动用户空间进程:/sbin/init
1)由内核中的文件系统功能找到并执行/sbin/init,会产生一个ID为1的进程,进程名就是init
2)init生成用户空间
加载驱动
【不可能就将全部的驱动都加载到内核中】
在安装linux的时候,最后一步会执行一个脚本,此脚本会收集系统的基本信息,硬件,软件,驱动,将这些信息打包压缩成一个文件,此文件在centos5.x 叫做initrd-版本号.img;Centos6.x 叫做 initramfs-版本号.img
因此在加载内核到内存的是,会连同initrd/initramfs一起加载到内存中,而且initrd会在内存中展开,将内存中的内核空间当做根分区来使用,在这个根分区中就有了当前系统索要使用的驱动程序。
由initrd所展开生成的根也是一个虚根,在启动完成用户空间以后,会切换到真实根
chroot命令
作用:切换根
PS:总结启动流程
POST-->BIOS(BootSequence)-->MBR(Bootlader)-->vmlnuz,initrd(initramfs)-->/sbin/init(/etc/inittab)
关于/etc/inittab的相关介绍
程序:/sbin/init
配置文件:/etc/inittab(vim /etc/inittab)
linux的运行级别(模式)
0 - halt (Do NOT set initdefault to this)(关机)
1 - Single user mode(通常用来修复系统)
2 - Multiuser, without NFS (The same as 3, if you do not have networking) (为了解决网络不通导致系统启动异常)
3 - Full multiuser mode(字符级别的多用户模式)
4 - unused(系统保留功能)
5 - X11(图形界面,前提必须安装图形界面)
6 - reboot (Do NOT set initdefault to this) (重启)
*查看级别
# runlevel
返回: N 3
N:表示没有切换过级别
切换级别
# init N
inittab详解
格式:
id:level:action:process
action的相关介绍
initdefault: 设置默认级别
sysinit:指定系统初始化过程中,要执行的脚本
wait:等待,监控一旦处于指定级别就执行的操作
ctrlaltdel:设置当用户按下 ctrl + alt + del时候所触发的操作
powerfail:设置当发生断电的情况下,所执行的操作
respawn:指定终端
linux系统启动过程中,会将指定级别下的程序启动或关闭
程序的存放位置:/etc/init.d
程序加入到系统服务以后,会自动生成连接文件
# chkconfig --add 脚本名
程序的链接文件位置: /etc/rc.d/rcN.d
/etc/rc0.d
/etc/rc1.d
/etc/rc2.d
/etc/rc3.d
/etc/rc6.d
分别对应系统的七个运行级别
系统启动的时候,会首先判断级别(假设判断级别为3)
判断级别以后,会在/etc/rcN.d下,将所有S开头的程序启动,所有K开头的程序关闭
注意:
一旦将一个程序添加到系统服务,那么会自动在/etc/rcN.d下创建链接文件
grub引导系统启动,分为三个阶段
stage1:其实就是使用MBR中的bootloader完成内核检索
stage1.5:在boot分区中,用来识别文件系统,此阶段只有在分区的时候才有用
stage2:使用 /boot/grub/grub.conf 中的程序完成系统的最终启动
grub.conf详解(vim /boot/grub/grub.conf)
default=0 #指定默认使用哪个内核文件,零表示第一个
timeout=5 #设置开机等待时间(可以自己改了玩着试试)
splashimage=(hd0,0)/grub/splash.xpm.gz #开机背景图片,也可修改但是照片的格式必须和系 统相同
hiddenmenu #隐藏菜单
title CentOS (2.6.32-431.el6.x86_64) #开机提示信息
root (hd0,0) #指定内核文件所在分区,这里表示第一个磁盘第一个分区
kernel /vmlinuz-2.6.32-431.el6.x86_64(指定内核) ro root=/dev/mapper/vg_chenxiaoxu-lv_root rd_LVM_LV=vg_chenxiaoxu/lv_swap rd_NO_LUKS rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 (指定语言)rd_LVM_LV=vg_chenxiaoxu/lv_root(指定根分区位置) KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-431.el6.x86_64.img
Grub的基本使用(忘了Linux密码可以修改)
1、进入grub界面:在等待时间内按回车键
可用的命令
e:进入编辑界面(其实编辑/boot/grub/grub.conf)
a:编辑内核功能
c:进入命令行模式
2、进入编辑模式
e:进入编辑模式
c:同上
b:引导开始进入系统
o:新添加一行
d:删除
3、编辑kernel行
【修改此行可以设置系统的运行模式】
在原有内容后写上一个 1 ,进入单用户模式,然后回车,返回到grub.conf的编辑界面
按 b 开始引导进入系统
4、给grub设置密码
修改grub.conf,添加一个字段passwd
方式是:
在title 上面添加一行内容
password 123
注意:添加是的明文密码,不安全,所以看下边啦
5、给grub设置加密的密码
1)生成加密密码
2)将密码添加到/boot/grub/grub.conf中
password --md5 $1$4ixMm$UXtaHOHwyyQtdtDlk/9no/
--md5:是指定的加密方式大名叫MD5加密
在新的磁盘上安装grub
(前提:添加一个新的磁盘大小为1G,必须使用单个文件作为磁盘文件,将此文件存到一个容易找到的地方,
1)这个新磁盘必须提前进行分区
2)这个新磁盘必须挂载到系统的某个目录之上
)
有两种安装方式
第一种方式:grub-install 进行安装
第二种方式:进入grub模式进行安装
方式二:grub模式安装
# grub
grub >
破坏grub的第一阶段
bootloader(MBR-446)
# dd if=/dev/zero of=/dev/sda bs=1 count=1(泡泡机)
修复grub的第一阶段
1)进入grub模式
# grub
2)测试根分区的编号
# root (hd#,#) PS:这里的hd#是磁盘编号,#是分区编号
出现信息:filesystem type unkown 表示不是boot所在分区
3)在根分区所在的磁盘上安装grub(bootloader)
安装grub的格式:
grub > setup (hd#) PS:hd# 表示在指定的磁盘上来安装grub
方式一:grub-install方式安装
格式:grub-install --root-directory=路径
注意:这个路径指的是boot所在分区
1)分区操作
分区
格式化
挂载
# mount /dev/sdb1 /media
2)安装grub
# gurb-install --root-directory=/media /dev/sdb
模块相关的命令
lsmod
已经加载的模块名称以及依赖的模块
modinfo
格式:modinfo 模块名称
作用:显示一个莫得详细信息
depends:该模块所依赖的模块
filename:模块的保存位置
description:模块的描述信息
modprobe
格式:modprobe 模块名称
作用:动态加载模块
modprobe -r 模块名称:卸载模块
insmod
格式:insmod /patt/to/模块名称
作用: 加载模块
rmmod
格式:rmmod 模块名称
作用:卸载模块
例子:查看显示floppy模块信息
查看模块的相信信息
# modinfo floppy
查看该模块是否已经被加载
# lsmod | grep floppy
floppy 61447 0
卸载此模块
# modprobe -r floppy
# lsmod | grep floppy
重新加载此模块
# modprobe floppy
# lsmod | grep floppy
floppy 61447 0
准备一个新磁盘
安装grub
编写一个grub.conf
向这个磁盘移植几个常用命令ls cd mkdir。。。
制作简单的linux
1、添加硬盘,创建两个分区
1)创建分区
/dev/sdb1->200M
/deb/sdb2->xx
2)挂载分区
sdb1 --> /media/boot
sdb2 --> /media/sysroot
2、在该硬盘上安装grub
# grub-install --root-directory=/media/boot /dev/sdb
3、移植kernel和initrd
4、创建系统的必要目录
bin
sbin
etc/rc.d
var
usr
tmp
home
root
proc
sys
meida
mnt
lib
lib64
5、移植系统命令
bash
mount
cd
ls
cp
mkdir
rm
touch
6、给bash创建软件链接sh
7、生成grub的配置文件
default=0
timeout=10
title my mini linux
root (hd0,0)
kernel /vmlinuz ro root=/dev/sda2 quiet selinux=0 init=/bin/bash
initrd /initramfs.img
8、创建一个init程序,来完成系统初始化
1)创建init
#!/bin/bash
echo -e "wellcome to linux \033[32m zxhk \033[0m"
# mount -n -t proc proc /proc
mount -n -t sysfs sysfs /sys
mount -n -o remount,rw /dev/sda2 /
/bin/bash
2)赋予执行权限
3)修改grub.conf
9、导入网络功能模块
1)导入命令
2)移植网卡模块
# cp `modinfo e1000 | head -n1 | awk '{print $2}'` /media/sysroot/lib/
3)修改init,加载网卡模块
#!/bin/bash
echo -e "wellcome to linux \033[32m zxhk \033[0m"
# mount -n -t proc proc /proc
mount -n -t sysfs sysfs /sys
insmod /lib/e1000.ko
ifconfig eth0 10.100.0.112 netmask 255.255.0.0
ifconfig lo 127.0.0.1 netmask 255.0.0.0
mount -n -o remount,rw /dev/sda2 /
/bin/bash
Author:潇湘雨错
转载于:https://www.cnblogs.com/xiaoxiangyucuo/p/5571533.html
Linux系统的启动流程以及做个小小的Linux相关推荐
- Linux系统开机启动流程介绍
一.linux系统进程启动流程图: 二.简单概括描述linux系统从开机到登陆界面的启动过程 1.开机BIOS自检 2.MBR引导 3.grub引导菜单 4.加载内核 5.启动init进程 6.读取i ...
- linux系统的启动流程
1.启动流程总体介绍 第一. 按下主机电源后,BIOS做硬件检测并根据CMOS中记录,找到启动设备(一般为硬盘). 第二, 接着BIOS 读取硬盘最前面的512个字节分区,也就是读取MBR区域的信息 ...
- 深入探索linux系统的启动流程
1.启动流程总体介绍 第一. 按下主机电源后,BIOS做硬件检测并根据CMOS中记录,找到启动设备(一般为硬盘). 第二, 接着BIOS 读取硬盘最前面的512个字节分区,也就是读取MBR区域的信息, ...
- linux开机引导进程是什么,Linux系统开机启动流程介绍
一.linux系统进程启动流程图: 二.简单概括描述linux系统从开机到登陆界面的启动过程 1.开机BIOS自检 2.MBR引导 3.grub引导菜单 4.加载内核 5.启动init进程 6.读取i ...
- 基础——ARM系统的启动流程(boot loader,Linux 内核,文件系统之间的关系)
以三星的四核处理器Exynos4412为例,该开发板属于armv7架构,contexA9系列,32bit,cpu4核心1.5GHZ主频,eMMC 大小型号为:KLM4G. ARM里面,启动MMU以后, ...
- 详解linux系统的启动过程及系统初始化
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://chrinux.blog.51cto.com/6466723/1192004 一. ...
- linux系统编码启动,Linux启动流程介绍
一. 内核镜像Izmage被bootloader装载到内存中.zImage的入口代码是自引导程序.包含一些初始化代码.第一条指令在head.S文件中.解压内核,然后调用call_kernel启动vml ...
- Android系统的启动流程简要分析
这是我结合网上的资料以及自己分析android4.4的源码整理的笔记,对整个安卓系统的流程启动进行了梳理,很多细节并未展开,只是简要的进行了介绍. 一.Android系统的架构介绍 Android的整 ...
- Android系统 lk启动流程简析
本篇文章是对初步学习Android系统lk启动流程的一个大致简介.方便掌握lk启动流程的大致框架,具体细节后续再进行更新 1. 前言 需要了解的文件类型: 1)编译LK的链接文件(.ld) 2)汇编文 ...
最新文章
- Python程序员的“避坑”指南
- 关于学习Python的一点学习总结(24->列表推导)
- 17个之多!Windows Vista各版本功能区别详解
- poj3273---Monthly Expense
- python判断字符大小写转换_Python 字符串大小写转换的简单实例
- 华为鸿蒙ipc时延,虚搜
- java Math类与Number类
- ASP.NET 数据绑定常用代码及其性能分析
- 迁移cnblog博客
- brew的安装以及使用
- JavaWeb学习篇8_用户登录、信息的增删改查、复杂功能小项目(Servlet、JSP、MySQL、JDBCTemplete、Durid、BeanUtils、tomcat、EL、JSTL)
- .ftl文件 是什么文件
- MQTT-Eclipse paho mqtt重连机制
- 正版软件 |Windows 10 家庭版操作系统软件 终身授权
- Faceted Project Problem异常解决
- 阿里云服务器部署StreamX
- 网络设备选型之路由器
- 软件项目管理案例:假设50万的资金准备开设一间咖啡馆,请按照WBS原理将开设咖啡馆过程中所可能涉及的工作进行分解。
- linux下通过SD卡烧录.bin程序
- Python 超简单爬取微博热搜榜数据
热门文章
- mysql安装的根目录_MySql安装及基础配置(一)
- amos看拟合度在哪里看_小程序开发公司哪里强?看这几点
- 关于智能车竞赛,你需要知道什么?
- 工欲善其事,必先利其器 -- 这烙铁,升温有点狠
- 第十五届全国大学生智能车竞赛浙江赛区隆重开幕
- 用开满鲜花的情怀对待每一份求知欲
- 删除sybase里面的锁_一起来学习分布式锁
- excel 等额本息还款每期本息计算_零基础入门融资租赁计算(第三讲)——设计租金方案...
- 怎么交换两个字符串_leetcode1202_go_交换字符串中的元素
- html canvas text 居中,HTML5 Canvas Text文本居中实例