91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux驅(qū)動編程基礎(chǔ)知識講解

汽車玩家 ? 來源:今日頭條 ? 作者:嵌入式在左C語言在 ? 2020-03-01 08:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

由于Linux驅(qū)動編程的本質(zhì)屬于Linux內(nèi)核編程,因此我們非常有必要熟悉Linux內(nèi)核以及Linux內(nèi)核的特點(diǎn)。 這篇文章將會幫助讀者打下Linux驅(qū)動編程的基礎(chǔ)知識。

本篇文章分為如下三個小節(jié)進(jìn)行講解:

1、Linux內(nèi)核的組成(進(jìn)程調(diào)度、內(nèi)存管理、虛擬文件系統(tǒng)、網(wǎng)絡(luò)接口和進(jìn)程間通信);

2、Linux的用戶空間和內(nèi)核空間;

3、Linux內(nèi)核的引導(dǎo)過程。

1、Linux內(nèi)核的組成

1.1、Linux內(nèi)核源代碼的目錄結(jié)構(gòu)

讀者朋友千萬不要覺得了解目錄結(jié)構(gòu)對我們進(jìn)行Linux開發(fā)沒什么幫助,實(shí)際上目錄體現(xiàn)了Linux的整體架構(gòu)和思想,對于我們理解Linux是大有裨益的。Linux內(nèi)核源代碼包含如下目錄:

arch:包含和硬件體系結(jié)構(gòu)相關(guān)的代碼,每種平臺占一個相應(yīng)的目錄,如:ARM、PowerPC、MIPS等,在arch目錄下,存放了各個不同的平臺芯片對Linux內(nèi)核進(jìn)程調(diào)度、內(nèi)存管理和中斷等的支持;

block:塊設(shè)備驅(qū)動程序調(diào)度(塊設(shè)備不是我們學(xué)習(xí)的重點(diǎn),前期學(xué)習(xí)中可忽略);

crypto:常用加密算法、一些壓縮算法和CRC校驗(yàn)算法;

documentation:內(nèi)核各部分的注釋;

drivers:設(shè)備驅(qū)動程序,每個不同的驅(qū)動占用一個子目錄,如char、net、i2c、spi等(重點(diǎn)來了,劃重點(diǎn)了:高工資,設(shè)備驅(qū)動程序就是我們學(xué)習(xí)的重點(diǎn),而開發(fā)過單片機(jī)程序的讀者對驅(qū)動程序應(yīng)該有更深刻的理解);

fs:所支持的各種文件系統(tǒng),如EXT、FAT、NTFS等;

include:頭文件,與系統(tǒng)相關(guān)的頭文件放在include/linux的目錄下;

init:內(nèi)核初始化代碼;

ipc:進(jìn)程間通信的代碼;

kernel:內(nèi)核最核心的部分,包括進(jìn)程調(diào)度和定時器等;

lib:庫文件代碼;

mm:內(nèi)存管理代碼:

net:網(wǎng)絡(luò)相關(guān)代碼,實(shí)現(xiàn)常見的網(wǎng)絡(luò)協(xié)議;

scripts:用于配置內(nèi)核的文件;

security:主要是一個SELinux模塊;

sound:音頻設(shè)備的驅(qū)動核心代碼;

usr:實(shí)現(xiàn)用于打包和壓縮等。

Linux驅(qū)動編程基礎(chǔ)知識講解

Linux的目錄結(jié)構(gòu)

1.2、進(jìn)程調(diào)度

進(jìn)程調(diào)度控制系統(tǒng)中的多個進(jìn)程對CPU的訪問,使得多個進(jìn)程能夠在CPU中“宏觀并行、微觀串行”地執(zhí)行。進(jìn)程調(diào)度處于系統(tǒng)的中心位置,內(nèi)核其他的功能都依賴于它,因?yàn)槊總€子系統(tǒng)都需要掛起或者恢復(fù)進(jìn)程。Linux進(jìn)程會在幾個狀態(tài)之間進(jìn)行切換,在設(shè)備驅(qū)動編程中,當(dāng)請求的資源不能得到滿足時,驅(qū)動一般或調(diào)度其他進(jìn)程執(zhí)行并使本進(jìn)程進(jìn)入睡眠狀態(tài),直到它請求的資源被釋放,才會被系統(tǒng)喚醒從而進(jìn)入就緒狀態(tài)等待調(diào)度。絕大多數(shù)的進(jìn)程是由我們的應(yīng)用程序創(chuàng)建的,當(dāng)它們存在硬件訪問的需求時,會通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核空間(文章的后面會講到用戶空間和內(nèi)核空間的區(qū)別)。

