kernel的功能: 进程管理 文件系统 硬件驱动 内存管理 安全功能:SELinux 网络子系统 标准库:glibc 调用:返回 利用别的组件的功能,完成某特定事务 返回值 内核设计流派: 单内核体系: Linux 支持模块化 模块还可以动态装载或卸载 Linux内核:核心 + 外围模块 核心:/boot/vmlinux-VERSION-release 模块:/lib/modules/VERSION-release .ko: kernel object ramdisk: /boot/initramfs-VERSION-release.img 在内核启动过程中装载根文件系统时有用; 微内核体系: Windows Solaris Linux系统启动流程:X86(PC) POST:加电自检 ROM+RAM ROM:CMOS (BIOS) RAM: EFI() 引导次序:按次序找引导设备,第一个有引导程序的设备即为启动PC server所用到的设备; 1st boot: 2nd boot: 3rd boot: MBR:Master Boot Record 1st sector:512bytes 446: bootloader 64: partation table 2: 5A bootloader: 选择要启动的内核(在当前磁盘的某或某些分区上) LILO: LInux LOader 0-1023范围内的柱面构成的分区的内核文件 GRUB: GRand Unified Bootloader CentOS 5,6 Grub 0.97 CentOS 7, Grub2 1.96 kernel: 自身初始化 探测所有能识别的硬件 装载驱动程序 以只读方式装载根文件系统(rootfs) /sbin/init CentOS 5: SysV, init CentOS 6: upstart, init CentOS 7: systemd, init CentOS 5 SysV, init, /etc/inittab --> /etc/rc.d/rc.sysinit CentOS 6 Upstart, /etc/init/*.conf (/etc/inittab)--> /etc/rc.d/rc.sysinit chkconfig CentOS 7 Systemd, /usr/lib/systemd/system/ CentOS 5: init kernel ==> /sbin/init (/etc/inittab) 设定系统默认运行级别 0-6: 7个级别 0:关机 1: single user mode, s, S, single 2: multi user mode, 不支持NFS功能 3:完全多用户模式,文本接口 4:未使用,预留级别 5:完全多用户械,图形接口 6: 重启 切换级别:init # 进一步初始化系统 /etc/rc.d/rc.sysinit 启动指定的默认级别的默认为启动的服务,停止指定的级别下默认为关闭的服务; /etc/rc.d/rc#.d S##: 启动的服务 K##:停止的服务 ##:01-99,数字越小,越优先启动或关闭; 脚本如果期望能够被chkconfig命令使用,要在脚本中添加如下行 # chkconfig: - 85 15 -:当此脚本由chkconfig控制时,默认哪些级别就是开启的, 85:启动优先级 15: 关闭优先级 # chkconfig --add SRV_SCRIPT # chkconfig --del SRV_SCRIPT # chkconfig SRV_SCRIPT {on|off} 默认为2345级别; --level ###### /etc/rc.d/rc.local (/etc/rc.local): 是一个脚本,通常为系统启动完成的最后运行一个脚本; 定义一些组合键的功能:通常是Ctrl+Alt+Delete 初始化字符终端 如果有需要,启动图形终端 CentOS 5: /etc/inittab 每一行定义一种action和对应的程序; id:runlevels:action:process 例如 si::sysinit:/etc/rc.d/rc.sysinit action: respwan, wait, initdefault l3:3:wait:/etc/rc.d/rc 3 CentOS 6: /etc/inittab 由/etc/init/*.conf 一类的配置文件定义init的初始化动作 由upstart调用,程序为/sbin/init /etc/rc.d/rc.sysinit: 系统初始化脚本 设定主机名:读取/etc/sysconfig/network文件中的HOSTNAME参数,并以之设定主机名 打印文本欢迎信息 激活SELinux和udev 挂载/etc/fstab文件中定义的其它文件系统 激活swap 检测根文件系统,并以读写方式重新挂载; 设置系统时钟 根据/etc/sysctl.conf设置内核参数 激活LVM和RAID设备; 加载额外设备的驱动程序; 清理操作 初始化流程:POST --> (BIOS)boot sequence --> MBR(bootloader) --> kernel + ramdisk(initrd, initramfs) --> mount rootfs (ro) --> /sbin/init (CentOS 5: /etc/inittab, CentOS6 /etc/init/*.conf) 设定默认运行级别 --> 使用/etc/rc.d/rc.sysinit初始化系统 --> 分别启动并关闭指定服务 --> Ctrl+Alt+Delete组合键 --> 启动字符终端 --> 启动图形终端 GRUB: GRand Unified Bootloader grub程序由两段组成: stage1: MBR (0柱面 0磁道 1扇区) stage1_5: MBR随后的扇区 stage2: 读取grub.conf配置文件,并实现引导功能的扩展 grub的功能: 1、提供菜单,并提供交互式接口 e: 进入编辑模式 2、选择要启动的内核或系统 允许传递引导参数给内核 选择界面可隐藏 3、为编辑功能提供保护机制 启用内核文件: 选择运行指定的内核得先输入密码 传递参数: 使用e命令得先输入密码 grub命令行接口: root:指定哪个分区为接下来要启动的系统或内核文件所在的分区 root (DEVICE) 所有硬盘都识别为hd 不同的硬盘基于数字标识:如hd0, hd1等 同一个硬盘上的不同分区,也使用数字标识,如hd0,0 hd1,5 root (hd0,0) find (DEVICE)/path/to/file kernel: 指定要运行的内核文件 initrd: 为要运行的内核指定其可用的ramdisk文件 boot: 启动此前配置好的内核或系统 grub.conf: 参数: default=: 选择第几个title配置的内核或系统,各title从0开始编号 timeout=#: 菜单显示的超时时长; splashimage=/path/to/some_image_file:指定菜单的背景图片;此图片只能为14bits色,xpm格式,gzip压缩; hiddenmenu: 隐藏菜单 title TILTE STRING:显示于菜单中的标题 root kernel initrd grub保护机制: 1、生成密码: # grub-md5-crypt 2、保护编辑功能,则需要title之外的添加 password --md5 密码串 3、保护使用某内核,则需要内核对应的title之下添加 password --md5 密码串 安装grub的方式: 1、使用grub-install命令 # grub-install [--root-directory=/path/to/somewhere] DEVICE --root-directory=/path/to/somewhere /path/to/somewhere:内核及initrd文件所在的分区的挂载点的父目录,且此挂载点必须叫boot 例如:/dev/sdb1: /mnt/boot # grub-install --root-directory=/mnt /dev/sdb 总结: 系统启动流程 POST --> 引导次序(BIOS)--> BootLoader(MBR) --> kernel + ramdisk (临时根) --> 根切换 (rootfs) --> /sbin/init (配置文件) 配置文件:设置默认运行级别 --> 指定系统初始化脚本进行系统初始化 --> 启动服务(关闭服务)(/etc/rc.d/rc#.d, /etc/rc.d/init.d/) --> /etc/rc.d/rc.local -> 设置CtrlAltDel组合的功用 --> 启动终端(mingetty),并在终端附加登录程序(login) --> 如果级别为5, 则要启动 X server login: root password: mageedu nsswitch: 检查用户帐是否存在,并且如果存在,还能将其解析为UID; 库(API),而非服务 /usr/lib64/libnss* /lib64/libnss* pam: pluggable authentication module, 做用户认证 库 (API) /lib64/security/* ramdisk centos5: initrd ram disk: 块设备 centos6: initramfs ram fs: 配置文件: c5: sysv init, /etc/inittab c6: upstart, /etc/inittab + /etc/init/*.conf chkconfig --add, --del, --list, --level c7: systemd, /usr/lib/systemd/ X-Window: Client --> Server X protocol twm Desktop: GNome, KDE, Xfce GRUB: GRand Unified Bootloader stage1 stage1_5 stage2 命令行接口: grub> 配置文件: /boot/grub/grub.conf 编辑模式: Linux内核:单内核,模块化 内核的某些功能: 编译进内核本体 [*] 编译成内核模块 [M] 不选择使用 [ ] 内核的组成部分: /boot/vmlinuz-VERSION /lib/modules/VERSION/ *.ko: kernel object 模块间有可能存在依赖关系
内核的模块管理
lsmod: 显示内核已装载模块 动态装卸载模块: 卸载:modprobe -r MOD_NAME 装载:modprobe MOD_NAME 装载:insmod /path/to/module_file 卸载:rmmod MOD_NAME 查看某模块的详细信息: modinfo MOD_NAME 检查并生成模块间依赖关系的命令: depmod
原文地址:https://www.cnblogs.com/dragon-123/p/10320427.html
时间: 2024-11-06 03:29:19