14_01~~14_04

14_01

linux系統啓動流程

POST(加電自檢)-->BIOS(Boot Sequence)-->MBR(bootloader,446(mbr只讀取一個,不會再讀取第二個))-->Kernel(一般是壓縮存放的)-->(ROOTFS)/sbin/init(/etc/inittab)-->-->-->

啓動的服務不同:

運行級別:0-6

 0:halt(關機)

 1:single user mode,直接以管理員身份切入

 2:multi user mode, no NFS

 3: multi user mode(文本多用戶模式.text mode)

 4:reserved(暫未使用,保留的模式)

 5: multi user mode(圖形多用戶模式,graphic mode)

 6:reboot()

詳細啓動過程:(windows的bootloder不認其他系統,所以如果先安裝linux再安裝windows,windows的bootloader就把linux的bootloader覆蓋掉,安裝雙系統須先安裝windows)

!!win8會鎖定MBR,所以安裝了win8後,該硬盤就安裝不了其他系統

linux的bootloader(MBR)

 LILO:LInux LOader(不能引導1024柱面之後的分區的內核,不支持8G後的磁盤,適合於嵌入式)

 GRUB:GRand Unified Bootloader

   Stage1:MBR

   Stage1_5:

   Stage2:/boot/grub/

grub.conf

default=0 # 設定默認啓動的title的編號,從0開始

timeout=s # 等待用戶選擇的超時時長,單位是秒

splashimage=(hd0,0)/grub/splash.xpm.gz # grub的背景圖片

hiddemenu: # 隱藏菜單

title Red Hat Enterprice Linux Server(2.6.18-308.el5) #內核標題,或操作系統名稱,字符串,可自由修改

  root (hd0,0) #內核文件所在的設備:對grub而言,所有類型硬盤一律hd,格式爲(hd#,N):hd#,  #表示第幾個磁盤:最後的N表示對應磁盤的分區;

  kernel /vmlinxu-2.6.18-308.el5 ro root=/dev/vo10/root rhgb quiet  #內核文件路徑,及傳遞給內核的參數

  initrd /initrd-2.6.18-308.el5.img  ramdisk文件路徑(安裝系統的過程的最後一步生成的)!!!!版本號要保持一致

,,,,

,,,,

,,,,

內核設計風格:

核心:動態加載 外圍的內核模塊

內核:/lib/modules/"內核版本號命名的目錄"/

內核自身名稱:vmlinux-x.x.x

/lib/modules/2.26.32/

RedHat5: ramdisk-->initrd

RedHat6:ramfs-->initramfs

Redhat,SUSE

     單內核:設計簡單,linux(線程在linux中被稱爲,輕量級進程--LWP。)

           核心:ko(kernel object)

           so()

     微內核:設計複雜,windows,Solaris(線程)

chroot: 裝換根的目錄。:chroot /PSTH/TO/TEMPROOT [COMMAND。。。]

    chroot /test/virrot  /bin/bash

ldd /PSTH/TO/BINARY_FILE:顯示二進制文件所以來的共享庫

根是自引用的。






10:0:wait: /etc/rc.d/rc 0

  rc0.d/

    K*

        stop

    S*

        start

/etc/rc.d/init.d, /etc/init.d

服務類腳本:

    start

    SysV: /etc/rc.d/init.d

         start|stop|restart|status

         reload|configtest

chkconfig(!雖然chkconfig和description被註釋掉了,但是chkconfig還是會分析這兩行。當我們使用chkconfig命令時,任何有了這幾行的腳本,都能夠自動被創建連接)

#chkconfig:runlevels SS(啓動優先次序) KK(關閉優先次序)

    runlevels:'-'表示沒有級別,默認爲s*開頭的連接;

        如果省略級別指定,默認爲2345級別或當前級別;

    當chkconfig命令爲此腳本在rc#.d目錄創建連接時,runlevels表示默認創建爲S*開頭的連接,除此以外的級別都默認創建爲K*開頭的連接;

   s後面的啓動優先級爲ss所表示的數字;k後面關閉優先次序爲kk所表示的數字;

#description:說明此腳本的簡單功能;\,續行

@@@先開啓的服務後關閉,後開啓的服務先關閉的原因是,先開啓的服務可能被後面的服務所依賴

chkconfig

   --list 空     查看所有獨立守護服務的啓動設定;  獨立守護進程!

   --list 服務名  查看特定服務

