-
啟動流程:
CentOS 6:
POST --> BootSequence(BIOS) --> BootLoader --> Kernel (ramdisk) --> rootfs --> /sbin/init
ramdisk:直接載入記憶體中的虛拟系統,主要為了加載真正的檔案系統驅動,然後進行根切換
Centos5 通過SysVinit啟動程序的,通過配置檔案/etc/inittab實作調用bash根據配置檔案和編寫的服務腳本按順需建立bash子程序啟動
Centos6 通過upstart啟動程序,通過配置檔案/etc/init/*.conf 完全模拟SysVinit實作啟動,也可以把自己作為bash進行啟動速度更快,但是配置比較複雜
SysVinit/upstart所實作的功能:
預設運作級别
運作系統初始化腳本:/etc/rc.d/rc.sysinit
/etc/rc.d/rc $runlevel
啟動終端,并運作login
啟動圖形終端
CentOS 7:
POST --> BootSequence(BIOS) --> BootLoader --> Kernel (ramdisk) --> rootfs --> /sbin/systemd
sysremd服務腳本:systemd unit檔案
bootloader:
三個版本: lilo
grub legacy
grub2
實作功能:
stage1: mbr
stage1_5: filesystem driver
state2:
2.核心配置編譯:
make menuconfig -->(生成) .config
make [-j #]
make modules_install
make install
3.非子產品方式編譯核心制作Mini Linux
bootloader: grub
核心:kernel (非子產品方式,所有功能子產品都直接編譯進核心是以就不需要rundisk和init)
根檔案系統:busybox
(1)編譯核心:
①安裝開發環境
yum groupinstall “Development Tools” “Server Platform Develoment” -y
②下載下傳核心壓縮包并解壓到/usr/src 目錄中并建立連結
25.了解Mini Linux 制作 ③make:
進入解壓檔案然後make help 可以擷取幫助
make allnoconfig 關掉所有可選擇的特性
make menuconfig 選擇特性
特性包括:64為核心編譯
子產品動态裝載
子產品動态解除安裝
選擇處理器類型,可以選用通用版
支援多處理器(多核)
PCI支援
裝在硬碟驅動可以識别硬碟但不能識别檔案系統(這樣啟動時不需要ramdisk)
支援ext4驅動
鍵盤驅動
滑鼠驅動
把核心所識别的裝置檔案統統導出到/dev目錄下(不能識别的隻能用udev來建立)
支援網絡相關功能
make -j 4 bzImage :表示隻編譯核心不編譯子產品
(2)添加一塊硬碟然後分區(可分兩個區一個存放核心一個作為跟,微型系統swap可以不用分) 格式化,并建立目錄挂在
mkdir /mnt/{boot,sysroot}
mount /dev/sdb1 /mnt/boot/
(3)安裝grub并挂在根檔案系統
①
②在跟檔案系統建立必要的目錄25.了解Mini Linux 制作 (4)拷貝編譯好的核心到/mnt/boot下,并編輯grub配置檔案使其能加載核心 :25.了解Mini Linux 制作 25.了解Mini Linux 制作 sync
(5)核心在啟動時需要加載第一個程序,這裡可以用bash、busybox、自己寫一個模拟init腳本來調用bash三種方法實作
①bash:
複制bash檔案和庫檔案
複制程式及其依賴的庫檔案腳本示例:
#!/bin/bash
#
target=/mnt/sysroot
[ -d $target ] || mkdir /mnt/sysroot
read -p "A command: " command
libcp() {
for lib in $(ldd $1 | grep -o "[^[:space:]]*/lib[^[:space:]]*"); do
libdir=$(dirname $lib)
[ -d $target$libdir ] || mkdir -p $target$libdir
[ -f $target$lib ] || cp $lib $target$lib
done
}
while [ "$command" != 'quit' ]; do
if ! which $command &> /dev/null; then
read -p "No such command, enter again: " command
continue
fi
command=$(which --skip-alias $command)
cmnddir=$(dirname $command)
[ -d $target$cmnddir ] || mkdir -p $target$cmnddir
[ -f $target$command ] || cp $command $target$command
libcp $command
read -p "Another command(quit): " command
done
指定grub配置檔案init=/bin/bash
②自己寫一個腳本模拟init
注意:要提前把把腳本中需要的指令拷貝到新的盤中
腳本要給下執行權限
③busybox
–1. 下載下傳解壓busybox包,進入解壓目錄,可檢視install安裝文檔
安裝依賴庫 yum install glibc-static
靜态編譯(兩種編譯方式:共享庫的編譯方式,需要依賴服務起中的共享庫;靜态編譯,把所需要的庫都編譯到檔案中)
–2. make menuconfig 生成配置檔案
選擇支援靜态編譯(不使用共享庫)
–3. make && make install
–4.複制生成檔案到新挂在磁盤
rm -rf * /mnt/sysroot/ 删除根目錄下的所有建立目錄,複制busybox生成檔案到此目錄,然後缺啥再給建立
cp -ar _install/* /mnt/sysroot
–5. 修改grub配置檔案 init=/sbin/init
–6.提供一個init配置檔案:vim /etc/inittab
–7.建立一個初始化腳本:vim etc/rc.d/rc.sysinit 并給下執行權限
–8.提供fstab檔案
–9.建立/etc/passwd /etc/shadow 并修改其中root資訊
(6)建立一個虛拟機并選擇所添加的磁盤進行啟動
4. 子產品化編譯核心
(1)make menuconfig 選擇核心支援得得選項輸入M(M表示編譯成子產品、*表示編譯到核心中)
(2)生成的檔案進行編譯成子產品:
編譯單個核心子產品:
# cd /usr/src/linux
# make M=path/to/somedir/
# make M=drivers/net/ethernet/intel/e1000/
(3)在初始化腳本中添加關于裝載次核心的指令