技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機(jī)純凈版,64位旗艦版,綠色軟件,免費(fèi)軟件下載基地!

當(dāng)前位置:主頁 > 教程 > 服務(wù)器類 >

linux內(nèi)核驅(qū)動-內(nèi)核初涉

來源:技術(shù)員聯(lián)盟┆發(fā)布時間:2018-08-30 00:22┆點(diǎn)擊:

  一、為什么要學(xué)習(xí)內(nèi)核?

  有些人要學(xué)習(xí)內(nèi)核,而有些人則可以不學(xué)習(xí)它。你如果以后要從事系統(tǒng)研發(fā)或驅(qū)動開發(fā)的話,就要學(xué)習(xí)內(nèi)核。

  剛剛接觸內(nèi)核,主要學(xué)習(xí)內(nèi)核的接口函數(shù)。不要深入的去讀內(nèi)核,因?yàn)槟阕x也讀不懂,內(nèi)核代碼龐大如野獸一般不可駕馭。

  學(xué)習(xí)內(nèi)核主要掌握層次學(xué)習(xí)法,即從頭開始學(xué)習(xí),一環(huán)緊扣一環(huán)。

  內(nèi)核學(xué)習(xí)的四步學(xué)習(xí)法:1、核心理論學(xué)習(xí)-概念與函數(shù)原型2、范例程序分析3、思維導(dǎo)圖設(shè)計(jì)4、親自編寫代碼

  二、linux內(nèi)核簡介

  1、linux體系結(jié)構(gòu)

  分為兩部分:用戶空間和內(nèi)核空間

linux內(nèi)核驅(qū)動-內(nèi)核初涉    三聯(lián)

  2、linux為什么要分為用戶空間和內(nèi)核空間

  現(xiàn)代CPU通常實(shí)現(xiàn)了不同的工作模式,以ARM為例,實(shí)現(xiàn)了7中工作模式。X86實(shí)現(xiàn)了4中不同的級別:Ring0-Ring3. Ring0下可以執(zhí)行特權(quán)指令,可以訪問IO設(shè)備等,在Ring3則有很多限制。linux系統(tǒng)利用CPU的這一特性,使用了其中兩個級別分別運(yùn)行l(wèi)inux內(nèi)核與應(yīng)用程序,這樣使操作系統(tǒng)本身得到充分的保護(hù)。例如:如果使用X86,用戶代碼運(yùn)行在Ring3,內(nèi)核代碼運(yùn)行在Ring0.內(nèi)核空間與用戶空間是程序執(zhí)行的兩種不同狀態(tài),通過系統(tǒng)調(diào)用和硬件中斷能夠完成從用戶空間到內(nèi)核空間的轉(zhuǎn)移。

  3.linux的內(nèi)核構(gòu)架

linux內(nèi)核驅(qū)動-內(nèi)核初涉

  系統(tǒng)調(diào)用接口

  SCI層為用戶空間提供了一套標(biāo)準(zhǔn)的系統(tǒng)調(diào)用函數(shù)來訪問Linux內(nèi)核,搭起了用戶空間到內(nèi)核空間的橋梁。

  進(jìn)程管理(PM)是創(chuàng)建進(jìn)程,停止進(jìn)程,并控制它們之間的通信。進(jìn)程管理還包括控制活動進(jìn)程如何共享CPU,即進(jìn)程調(diào)度。

  內(nèi)存管理(MM)的主要作用是控制多個進(jìn)程安全地共享內(nèi)存區(qū)域。

  網(wǎng)絡(luò)協(xié)議棧(Network Stack)為linux提供了豐富的網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)。

  虛擬文件系統(tǒng)(VFS)隱藏各個文件系統(tǒng)的具體細(xì)節(jié),為文件操作提供統(tǒng)一的接口。

linux內(nèi)核驅(qū)動-內(nèi)核初涉

  設(shè)備驅(qū)動(DD):linux內(nèi)核中有大量代碼都在設(shè)備驅(qū)動程序中,它們控制特定的硬件設(shè)備。

  三、linux內(nèi)核源代碼結(jié)構(gòu)

  1、下載源代碼地址

  2、linux內(nèi)核源代碼采用樹形結(jié)構(gòu)進(jìn)行組織,非常合理地把功能相關(guān)的文件都放在同一個子目錄下,使得程序更具可讀性。

linux內(nèi)核驅(qū)動-內(nèi)核初涉

  arch目錄:arch是architecture的縮寫。內(nèi)核所支持的每種CPU體系,在該目錄下都有對應(yīng)的子目錄。每個cpu的子目錄,又進(jìn)一步分解為boot,mm,kernel等子目錄,分別包含控制系統(tǒng)引導(dǎo),內(nèi)存管理,系統(tǒng)調(diào)用等。/* X86英特爾cpu與之相兼容體系結(jié)構(gòu)的子目錄:boot 引導(dǎo)程序compressed內(nèi)核解壓縮 tools生成壓縮內(nèi)核映像的程序 kernel相關(guān)內(nèi)核特性實(shí)現(xiàn)方式,如信號處理、時鐘處理 lib 硬件相關(guān)工具函數(shù)*/

  documentation內(nèi)核文檔

  drivers設(shè)備驅(qū)動文檔

  include內(nèi)核所需要的頭文件。與平臺無關(guān)的頭文件在include/linux子目錄下,與平臺有關(guān)的頭文件則放在相應(yīng)的子目錄中。

  fs目錄存放各種文件系統(tǒng)的實(shí)現(xiàn)代碼。每個子目錄對應(yīng)一種文件系統(tǒng)的實(shí)現(xiàn),公用的源程序用于實(shí)現(xiàn)虛擬文件系統(tǒng)vfs

  "|--devpts是/dev/pts虛擬文件系統(tǒng)

  ||--ext2是第二擴(kuò)展文件系統(tǒng)

  ||--fat是MS的fat32文件系統(tǒng)

  ||--isofs 是IsO9660光盤cd-rom上的文件系統(tǒng)

  net是網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn)代碼

  ||--802 802無線通訊協(xié)議核心支持代碼

  ||--appletalk 與蘋果系統(tǒng)連網(wǎng)的協(xié)議

  ||--ax25 AX25無線INTERNET協(xié)議

  ||--bridge 橋接設(shè)備

  ||--ipv4 IP協(xié)議族V4版32位尋址模式

  ||--ipv6 IP協(xié)議族V6版

  四、linux內(nèi)核的配置和編譯

  代碼是如何轉(zhuǎn)化為燒寫或安裝到硬件平臺中的系統(tǒng)映像文件的?

  1、為什么要配置內(nèi)核

  選出需要的,去掉不要的!1、硬件的需求2、軟件的需求

  下載內(nèi)核后要在linux中解壓縮,不要在windows下解壓縮因?yàn)閣indows下不區(qū)分大小寫,而linux操作系統(tǒng)區(qū)分大小寫。

  進(jìn)入內(nèi)核的文件下:

  2、內(nèi)核的配置:

  make config:基于文本模式的交互式配置

  make menuconfig:基于文本模式的菜單型配置

linux內(nèi)核驅(qū)動-內(nèi)核初涉

  <*>文件經(jīng)過編譯由.c文件到.o文件,最后鏈接壓縮為內(nèi)核鏡像,它存放在內(nèi)存。

  內(nèi)核模塊,同上經(jīng)過編譯后會把.o文件安裝到硬盤。

  < >表示不選擇該功能

  配置結(jié)果文件是隱藏文件,可以用ls -a 在內(nèi)核文件下查看.config version