1. 程式人生 > >課件-Linux核心的功能

課件-Linux核心的功能

Linux核心的功能

  • 啟動管理:在系統初始化過程中檢測硬體,載入驅動並引導系統。
  • 程序排程:負責控制程序對CPU的使用。
  • 程序通訊:提供了程序之間的各種通訊機制。
  • 記憶體管理:負責管理多個程序對記憶體的使用。
  • 檔案系統:使用虛擬檔案系統中間層支援多種不同型別的檔案系統。
  • 裝置管理:為裝置提供緩衝和快取以提高硬體的訪問速度。
  • 網路介面:對各種網路標準的存取和各種網路硬體的支援。
  • 安全管理:校驗檔案系統許可權,SELinux環境和防火牆規則。

REEL/CentOS下的核心

  • 核心的RPM包
    • kernel:一般用途的普通版核心,支援單核或多核CPU,最多支援4G實體記憶體。
    • kernel-PAE:支援大記憶體的核心,支援多核CPU,最多支援64G實體記憶體。
    • kernel-xen:支援Xen虛擬化(hypervisor)的核心。
    • 核心文件
    • kernel-doc

顯示核心相關的資訊

  • 顯示系統核心資訊
    • uname -srvmo
    • cat /proc/version
  • 顯示系統架構
    • arch
  • 顯示LSB(Linux Standard Base)和釋出資訊(Distribution information)
    • isb_release -a # 適用於所有的Linux發行版
  • 顯示Linux釋出版本(僅用於RedHat系列)
    • cat /etc/redhat-release
    • rpm -q {redhat,centos}-release

核心的重要元件

  • 核心映像檔案
    • 檔案儲存在/boot/vmlinux-$(uname -r)
    • 由啟動載入器(GRUB)直接載入到記憶體以便啟動核心
  • 核心模組
    • 可根據需要裝載或者解除安裝的核心擴充套件
    • 包括驅動程式、檔案系統,防火牆等等
  • 初始化記憶體盤(Bootloader Initialized RAM Disk)

核心模組

  • 核心的功能可以編譯到核心映像檔案,也可以編譯為獨立的模組。
  • 可以在系統執行期間動態地載入或解除安裝核心模組以改變系統功能。
  • 所有的核心模組儲存在/lib/modules/$(uname -r)目錄中。
  • /lib存在根檔案系統中,因此所有核心模組必須在根檔案系統掛載後才能使用。
  • 為特定的核心版本編譯,以kernel的RPM提供。
  • 可新增第三方模組

核心模組工具

  • lsmod:列出已裝載的模組
    • lsmod |grep usb

  • modprobe:裝載和解除安裝模組
    • modprobe usb_storage
    • modprobe -r usb_storage
  • modinfo:顯示模組的資訊
    • modinfo usb_storage

初始化記憶體盤

  • 初始化記憶體盤提供在引導初期裝載的模組
    • 用於核心映像檔案中沒有提供的其他裝置的核心驅動模組
  • 檔案儲存在/boot/initrd-$(uanme -r).img
  • 由啟動載入器(GRUB)直接載入到記憶體
  • 在引導初期,根檔案系統掛載之前使用
  • 是Linux安裝盤、Linux啟動盤(CD、USB)、LiveCD的必備部件

虛擬檔案系統/proc

  • 虛擬檔案系統/proc是在Linux啟動是掛載到根檔案系統上的,它是記憶體的一部分而非真正儲存在硬碟上
    • 重啟系統後上次的修改會被重新初始化
  • 使用/proc的目的就是將Linux的核心資料以目錄或檔案的形式呈現給使用者或應用程式,以便檢視核心資訊或臨時修改核心功能。
    • 顯示過程資訊、記憶體資源、硬體裝置、核心記憶體等
    • 修改網路、記憶體子系統等核心屬性,修改立即生效

