linux 启动顺序,内核编译

linux的启动流程
posi -bios -mbr(bootloader ,446)-kernel-initrd-rootfs-/sbin/bin
post:rom的最开始的地方
bois(boot sequence):加载顺序,
boot loader:446个字节:查找分区,加载内核(一个设备的mbr损坏,不会去找第二个)
kernel:识别cpu,内存,检测硬件与取驱动,
挂载文件系统
文件,进程,内存,网络。安全。驱动。
initrd:虚拟根
kernel:硬件进程;


rootfs的自引用:linux对于根目录的自己创建;


内核设计方式:
单内核:工作简单,设计简单,
微内核:协调复制,设计复杂
linux是单内核,windows多内核;
linux对多线程支持不太好,linux多线程称为lwp(轻量级进程)
linux的模块化设计:
kernel:
ko(模块):动态加载共享模块,初始化时候的加载;
so(共享模块):

/lib/modules:内核版本号的目录;下面有许多模块
,以ko结束的就是模块


虚拟根(ramdisk/ramfs):kernel与ko之间的动态生成的文件,用于kernel访问ko;其中有一个虚拟的根,当kernel访问完ko,就删除虚拟的根,这个过程叫做根切换
这3根目录会从虚拟根到真实的根文件系统;
/proc:
/sys:
/dev:
switch root:切换根,这个是在虚拟根中存在
虚拟根会把物理内存的一段空间模拟成磁盘来用。
ramdisk-->:initrd(虚拟根的文件名:红帽5)
ramfs-->initramfs(虚拟根的文件名:红帽6)




简述虚拟根原理(监狱)
mkdir /test/virroot -pv:创建一个虚拟的根
mkdir /test/virroot/bin:创建目录
cp /bin/bash /test/virroot/bin:复制bash
lldd /bin/bash:显示bash的依赖库.x,y
mkdir /test/virroot/lib:创建一个依赖库的文件夹
cp /lib/x /test/virroot/lib;复制依赖库x
cp /lib/x /test/virroot/lib:复制依赖库y
chrooot /test/virroot/:切换到虚拟根
exit:退出虚拟的根


内核访问根的流程:驱动文件+根
chroot /test/virroot  /bin/bash
ldd  /path/tosomewh:显示2进制的依赖关系


linux的运行级别:(/ect/inittab)
0-6
0:关机
1:单用户模式
2;多用户模式;no nfs
3:多用户模式:text;默认模式
4:保留模式
5:多用户模式:图形界面
6:重启
runlevel:显示运行级别
who -r:显示运行级别
unmae -r:显示内核版本号


bootloader(mbr)
3种引导模式
lilo:linux loader;轻量级的引导
grub:grand unified bootloader
分为2部分
第一阶段:mbr中;引导第二阶段
第1。5阶段:识别各种文件系统
第二阶段: /bbot/grub:引导内核


/etc/grub.conf:设置grub
全局变量:(可以改动)
default:默认启动的tetle编号,从0开始
timeout:用户自己可以选择的超时时间,单位秒
splashimage:grub的背景图片
hiddenmeun:隐藏菜单
password:定义grub的密码 (简单密码)
eg:password lijun
password --md5  密码串(加密密码)
grub-md5-crypt:生成密码串
title:不同内核与系统(不能改动)
字符串:内核或操作系统的标题,可自由改
root(hd0,0):内核文件所在的设备
对grub来说所有硬盘为hd.这里是第一个磁盘,第一个分区
kernel..:内核文件路径以及传递参数
注意如果这里是把内核挂载在boot下但是不是一个分区,内核路径就直接在根(/)下面,如果在一个分区还是在/boot下:因为grub的访问不是真的的内核访问,他访问不是按根来的
initrd:ramdisk文件路径
grub的启动时用法:
e:编辑界面
e:选定某一行编辑
eg:kernel行后面敲1:执行单用户模式
n:new line;
o:上下移动
编辑完成使用enter
b:完成并且启动
p:输入密码


yum install gimp:装载图形设备
gimp &:启动


grub的安装:
dd if=/dev/zero of=/dev/sda count=1 bs=400:破坏分区结构表


第一步:
grub:进入grub
root(hd1,0):内核所在的硬盘
setup(hd1)安装gub在哪个硬盘
quit:退出grub
shotdown -r now:重启系统;


第二种方式:
grub-install--root-directory=/
使用这种方式的时候一定要把boot挂载到根目录;