chkconfig --add SERVICE_NAME  創建/rc.d的鏈接文件

chkconfig --del 服務名     刪除/rc.d下的鏈接文件

chkconfig --level RUNLEVELS 服務名 {on|off}

myservice.sh:通過鎖文件判斷一個服務是否開啓

#!/bin/bash

#

#chkconfig: 2345 77 22

#description:Test Service

#

LOCKFILE=/var/lock/subsys/myservice

status() {

        if [ -e $LOCKFILE ]; then

                echo "Running..."

        else

                echo "Stoped."

        fi

}

usage() {

echo "'basename $0' {start|stop|restart|status}"

}

case $1 in

start)

        echo "Starting..."

        touch $LOCKFILE

        ;;

stop)

        echo "Stoping..."

        rm -f $LOCKFILE &> /dev/null

        ;;

restart)

        echo "restart..."

        ;;

status)

        status

        ;;

*)

        usage

        ;;

esac

/etc/rc.d/rc.local:系統最後啓動的一個服務,準確說,應該執行的一個腳本;

S99loacl 系統啓動時,最後一個啓動的腳本。

      所以一些不方便定義成服務的,或者我們不易把之寫成腳本的命令,我們可以寫入這裏!!!!!!

/etc/inittab的任務:

1、設定默認運行級別;

2、運行系統初始化腳本;

3、運行指定級別對應的目錄下的腳本;

4、設定Ctrl+Alt+Del組合鍵的操作;

5、定義ups電源在電源故障/恢復時執行的操作;

6、啓動虛擬終端(2345級別);

7、啓動圖形終端(5級別);

守護進程類型:

   獨立守護進程

       xinitd:超級守護進程(需要關聯運行級別)。超級守護進程是瞬時守護進程的代理人  (多個超級守護進程)

   瞬時守護進程:不需要關聯至運行級別(多個瞬時守護進程)

           



核心: /boot/vmlinuz-version

內核模塊(ko):/lib/modules/version/

內核設計:

    單內核

     模塊化設計

    微內核

裝載模塊:

    insmod

    modprobe

www.kernel.org

 kernel-2.6.17------2(主版本號).6(次版本號).17(修正號)

用戶空間訪問、監控內核的方式:

/proc,/sys

僞文件系統

/proc/sys: 此目錄中的文件很多是可讀寫的

/sys/:某些文件可讀寫

設定內核參數值的方法:(暫時)

echo VALUE > /proc/sys/TO/SOMEFILE

sysctl -W kernel.hostname

永久有效(不能立即生效): /etc/sysctl.conf

立即生效的命令:#sysctl -p  -------通知內核重讀sysctl.conf

sysctl -a :顯示所有內核參數及其值

內核模塊管理:

lsmod :查看 使用的內核模塊

modprobe MOD_MAME; 裝載某模塊

modprobe -r MOD_MAME; 卸載某軟件模塊


modinfo:查看某模塊的相關信息


insmod /PATH/TO/MODULE_FILE;裝載模塊

rmmod MOD_NAME;


depmod /PATH/TO/MODULE_DIR;




POST-->BIOS(Boot Sequence) --> BootLoader(MBR)-->Kernel(initrd,initramfs)-->init(/etc/inittab)


/etc/inittab:

  設定默認運行級別

  系統初始化(/etc/rc.d/rc.sysinit)

  運行指定級別的服務腳本

    /etc/rc.d/init.d/

      /etc/rc.d/rc#.d

        rc0.d--rc6.d

             K*

             S*

                00-99:運行次序

  啓動虛擬終端

  啓動圖形終端



/etc/rc.d/rc.sysinit:

  檢測並以讀寫方式重新掛載根文件系統;

  設定主機名;

  檢測並掛載/etc/fstab中的其他文件系統;

  啓動swap分區;

  初始化外圍硬件設備的驅動;

RHRL6:

  upstart-->init

   /etc/inittab

   /etc/init/*.conf

內核初始化:

 

16_01

編譯內核:

1、配置

make menuconfig

make gconfig

make kconfig

make oldconfig

make config

保存爲 .config


2、

make

make modules_install

make install


模塊安裝位置: /lib/modules/KERNEL_VERSION/

如何實現部分編譯:

1、只編譯某子目錄下的相關代碼:

 make dir/

 make arch/

 make drivers/net/

2、只編譯部分模塊

make M=drivers/net/






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章