1.3、內(nèi)存管理

內(nèi)存管理的主要作用是控制多個進(jìn)程安全的共享內(nèi)存區(qū)域。當(dāng)CPU提供內(nèi)存管理單元MMU時,Linux內(nèi)存管理對于每個進(jìn)程完成從虛擬內(nèi)存到物理內(nèi)存的轉(zhuǎn)換?,F(xiàn)在常用的處理器都是32位的,那么每個進(jìn)程也就享有4GB(2的32次方)的內(nèi)存空間,0~3GB屬于用戶空間,3~4GB屬于內(nèi)核空間。當(dāng)然,這個界限是可以調(diào)整的,但是我們一般使用這個默認(rèn)配置即可。

1.4、虛擬文件系統(tǒng)

Linux虛擬文件系統(tǒng)隱藏了各種硬件的具體細(xì)節(jié),為所有設(shè)備提供了統(tǒng)一的接口。而且,虛擬文件系統(tǒng)獨(dú)立于各個具體的文件系統(tǒng),是對各種文件系統(tǒng)的一個抽象。它為上層的應(yīng)用程序提供了統(tǒng)一的vfs_read()、vfs_write()等接口,然后它在調(diào)用具體的底層文件系統(tǒng)或者設(shè)備驅(qū)動中實(shí)現(xiàn)的file_operations結(jié)構(gòu)體的成員函數(shù)(這個結(jié)構(gòu)體將是我們后面學(xué)習(xí)Linux設(shè)備驅(qū)動的關(guān)鍵數(shù)據(jù)結(jié)構(gòu))。

1.5、網(wǎng)絡(luò)接口

網(wǎng)絡(luò)接口提供了對各種網(wǎng)絡(luò)標(biāo)準(zhǔn)的存取和網(wǎng)絡(luò)硬件的支持。在Linux中網(wǎng)絡(luò)接口可分為網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)驅(qū)動程序,網(wǎng)絡(luò)協(xié)議負(fù)責(zé)實(shí)現(xiàn)每一種可能的網(wǎng)絡(luò)傳輸協(xié)議,網(wǎng)絡(luò)設(shè)備驅(qū)動程序負(fù)責(zé)與硬件設(shè)備通信。Linux內(nèi)核支持的協(xié)議棧很多,例如:Internet、NFC、Bluetooth等,在上層的應(yīng)用程序中統(tǒng)一使用接口??吹竭@里,我想你也大概明白了吧,都是套路,我們需要學(xué)會這些調(diào)用API的套路。

1.6、進(jìn)程間通信

Linux支持進(jìn)程間的多種通信機(jī)制,包含信號量、共享內(nèi)存、消息隊(duì)列、管道等,這些機(jī)制可以協(xié)調(diào)多個進(jìn)程、多個資源的互斥訪問,進(jìn)程間的同步和消息傳遞。這一部分也是我們后續(xù)學(xué)習(xí)的重點(diǎn)。

2、Linux內(nèi)核的用戶空間和內(nèi)核空間

在Linux中分為用戶空間和內(nèi)核空間,我們開發(fā)時寫的程序就是運(yùn)行在用戶空間,那我在這一節(jié)為什么又要說驅(qū)動的編程實(shí)質(zhì)上就是內(nèi)核的編程呢?這是因?yàn)槲覀兺瓿沈?qū)動程序的開發(fā)之后,它是被編譯進(jìn)內(nèi)核的,那它也就屬于內(nèi)核空間。在這種情況下,上層的程序是不能直接訪問底層功能的,這就意味著應(yīng)用程序是被禁止直接訪問硬件和內(nèi)存的,在應(yīng)用程序中操作硬件的時候,其實(shí)發(fā)生了這樣一個轉(zhuǎn)換的過程:應(yīng)用程序(用戶空間)--->系統(tǒng)調(diào)用(文件系統(tǒng))--->內(nèi)核空間(驅(qū)動程序)。這樣做有很多優(yōu)點(diǎn),最重要的一點(diǎn)是保證了系統(tǒng)的安全運(yùn)行。

內(nèi)核空間和用戶空間這兩個名詞還用來區(qū)別程序執(zhí)行的兩種不同狀態(tài),也就是用戶態(tài)和內(nèi)核態(tài),他們使用的是不同的地址空間??吹竭@里的讀者還記不記得他們分別使用的地址空間呢?上文已經(jīng)說過了哦。

Linux驅(qū)動編程基礎(chǔ)知識講解

用戶和內(nèi)核使用的地址空間

3、Linux內(nèi)核的引導(dǎo)過程

