天天看點

25.了解Mini Linux 制作

  1. 啟動流程:

    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 制作
    ②在跟檔案系統建立必要的目錄
    25.了解Mini Linux 制作
    (4)拷貝編譯好的核心到/mnt/boot下,并編輯grub配置檔案使其能加載核心 :
    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

注意:要提前把把腳本中需要的指令拷貝到新的盤中

腳本要給下執行權限

25.了解Mini Linux 制作

③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

25.了解Mini Linux 制作

–7.建立一個初始化腳本:vim etc/rc.d/rc.sysinit 并給下執行權限

25.了解Mini Linux 制作

–8.提供fstab檔案

25.了解Mini Linux 制作

–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)在初始化腳本中添加關于裝載次核心的指令

繼續閱讀