Linux内核
OS
内核的功能
进程管理:task_struct,scheduler
内存管理:
I/O管理:中断及中断处理
文件系统:ext3,ext4,reiserfs,xfs
驱动程序:
安全相关:SELinux
##定义:是通用软件,平台类的软件
内核设计流派:
单内核:单一体系结果
Linux
模块化设计:核心+外围功能性模块组成 ko:kernel object
内核支持动态装卸载模块
微内核:内核子系统
windows
Solaris
fork() :
init:负责管理用户空间的进程
init:PID 1
Linux系统的初始化流程
POST:
ROM+PAM
BIOS:
boot sequence
MBR :
466:bootloader
64: 分区表
2: 5A
Kernel文件:基本磁盘分区,无法放在LVM
vmlinuz 压缩存放,有两段代码组成,一个解压代码,一个为内核代码
/sbin/init
/lib/modules/
initrd :
rd:ram disk
/sbin/init:
/etc/inittab
/etc/rc.d/rc.sysinit 脚本
init:
CentOS 5: SysV格式的系统初始化程序
串行化:100
CentOS 6:Upstart
Dbus
A
B
C
SystemD:参考OS X中并行初始化过程
运行级别:
0-6:7个级别
0:关机
1:单用户模式,直接以root用户登录
2:多用户模式,不支持NFS文件系统
3:完全多用户模式,文本模式,不启动图形界面
4:预留级别
5:完全多用户模式,图形模式
6:重启
/sbin/init的配置文件(centos5):
每行定义一种操作:
id:操作的id
runlevels:在那些级别下执行此操作
action:动作
initdefault:设置默认运行级别:无需定义操作
sysinit:指定系统初始化脚本
si::sysinit:/etc/rc.d/rc.sysinit
wait: 等待系统切换至此级别时运行一次
ctrlaltdel:定义组合键被按下时要运行的命令:
respawn:当指定操作进程被关闭时立即再启动一次
tty1:2345:respawn:/sbin/mingetty tty1
process:操作
/etc/inittab中定义的操作:
设定默认运行级别
指定系统运行的初始脚本
启动指定级别下的要启动的服务,并关闭需要停止的服务
定义ctrlAltDel组合的动作
初始化字符终端
启动图开终端
流程: post–>BIOS (boot sequence)–>MBR(bootloader)–>Kernel (Centos: initrd, Centos6:intramfs)–>/sbin/init (Centos5:/etc/inittab,Centos6:/etc/inittab,/etc/init/.conf)*
/etc/inittab:
CentoS5: 每一行定义一个操作
CentoS6: Upstart脚本
init要完成的任务:
设定默认运行级别
指定系统运行的初始化脚本
启动指定级别下的要启动的服务,并关闭需要停止的服务
/etc/init.d
/etc/rc.d/rc.N.d(0-6)
s##
k##
定义ctrlAltDel组合的动作
初始化字符终端
终端:对应的是设备
/dev/tty#
/dev/ttyS#
/dev/console
/dev/pts/#
调用:login-->/etc/issue
启动图开终端
X-Windos,桌面管理器
启动初始化脚本/etc/rc.d/rc.sysinit
设置主机名
激活SELinux和Udev
激活swap
挂载/etc/fstab定义的本地文件系统
检测根文件系统并对其以读写方式重新挂载
设置系统时钟
装载键盘映射
根据/etc/sysctl.conf设置内核参数
激活RAID和LVM设备
清理操作
MBR (446字节)
bootloader:程序
LILO: Linux Loader
不能引导位于1024,Cylinder以后的分区中的OS
GRUB:Grand Unified Bootloader
1st stage: 位于MBR中(为引导2nd)
1.5 stage: 位于boot基本磁盘分区中,为识别内核文件所在的文件系统提供文件识别扩展
2nd stage: 位于boot基本磁盘分区中,GRUB的引导程序
boot分区大小:
CentOS5:100M
Centos6:200M
/boot/grub/
stage2:读取配置文件grub.conf
groub.conf
Group的功能:
1.选择要启动的内核或系统
2.交互式接口
e:编辑模式
3.基于密码保护
1.启用内核映像
定义在响应title下
2.传递参数(进入编辑模式)
在配置文件中 输入 password --md5 密码
定义在全局段中
grub接口
title:操作系统或内核的标题
root:设定内核文件所在的分区为grub的根
kernel:定义要使用的文件,后面可以附加传递给内核的启动参数
initrd:指定为内核提供额外驱动等功能的ram disk或ram fs文件
init的级别1的表示方法:
1,s single S
单用户模式几乎不会启动任何服务,且不需要用户登录;单是会执行/etc/rc.d/rc.sysinit脚本
如果连/etc/rc.d/rc.sysinit文件也不加载,则传递emergency
运行级别的切换
#init [0-6]
查看运行级别:
#runlevel
#who -r
grub.conf配置文件语法:
default=#:指定默认启动的内核或os
timeout=#:等待用户选择要启动的内核或os的时长,单位为秒钟
splashimage= :指定使用的背景图片
hiddenmenu:隐藏菜单
title
root(hd0,0)(Device Part)
Device(磁盘)表示方式:在grub中,统统以hd开头,并紧跟一个数字做各磁盘设备的标记,从0开始
part表示方式:代表分区,从0开始编号
kernel
指定内核文件及传递给内核的参数
参数:ro root=设备文件,quiet 静默模式输出
initrd
文件:通常为cpio归档,并使用gzip压缩,通常以.img作为文件后缀名
grub的安装:
第一种方式
#grub
grub root(hd0,0)
grub setup(hd0)
grub quit
第二种方式:
# chroot /mnt/sysimage
# grub-install --root-directory=/ /dev/sda
启动流程: POST–》BIOS(boot sequenc)—-》GRUB(bootloader(Stage1:mb4;stage2;grub目录中))–>kernel(initrd)–>shell
HOST :宿主机
Target:目标机
制作基于HOST制作一个简单的可启动的linux;
1.给目标磁盘分区 两个: 宿主机上:/dev/sdb1 /dev/sdb2
/dev/sdb1 挂载至 /mnt/boot
/dev/sdb2 挂载至 /mnt/sysroot
2. 安装grub至目标磁盘
grob-install --root-directory=/mnt /dev/sdb
3. 复制内核和Initrd的文件
cp /boot/vmlinuz-VERSION /mnt/boot/vmlinuz
cp /root/initramfs-VERSION.img /mnt/root/initramfs.img
4.先创建目标主机的根文件系统
mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root}
***接着去移植bash等至目标主机的根文件系统 ***
5.为grub提供配置文件
vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title TL Little linux
root(hd0,0)
kernel /vmlinuz ro root=/dev/sda2 quiet selinux=0 init=/bin/bash
initrd /initramfs.img
Linux的内核,单内核,支持动态装载和卸载
模块:/lib/modules/Kernel_version/
查看pci设备的命令
lspci -v
查看当前内核装载的所有模块
lsmod
查看某模块的详细信息
modinfo 模块
动态卸载某模块
modprobe -r 模块
rmmod 模块
动态装载某模块
modprobe 模块
insmod 路径文件
/sbin/init
/etc/inittab
/etc/rc.d/rc.sysinit
启动对应级别的需要启动的服务。停止需要关闭的服务
/etc/rc.d/rcN.d/
S##
K##
符号链接:/etc/init.d
##:表示优先级(0-99),数字越小,优先级越大
chkconfig --add 添加服务
指定级别
--level
删除:
chkconfig --del