SoC上電時,CPU0會先引導(dǎo)bootloader,而其他的CPU則判斷自己是不是CPU0,進(jìn)入等待狀態(tài)等待CPU0來喚醒它。CPU0引導(dǎo)bootloader,bootloader引導(dǎo)Linux內(nèi)核,在內(nèi)核啟動階段,CPU0會發(fā)中斷喚醒CPU1,之后CPU0和CPU1都投入運(yùn)行。CPU0導(dǎo)致了用戶空間的init初始化程序被調(diào)用,init程序再派生出其他進(jìn)程,然后這些進(jìn)程再派生出其他的進(jìn)程 (看到這里你有沒有想起單片機(jī)開發(fā)時的啟動文件stm32f10x_startup.s,正因?yàn)橛兴鼛臀覀儼汛a運(yùn)行的環(huán)境都準(zhǔn)備好了,所以我們才直接從main函數(shù)進(jìn)入)

Linux驅(qū)動編程基礎(chǔ)知識講解

Linux系統(tǒng)的啟動流程(大概看一下)

關(guān)于內(nèi)核啟動,與我們關(guān)系比較大的部分是每個平臺的設(shè)備回調(diào)函數(shù)和屬性信息,這些回調(diào)函數(shù)會在內(nèi)核啟動過程中被調(diào)用,后續(xù)的文章會進(jìn)一步介紹。