/proc示例

  • 只讀檔案
    • /proc/1/*
    • /proc/cpuinfo
    • /proc/meminfo
    • /proc/partitions
  • /proc/sys/下的讀寫檔案
    • /proc/sys/kernel/hostname
    • /proc/sys/net/ipv4/ip_forward
    • /proc/sys/vm/drop_caches
    • /proc/sys/vm/swappiness

sysctl:持久的核心配置

  • sysctl使/proc/sys設定具有永續性
  • 重新引導後,在/etc/sysctl.conf中新增的配置會自動體現在/proc中
  • 使用sysctl命令進行配置維護或監控:
    • 列出所有當前設定:
      • sysctl -a

    • 從sysctl.conf中重新裝載:
      • sysctl -p

    • 設定一個動態/proc值:
      • sysctl -w net.ipv4.ip_forward=1

使用rpm命令升級核心

  • 安裝新版核心
    • rpm -i kernek*

    • 不要使用rpm -U 或 rpm -F!
  • 重新啟動系統,在GRUB中選擇新版核心啟動系統
  • 測試新版核心,若有任何問題發生可以使用舊版核心重新啟動系統
  • 當確信新版核心無任何問題時,刪除舊版核心
    • rpm -e kernel-oldversion

使用yum命令升級核心

  • 使用yum命令升級核心
    • yum -y update kernel

    • 主要包含如下操作: (1)下載最新版的核心RPM檔案 (2)安裝新版的核心RPM檔案 (3)根據/etc/sysconfig/kernel的設定自動配置GRUB
  • 測試新版核心,若有任何問題發生可以使用舊版核心重新啟動系統
  • 當確信新版核心無任何問題時,刪除舊版核心
    • yum remove kernel-oldversion

核心原始碼的結構

  • Linux原始碼檔名一般為:
    • Linux-2.6.10.tar.gz | Linux-2.6.10.tar.bz2
  • 安裝目錄:/usr/src/linux

Linux原始碼子目錄及功能(1)

  • /include:建立核心程式碼時所需的大部分包含檔案
  • /init:核心的初始化程式碼,核心工作的起點
  • /arch:所有與硬體體系結構相關的核心程式碼
  • /drivers:核心中所有的裝置驅動程式
  • /fs:所有的檔案系統的程式碼
  • /net:Linux應用的網路協議程式碼
  • /mm:所有與硬體體系結構無關的記憶體管理程式碼
  • /ipc:程序間通訊程式碼
  • /kernel:主核心程式碼,如程序排程及程序建立、撤銷的程式碼

1.為什麼要編譯核心?

  • 學習、體驗
  • 使用新核心中的功能
  • 修補安全漏洞和程式缺陷
  • 提高系統性能
  • 調整硬體裝置的變動

2.編譯核心前的準備

  • 做好心理上的準備O(∩_∩)O哈哈~
    • 失敗是正常的!
  • 下載核心
    • 本章使用2.6.10核心
    • 檔案:
      • Linux-2.6.10.tar.gz
      • Linux-2.6.10.tar.bz2
    • 核心原始碼存放位置
      • /usr/src
  • 原始碼解壓縮
    • tar xzvf Linux-2.6.10.tar.gz
    • tar xjvf Linux-2.6.10.tar.bz2
    • 此時,在/usr/src下生成Linux-2.6.10子目錄
    • 區別:2.4版本的核心生成的子目錄名為Linux

3.核心配置

  • 方法
    • make config
      • 不推薦,除非你願意在命令列回答成千上百個問題
    • make xconfig
      • 常用方法之一,需要QT工具支援
    • make gconfig
      • 需要GTK開發庫支援
    • make menuconfig
      • 常用方法之一,檔案模式的圖形使用者介面
  • 在源目錄中,生成.config檔案!
  • 核心配置選項
    • 符號說明
      • —>有子選單
        • */空白(編進核心/不選改項)
      • <> */M/空白(編進核心/以動態模組方式編譯/不選該項)
      • () 多選一
    • 選項說明

4.安裝新核心

  • 編譯
    • make (make bzimage、make modules)
  • 安裝模組檔案
    • make module_install
    • 將模組安裝到/lib/modules/2.6.10/下
  • 安裝核心檔案
    • make install
    • 在/boot下生成bzimage、system.map和initrd
  • 檢查GRUB是否已經配置完畢!
    • vi /etc/grub.conf
    • 注意:這個是軟連結檔案!

編譯核心3.0以上版本

  • 整個編譯過程類似於核心2.6的編譯
  • RHEL6之後用dracut來建立initramfs映象檔案,不在是以前的mkinitrd
  • make的使用,可以加上-jN(指定多少核進行編譯,根據系統的核心數情況,加快編譯速度,N就是指核數)
  • make clean只刪除編譯好的檔案
  • make mrproper把包還原成解壓出來時的樣子
  • 注意:關於後兩點,可以直接把檔案刪除,再重新解壓

練習

  • 在你的機器上,下載並安裝2.6.10版本的核心。