在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

Linux驅(qū)動(dòng)編程基礎(chǔ)知識(shí)講解

汽車(chē)玩家 ? 來(lái)源:今日頭條 ? 作者:嵌入式在左C語(yǔ)言在 ? 2020-03-01 08:27 ? 次閱讀

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

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

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

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

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

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

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

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

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

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

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

documentation:內(nèi)核各部分的注釋?zhuān)?/p>

drivers:設(shè)備驅(qū)動(dòng)程序,每個(gè)不同的驅(qū)動(dòng)占用一個(gè)子目錄,如char、net、i2c、spi等(重點(diǎn)來(lái)了,劃重點(diǎn)了:高工資,設(shè)備驅(qū)動(dòng)程序就是我們學(xué)習(xí)的重點(diǎn),而開(kāi)發(fā)過(guò)單片機(jī)程序的讀者對(duì)驅(qū)動(dòng)程序應(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)度和定時(shí)器等;

lib:庫(kù)文件代碼;

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

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

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

security:主要是一個(gè)SELinux模塊;

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

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

Linux驅(qū)動(dòng)編程基礎(chǔ)知識(shí)講解

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

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

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

1.3、內(nèi)存管理

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

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

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

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

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

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

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

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

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

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

Linux驅(qū)動(dòng)編程基礎(chǔ)知識(shí)講解

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

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

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

Linux驅(qū)動(dòng)編程基礎(chǔ)知識(shí)講解

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

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

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

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

    關(guān)注

    68

    文章

    11006

    瀏覽量

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

    關(guān)注

    33

    文章

    8880

    瀏覽量

    152942
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11415

    瀏覽量

    212266
收藏 0人收藏
  • 世界微尘1
  • 神经蛙收到v冯如杯1

評(píng)論

相關(guān)推薦

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

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

【北京迅為】iTOP-RK3568OpenHarmony系統(tǒng)南向驅(qū)動(dòng)開(kāi)發(fā)GPIO基礎(chǔ)知識(shí)

【北京迅為】iTOP-RK3568OpenHarmony系統(tǒng)南向驅(qū)動(dòng)開(kāi)發(fā)GPIO基礎(chǔ)知識(shí)
的頭像 發(fā)表于 03-06 11:23 ?419次閱讀
【北京迅為】iTOP-RK3568OpenHarmony系統(tǒng)南向<b class='flag-5'>驅(qū)動(dòng)</b>開(kāi)發(fā)GPIO<b class='flag-5'>基礎(chǔ)知識(shí)</b>

功率器件熱設(shè)計(jì)基礎(chǔ)知識(shí)

功率器件熱設(shè)計(jì)是實(shí)現(xiàn)IGBT、碳化硅SiC等高功率密度器件可靠運(yùn)行的基礎(chǔ)。掌握功率半導(dǎo)體的熱設(shè)計(jì)基礎(chǔ)知識(shí),不僅有助于提高功率器件的利用率和系統(tǒng)可靠性,還能有效降低系統(tǒng)成本。本文將從熱設(shè)計(jì)的基本概念、散熱形式、熱阻與導(dǎo)熱系數(shù)、功率模塊的結(jié)構(gòu)和熱阻分析等方面,對(duì)功率器件熱設(shè)計(jì)基礎(chǔ)知識(shí)
的頭像 發(fā)表于 02-03 14:17 ?488次閱讀

PCB繪制基礎(chǔ)知識(shí)

電子發(fā)燒友網(wǎng)站提供《PCB繪制基礎(chǔ)知識(shí).pdf》資料免費(fèi)下載
發(fā)表于 01-21 15:20 ?5次下載
PCB繪制<b class='flag-5'>基礎(chǔ)知識(shí)</b>

EMC基礎(chǔ)知識(shí)-華為

EMC基礎(chǔ)知識(shí)-華為
發(fā)表于 01-06 14:09 ?2次下載

品質(zhì)管理基礎(chǔ)知識(shí)

品質(zhì)管理基礎(chǔ)知識(shí)
的頭像 發(fā)表于 11-01 11:08 ?565次閱讀
品質(zhì)管理<b class='flag-5'>基礎(chǔ)知識(shí)</b>

TWL6030氣體監(jiān)測(cè)基礎(chǔ)知識(shí)

電子發(fā)燒友網(wǎng)站提供《TWL6030氣體監(jiān)測(cè)基礎(chǔ)知識(shí).pdf》資料免費(fèi)下載
發(fā)表于 10-29 10:02 ?0次下載
TWL6030氣體監(jiān)測(cè)<b class='flag-5'>基礎(chǔ)知識(shí)</b>

Linux應(yīng)用編程的基本概念

Linux應(yīng)用編程涉及到在Linux環(huán)境下開(kāi)發(fā)和運(yùn)行應(yīng)用程序的一系列概念。以下是一些涵蓋Linux應(yīng)用編程的基本概念。
的頭像 發(fā)表于 10-24 17:19 ?483次閱讀

Verilog HDL的基礎(chǔ)知識(shí)

本文繼續(xù)介紹Verilog HDL基礎(chǔ)知識(shí),重點(diǎn)介紹賦值語(yǔ)句、阻塞與非阻塞、循環(huán)語(yǔ)句、同步與異步、函數(shù)與任務(wù)語(yǔ)法知識(shí)
的頭像 發(fā)表于 10-24 15:00 ?924次閱讀
Verilog HDL的<b class='flag-5'>基礎(chǔ)知識(shí)</b>

負(fù)載開(kāi)關(guān)基礎(chǔ)知識(shí)

電子發(fā)燒友網(wǎng)站提供《負(fù)載開(kāi)關(guān)基礎(chǔ)知識(shí).pdf》資料免費(fèi)下載
發(fā)表于 10-08 09:56 ?2次下載
負(fù)載開(kāi)關(guān)<b class='flag-5'>基礎(chǔ)知識(shí)</b>

全新的半導(dǎo)體基礎(chǔ)知識(shí)

《全新的半導(dǎo)體基礎(chǔ)知識(shí)》首先對(duì)流行于電子書(shū)刊上數(shù)十年之久的經(jīng)典半導(dǎo)體基礎(chǔ)知識(shí)中存在的謬誤進(jìn)行了全方位的討論,然后以半導(dǎo)體內(nèi)部結(jié)構(gòu)為抓手,以G型半導(dǎo)體(客供電子型半導(dǎo)體)、H型半導(dǎo)體(主供電子型半導(dǎo)體
的頭像 發(fā)表于 09-20 11:30 ?1740次閱讀
全新的半導(dǎo)體<b class='flag-5'>基礎(chǔ)知識(shí)</b>

超聲波傳感基礎(chǔ)知識(shí)

電子發(fā)燒友網(wǎng)站提供《超聲波傳感基礎(chǔ)知識(shí).pdf》資料免費(fèi)下載
發(fā)表于 09-04 10:21 ?0次下載
超聲波傳感<b class='flag-5'>基礎(chǔ)知識(shí)</b>

Linux 驅(qū)動(dòng)開(kāi)發(fā)與應(yīng)用開(kāi)發(fā),你知道多少?

一、Linux驅(qū)動(dòng)開(kāi)發(fā)與應(yīng)用開(kāi)發(fā)的區(qū)別開(kāi)發(fā)層次不同:Linux驅(qū)動(dòng)開(kāi)發(fā)主要是針對(duì)硬件設(shè)備進(jìn)行編程,處于操作系統(tǒng)內(nèi)核層,直接與硬件交互,為上層
的頭像 發(fā)表于 08-30 12:16 ?1258次閱讀
<b class='flag-5'>Linux</b> <b class='flag-5'>驅(qū)動(dòng)</b>開(kāi)發(fā)與應(yīng)用開(kāi)發(fā),你知道多少?

C++語(yǔ)言基礎(chǔ)知識(shí)

電子發(fā)燒友網(wǎng)站提供《C++語(yǔ)言基礎(chǔ)知識(shí).pdf》資料免費(fèi)下載
發(fā)表于 07-19 10:58 ?8次下載

哪有FPGA的verilog編程基礎(chǔ)知識(shí)

沒(méi)接觸過(guò)FPGA開(kāi)發(fā),那個(gè)verilog編程有什么入門(mén)基礎(chǔ)知識(shí)學(xué)習(xí)的?
發(fā)表于 04-29 23:09
主站蜘蛛池模板: 韩国三级日本三级在线观看 | 99久久精品国产免费 | 天天干天天干天天干 | 国内精品免费视频精选在线观看 | 亚洲综合一 | 色综久久| 午夜骚片 | 亚洲第一福利网站 | 国产精品久久久久久久久久影院 | 91夜夜人人揉人人捏人人添 | 干干操| 色老头一区二区三区在线观看 | 日本国产视频 | 黄色hd | 亚洲成熟 | 热久久综合这里只有精品电影 | 高清在线观看视频 | 国产成人精品高清在线 | 午夜精品久久久久久毛片 | a级黑粗大硬长爽猛视频毛片 | 久久国产热视频 | 亚洲欧美卡通 动漫 丝袜 | 国产激烈床戏无遮挡在线观看 | 欧美一区二区三区免费 | 免费视频一级片 | 色狠狠色综合久久8狠狠色 色狠狠网 | 西西人体大胆高清啪啪欧洲 | 中日韩在线视频 | 一色屋精品免费视频 视频 一色屋免费视频 | 日本不卡免费高清一级视频 | 99成人国产精品视频 | 四虎网址在线观看 | 色综合久久天天综合观看 | 国内久久精品视频 | 国产理论在线观看 | 四虎在线最新永久免费播放 | 美女污污网站 | 欧美卡一卡二卡新区网站 | 久久免费公开视频 | 天天操天天擦 | 亚洲黄色一区二区 |

電子發(fā)燒友

中國(guó)電子工程師最喜歡的網(wǎng)站

  • 2931785位工程師會(huì)員交流學(xué)習(xí)
  • 獲取您個(gè)性化的科技前沿技術(shù)信息
  • 參加活動(dòng)獲取豐厚的禮品