相信讀者已經(jīng)對Linux的內(nèi)核有了一個初步的了解,當(dāng)然這只是初步的而已,更多更難的還在后面等著你呢!我們一步一步來,循序漸進(jìn)的學(xué)習(xí)才能達(dá)到最好的效果。下一篇文章將介紹在Linux中 C語言編程的特點(diǎn)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11281

    瀏覽量

    225120
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9525

    瀏覽量

    157091
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11764

    瀏覽量

    219099
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    labview編程基礎(chǔ)知識分享

    最近建了一個公眾號,本人會在上面進(jìn)行l(wèi)abview編程知識的分享,歡迎大家關(guān)注;公眾號叫:上位機(jī)知識分享LABVIEW
    發(fā)表于 02-13 10:08

    阻燃系列基礎(chǔ)知識

    我很榮幸有機(jī)會在這里與大家分享我對阻燃系列基礎(chǔ)知識的研究。今天,我們將探討的主題是“阻燃系列基礎(chǔ)知識”。在我們?nèi)粘I钪?,火?zāi)事故頻發(fā),造成巨大的財產(chǎn)損失和人員傷亡。因此,了解阻燃材料的基礎(chǔ)知識對于
    的頭像 發(fā)表于 02-06 08:07 ?325次閱讀
    阻燃系列<b class='flag-5'>基礎(chǔ)知識</b>

    深度解析ES8389/ES8390/音頻芯片Linux驅(qū)動Linux6.1內(nèi)核)

    基于 Linux6.1 內(nèi)核,從驅(qū)動架構(gòu)、寄存器配置、核心函數(shù)、數(shù)據(jù)流走向四個維度,完整拆解 ES8389 的 Linux 驅(qū)動實(shí)現(xiàn),幫你吃透這款芯片的
    的頭像 發(fā)表于 02-02 11:37 ?1421次閱讀
    深度解析ES8389/ES8390/音頻芯片<b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動</b>(<b class='flag-5'>Linux</b>6.1內(nèi)核)

    無刷電機(jī)驅(qū)動器的基礎(chǔ)知識

    本文將從技術(shù)角度出發(fā),對三相無刷電機(jī)的電機(jī)驅(qū)動器的作用、種類和規(guī)格進(jìn)行介紹。通過本文,您可以學(xué)習(xí)到電機(jī)驅(qū)動器選型所需的基礎(chǔ)知識
    的頭像 發(fā)表于 12-10 14:13 ?6700次閱讀
    無刷電機(jī)<b class='flag-5'>驅(qū)動</b>器的<b class='flag-5'>基礎(chǔ)知識</b>

    Linux驅(qū)動開發(fā)的必備知識

    內(nèi)核基礎(chǔ)知識: 1、熟悉 Linux 內(nèi)核的架構(gòu)、模塊系統(tǒng)、進(jìn)程管理、內(nèi)存管理等。 了解內(nèi)核的編譯和加載過程。 2、C編程技能: 精通 C 語言編程,包括指針操作、內(nèi)存管理、結(jié)
    發(fā)表于 12-04 07:58

    【免費(fèi)送書】成為硬核Linux開發(fā)者:《Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)》

    Linux系統(tǒng)的設(shè)備驅(qū)動開發(fā),一直給人門檻較高的印象,主要因內(nèi)核機(jī)制抽象、需深度理解硬件原理、開發(fā)調(diào)試難度大所致。2021年,一本講解驅(qū)動開發(fā)的專著問世即獲市場青睞,暢銷近萬冊——這便
    的頭像 發(fā)表于 11-18 08:06 ?1457次閱讀
    【免費(fèi)送書】成為硬核<b class='flag-5'>Linux</b>開發(fā)者:《<b class='flag-5'>Linux</b> 設(shè)備<b class='flag-5'>驅(qū)動</b>開發(fā)(第 2 版)》

    【書籍評測活動NO.67】成為硬核Linux開發(fā)者:《Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)》

    ——這便是《Linux 設(shè)備驅(qū)動開發(fā)》。本書從基礎(chǔ)知識出發(fā),分專題透徹講解Linux環(huán)境下的設(shè)備驅(qū)動
    發(fā)表于 11-17 17:52

    視覺工程師必須知道的工業(yè)相機(jī)基礎(chǔ)知識

    工業(yè)相機(jī)基礎(chǔ)知識概述。
    的頭像 發(fā)表于 09-19 17:04 ?1322次閱讀
    視覺工程師必須知道的工業(yè)相機(jī)<b class='flag-5'>基礎(chǔ)知識</b>

    【「Yocto項(xiàng)目實(shí)戰(zhàn)教程:高效定制嵌入式Linux系統(tǒng)」閱讀體驗(yàn)】+基礎(chǔ)概念學(xué)習(xí)理解

    。為了對珠峰更了解些,開始接觸 Linux 系統(tǒng)開發(fā),并逐漸認(rèn)識到 Yocto 項(xiàng)目在定制嵌入式 Linux 系統(tǒng)方面的重要性。所以很想拜讀下此書。 二、書籍內(nèi)容概述 基礎(chǔ)知識 書中首先回顧了
    發(fā)表于 08-04 22:29

    IGBT驅(qū)動與保護(hù)電路設(shè)計及 應(yīng)用電路實(shí)例

    本書結(jié)合國內(nèi)外IGBT的發(fā)展和最新應(yīng)用技術(shù),以從事IGBT應(yīng)用電路設(shè)計人員為本書的讀者對象,系統(tǒng)、全面地講解了IGBT應(yīng)用電路設(shè)計必備的基礎(chǔ)知識,并選取和總結(jié)了IGBT的典型應(yīng)用電路設(shè)計實(shí)例,以供
    發(fā)表于 07-14 17:32

    【「Yocto項(xiàng)目實(shí)戰(zhàn)教程:高效定制嵌入式Linux系統(tǒng)」閱讀體驗(yàn)】01初讀體驗(yàn)

    順序?yàn)閺幕A(chǔ)到進(jìn)階,從進(jìn)階到實(shí)戰(zhàn),也就是說前面的部分偏理論知識學(xué)習(xí),后端知識偏向于項(xiàng)目應(yīng)用 Yocto可能能解決目前linux源碼中的無用代碼過多的問題(我一直覺得linux,zepy
    發(fā)表于 06-30 21:49

    最易讀懂的理工科基礎(chǔ)叢書——圖解電機(jī)基礎(chǔ)知識入門

    本書深人淺出地介紹了電動機(jī)的基礎(chǔ)知識、應(yīng)用和發(fā)展,其內(nèi)容包括電動機(jī)的用途、電動機(jī)的基礎(chǔ)知識及應(yīng)用、電流和磁場的關(guān)系、直流電動機(jī)的結(jié)構(gòu)和作用、交流電動機(jī)的結(jié)構(gòu)和作用、特殊電動機(jī)的結(jié)構(gòu)和作用
    發(fā)表于 04-07 18:28

    1-半導(dǎo)體基礎(chǔ)知識(童詩白、華成英主編)

    介紹了半導(dǎo)體基礎(chǔ)知識,二極管,三極管。
    發(fā)表于 03-28 16:12

    效果器的基礎(chǔ)知識

    電子發(fā)燒友網(wǎng)站提供《效果器的基礎(chǔ)知識.doc》資料免費(fèi)下載
    發(fā)表于 03-26 14:30 ?7次下載

    【北京迅為】iTOP-RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)-第4章 UART基礎(chǔ)知識

    【北京迅為】iTOP-RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)-第4章 UART基礎(chǔ)知識
    的頭像 發(fā)表于 03-17 15:50 ?1053次閱讀
    【北京迅為】iTOP-RK3568開發(fā)板OpenHarmony系統(tǒng)南向<b class='flag-5'>驅(qū)動</b>開發(fā)-第4章 UART<b class='flag-5'>基礎(chǔ)知識</b>