kernel初始化的过程:
1:探测设备
2:驱动初始化(initrd装载驱动模块)
3:以只读方式挂载根
4:装载第一个进程init(pid=1)




/sbin/init
upstart:
systemd:


inittab的解析:
···每一行的格式:id:runlevels:action:process
action的解释:
initdefault:默认运行级别
sysinit:系统初始化
wait:等待级别切换次级别执行
respawn:一旦程度终止重启启动
····特殊的process的解释
/ecxt/rc.d/rc
check-runlevel
.....
rc1.d下k开头的脚本stop
rc1.d下s开头的脚本start
不同的运行级别有着不同的rcx.d
不同的rcx.d下有着不同的k与s链接脚本
这些脚本以数字为优先级
数字越小优先级越高
一般是先关闭后启动;
这些脚本都是链接到/ect/rc.d/init.d


inittab的作用:
1:设定默认的运行级别;
2:运行系统初始化脚本
3:运行指定级别对应目录下的sk脚本
4:设定ctrl+alt+del组合键
5:定义ups电源在电源故障时的操作
6:启动虚拟终端(2345运行级别)
7:启动图形终端(5级别下)




/etc/rc.d/rc.sysinit:值得读的脚本
作用:
1,激活udev.selinux:前200行
2:根据/etc/sysctcl.conf设定内核参数
3:设定时钟
4:装载电脑映射
5:启用交换分区
6:设置主机名
7:根文件系统检测,并以只读的方式重新挂载
8:激活raid以及lvm设备
9:启用磁盘配额
10:根据/etc/fstab.检查并挂载其他文件系统
11:清理过期的锁以及pid文件;


服务脚本:
在/ect/rc.d/init.d下的systemv风格的脚本


这些脚本的常见接收参数:
start.stop.restart.status


脚本内容解析:(看起来是注释,但是会解析)
#chkconfig:实现链接文件
runlevls:默认创建s开头,除此之外是以k开头的链接;如果是-则表示没有级别所有都是s开头的链接
ss:启动优先次序
kk:关闭优先次序
(14-03 27分钟有个模拟脚本)
#description:描述脚本功能;
chkconfig命令的解析:
--list;查看多有独立守护的启动设定
--add servicename;当服务在/etc/rc.d/ init.d中时候创建s与k链接文件
--del servicename:移除链接文件
--level 23 off/on servicename
在第几个运行级别打开/关闭服务


/etc/rc.d/rc.local:系统最后启动的一个脚本
有什么想在用户进入系统之前运行的脚本可以写在这里面


守护进程的分类:
独立进程、


瞬时进程
瞬时进程是受xinted这个独立进程管理的
xinted又叫做超级守护进程(angel)
chkconfig --list xinted:显示angel在
的状态开启形式
service xinted start;开启service服务
chkconfig --list:显示所有的瞬时进程
chkconfig name on:开启瞬时进程
瞬时进程的开启不需要指定运行级别
linux的核心编译:
核心:/boot/vmlinuxz-version
内核模块(ko):/lib/modules/version
装载模块:
insmod
modprobe
用户访问与监控内核的方式:
/proc :其中的文件大多只读
/sys
/proc/sys:大多是可以写的
内核的参数设定
方法一:echo 1> /proc/sys/vm/drop_caches
方法二:sysctl -w kernel.hostname="www.lijun.com"
以上两种都是立即生效,无法永生效
方法三:
1:改变/etc/sysctl.conf:永久生效,但是不立即
2:systtl -p:让其立即有效,并且永久
内核模块管理:
lsmod:显示内核的所有模块
modprobe name:装载模块
modprobe -r name:卸载模块
modinfo name:查看模块的具体信息
insmod /path/to/moudle:装载模块
rmmod name:移除模块
depmod /path/to/moudle:生成模块的依赖关系
内核除了核心功能,在编译的时候大多有3种选择:
1:不使用这种内核
2:编译成内核;
3:编译成内核的一部分


第一次编译
cp  /boot/config /usr/src/linux.conf:以红帽为模板
make menuconfig:出现一个图形化编译界面
make:完成之后开始编译内核
第二次编译,有需要备份文件:
make clean:清理
编译:


ps:编译时候最好不要使用远程连接:
如果想使用远程连接,安装screen
-ls:
ctl+a:移除一个screen
-r:还原一个screen
exit:































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值