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