Linux內(nèi)核

內(nèi)核

單內(nèi)核體系設(shè)計(jì)、但充分借鑒了微內(nèi)核設(shè)計(jì)體系的優(yōu)點(diǎn),為內(nèi)核引入模塊化機(jī)制。

內(nèi)核組成部分:
    kernel:內(nèi)核核心,一般為bzimage,通常在/boot目錄下,名稱為vmlinuz
    kernel object:內(nèi)核對象一般有三種選擇,一般放置于/lib/modules/VERSION-RELEASE/
        [ ]:N 不選擇
        [ ]:M 選擇編譯為模塊
        [ ]:Y 直接選擇成為核心組成部分  
    輔助文件:ramdisk有以下兩種
        initrd
        initramfs
運(yùn)行中的內(nèi)核;
    uname命令
        uname - print system information
        uname [OPTION]...
        
            -a:顯示所有信息
            -s:顯示內(nèi)核即操作系統(tǒng)名稱
            -n:顯示主機(jī)節(jié)點(diǎn)名稱
            -r:內(nèi)核的版本號和release號
            -v:顯示內(nèi)核的版本制作信息
            -p:顯示處理器架構(gòu)信息
            -m:顯示內(nèi)核所在的硬件平臺名稱
            -o:顯示操作系統(tǒng)名稱
    模塊:
        lsmod命令
            顯示由核心已經(jīng)裝載的內(nèi)核模塊
            lsmod顯示的信息來自于cat /proc/modules文件
        
        modinfo:查看模塊的詳細(xì)信息  
            eg:modinfo ext4
            
            modinfo [ -0 ]  [ -F field ]  [ -k kernel ]  [ modulename|filename... ]
                -k:顯示指定內(nèi)核的詳細(xì)信息
                -p:顯示模塊參數(shù)
                -n:只顯示模塊文件路徑
                -a:只顯示模塊作者
                -d:顯示decription
                -l:license
                 
         modprobe:裝載或卸載內(nèi)核模塊
            modprobe  [ -C config-file ] [ modulename ]  [ module parameters... ]
                默認(rèn)配置文件:/etc/modprobe.conf,/etc/modprobe.d/*.conf 
                    -n:用作測試
                    -q:靜默模式
                    -r:移除模塊
                    -C:指明讀取模塊的配置文件路徑
            modprobe -r [ modulename... ]  卸載某模塊     
        
        depmod:內(nèi)核模塊依賴關(guān)系文件及系統(tǒng)信息映射文件的生成工具;
        
        裝載或卸載內(nèi)核模塊:
            insmod:裝載模塊(不解決依賴性關(guān)系)
                insmod [ filename ]  [ module options... ]
            rmmod:卸載模塊
                rmmod [ modulename ]
/proc目錄:內(nèi)核把自己內(nèi)部狀態(tài)信息及統(tǒng)計(jì)信息,以及可配置參數(shù)通過proc偽文件系統(tǒng)加以輸出
    參數(shù):
        只讀:輸出信息
        可寫:可接受用戶指定“新值”來實(shí)現(xiàn)對內(nèi)核某功能或特性的配置
            /proc/sys
            
            (1)sysctl命令用于查看或設(shè)定此目錄中諸多參數(shù)
                sysctl -w path.to.parameter=VALUE
                  sysctl -w kernel.hostname=danran.com  
            (2)echo命令通過重定向的方式也可以修改大多數(shù)參數(shù)的值
                echo "VALUE" > /proc/sys/path/to/parameter
                 
        sysctl
            配置文件:/etc/sysctl.conf 
                (1)設(shè)置參數(shù)
                    sysctl -w parameter=VALUE
                (2)通過讀取配置文件件設(shè)置參數(shù)生效
                    sysctl -p [/path/to/conf_file]
        
        內(nèi)核中的路由轉(zhuǎn)發(fā)
            sysctl -w /proc/sys/net/ipv4/ip_forword=1
        
        常用的參數(shù):
            net.ipv4.ip_forword
            kernel.hostname 
            sysctl -w vm.drop_caches=1 清理系統(tǒng)緩存

/sys目錄:
    sysfs:輸出內(nèi)核識別出的各硬件設(shè)備的相關(guān)屬性信息,也有內(nèi)核對硬件特性的設(shè)定信息,有些參數(shù)是可以修改的,用于調(diào)整硬件工作特性。
    udev:通過此路徑下輸出的信息動態(tài)為各設(shè)備創(chuàng)建所需要設(shè)備文件,udev是運(yùn)行用戶空間程序:專用工具:udevadmin,hotplug
    udev為設(shè)備創(chuàng)建設(shè)備文件時,會讀取其事先定義好的規(guī)則文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目錄下  
  • ramdisk文件的制作
(1) mkinitrd 為當(dāng)前正在使用的內(nèi)核重新制作ramdisk文件     
    mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) 由當(dāng)前系統(tǒng)版本生成相應(yīng)版本的initramfs文件    
(2) dracut命令 為當(dāng)前正在使用的內(nèi)核重新制作ramdisk文件       
    dracut /boot/initramfs-$(uname -r).img $(uname -r)
  • 編譯內(nèi)核
前提:
    (1) 準(zhǔn)備好開發(fā)環(huán)境
    (2) 獲取目標(biāo)主機(jī)上硬件設(shè)備的相關(guān)信息
    (3) 獲取到木變主機(jī)系統(tǒng)功能的相關(guān)信息,例如要啟動的文件系統(tǒng)   
準(zhǔn)備好開發(fā)環(huán)境:
    包組(Centos 6)
        Server Platform Development
        Development Tools
目標(biāo)主機(jī)硬件設(shè)備的相關(guān)信息:
    CPU:
        cat /proc/cpuinfo
        x86info -a
        lscpu   
    PCI
        lspci   查看PCI設(shè)備的信息
            -v
            -vv
        lsusb  查看usb設(shè)備的信息
        lsblk  查看塊設(shè)備的信息
    了解全部硬件設(shè)備信息
        hal-device

簡單依據(jù)模板文件的制作過程:
    tar xf liunx-3*.tar.gz -C /usr/src   -C指定指定目錄  
    cd /usr/src
    ln -sv linux-3* linux 創(chuàng)建解壓文件的軟鏈接linux
    cd linux
    cp /boot/config-$(uname -r) ./.config    復(fù)制boot目錄下的config-$(uname -r)文件到當(dāng)前目錄下并命名為.config 
    
    make menuconfig  執(zhí)行編譯,配置內(nèi)核選項(xiàng)  
        .config 文件文件
    make help
    screen 打開一個會話
    make -j #  #可以同內(nèi)核核心數(shù)一致,也可以是核心的兩倍,多線程同時編譯  
    make modules——install  安裝模塊   
    make install   安裝內(nèi)核 
        安裝bzImage為/boot/vmlinuz-VERSION-RELEASE
        生成initramfs文件
        編輯grub的配置文件
    init 6  重啟系統(tǒng),并測試使用新內(nèi)核   
  • 編譯內(nèi)核步驟
(1) 配置內(nèi)核選項(xiàng)
    支持“更新”模式進(jìn)行配置
        (a) make config:基于命令行以遍歷的方式去配置內(nèi)核中可配置的每個選項(xiàng)
        (b) make menuconfig:基于curses的文本窗口界面  
        (c) make gconfig:依賴GTK開發(fā)環(huán)境的窗口界面
        (d) make xconfig:基于QT開發(fā)環(huán)境的窗口界面   
    支持“全新配置”模式進(jìn)行配置
        (a) make defconfig:基于內(nèi)核為目標(biāo)平臺提供的“默認(rèn)”配置進(jìn)行配置;
        (b) make allnoconfig:所有選項(xiàng)均回答為“no”
(2) 編譯
    make [-j #] 
    如何只編譯內(nèi)核中的一部分功能:
        (1) 只編譯某某子目錄中的相關(guān)代碼
            cd /usr/src/linux
            make dir/ (只能使用相對路徑)
        
        (b) 只編譯一個特定的模塊
            cd /usr/src/linux
            make dir/file.ko
            
            eg:只為e1000編譯驅(qū)動
                make drivers/net/ethernet/intel/e1000/e1000.ko
        如何交叉編譯內(nèi)核
            編譯的目標(biāo)平臺與當(dāng)前平臺不相同  
                make ARCH=arch_name
            
            要獲取特定目標(biāo)平臺的使用幫助
                make ARCH=arch_name help  
  • 如何在已經(jīng)執(zhí)行過編譯操作的內(nèi)核源碼樹做重新編譯
事先清理操作
    make clean:清理大多數(shù)編譯生成的文件,但會保留config文件等;
    make mrproper:清理所有編譯生成的文件、config及某些備份文件
    make distclen:mrproper、patches以及編輯器備份文件   
  • screen命令
打開新的screen
    screen 
退出并關(guān)閉screen
    exit
剝離當(dāng)前screen
    Ctrla,d
顯示所有已經(jīng)打開的screen
    screen -ls
恢復(fù)某screen
    screen -r [SESSION]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 我們說的Linux其實(shí)指的就是 內(nèi)核(kernel)而已。這個內(nèi)核控制你主機(jī)的所有硬件并提供系統(tǒng)所有的功能,所以它...
    Zhang21閱讀 7,678評論 0 18
  • 一:前言 1:內(nèi)核的概念: Kernel(內(nèi)核)是操作系統(tǒng)的核心,掌控著所有硬件設(shè)備的控制權(quán)。計(jì)算機(jī)所要完成的各項(xiàng)...
    芷_念閱讀 2,270評論 0 3
  • 首先來一張圖說明GNU/Linux的基本的體系結(jié)構(gòu): 用戶模式和內(nèi)核模式 執(zhí)行進(jìn)程的模式有兩種:用戶模式和內(nèi)核模式...
    Joe_HUST閱讀 2,278評論 0 2
  • 你的身邊是不是有一些聰明人? 學(xué)生時代,他們不是那個上課最認(rèn)真,習(xí)題做的最多的人,但是考試成績他們名列前茅,不費(fèi)吹...
    Vivian思朦閱讀 1,332評論 0 2
  • 一個流傳較廣的段子,形象地描述了產(chǎn)品經(jīng)理的角色: 你去飯店,坐下來?!胺?wù)員,給我來份宮保雞?。 薄昂绵希 边@叫原...
    點(diǎn)融黑幫閱讀 721評論 3 8

友情鏈接更多精彩內(nèi)容