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

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

完善資料讓更多小伙伴認識你,還能領(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)核的特點。 這篇文章將會幫助讀者打下Linux驅(qū)動編程的基礎(chǔ)知識。

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

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

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

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

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

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

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

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

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

crypto:常用加密算法、一些壓縮算法和CRC校驗算法;

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

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

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

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

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

ipc:進程間通信的代碼;

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

lib:庫文件代碼;

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

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

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

security:主要是一個SELinux模塊;

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

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

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

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

1.2、進程調(diào)度

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

1.3、內(nèi)存管理

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

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

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

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

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

1.6、進程間通信

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

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

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

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

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

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

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

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

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īng)對Linux的內(nèi)核有了一個初步的了解,當然這只是初步的而已,更多更難的還在后面等著你呢!我們一步一步來,循序漸進的學習才能達到最好的效果。下一篇文章將介紹在Linux中 C語言編程的特點。

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

    關(guān)注

    68

    文章

    10863

    瀏覽量

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

    關(guān)注

    33

    文章

    8598

    瀏覽量

    151157
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209499
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

    Verilog HDL的基礎(chǔ)知識

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

    負載開關(guān)基礎(chǔ)知識

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

    全新的半導體基礎(chǔ)知識

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

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

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

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

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

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

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

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

    沒接觸過FPGA開發(fā),那個verilog編程有什么入門基礎(chǔ)知識學習的?
    發(fā)表于 04-29 23:09

    電子元件基礎(chǔ)知識介紹

    電子發(fā)燒友網(wǎng)站提供《電子元件基礎(chǔ)知識介紹.pptx》資料免費下載
    發(fā)表于 03-15 16:48 ?84次下載

    光纖通信技術(shù)基礎(chǔ)知識

    電子發(fā)燒友網(wǎng)站提供《光纖通信技術(shù)基礎(chǔ)知識.ppt》資料免費下載
    發(fā)表于 03-06 15:53 ?0次下載

    FPGA基礎(chǔ)知識介紹

    電子發(fā)燒友網(wǎng)站提供《FPGA基礎(chǔ)知識介紹.pdf》資料免費下載
    發(fā)表于 02-23 09:45 ?30次下載

    鴻蒙開發(fā)【設(shè)備開發(fā)基礎(chǔ)知識

    鴻蒙開發(fā)基礎(chǔ)知識講解
    的頭像 發(fā)表于 01-29 18:44 ?1022次閱讀
    鴻蒙開發(fā)【設(shè)備開發(fā)<b class='flag-5'>基礎(chǔ)知識</b>】

    射頻與微波基礎(chǔ)知識

    射頻與微波基礎(chǔ)知識
    的頭像 發(fā)表于 01-16 10:05 ?845次閱讀
    射頻與微波<b class='flag-5'>基礎(chǔ)知識</b>
    主站蜘蛛池模板: 男校霸把男校草玩出水男男| 国产精品欧美精品国产主播| 一级毛片在线看在线播放| 色福利在线| 国产成人高清| 华人被黑人粗大猛然进| 男女交性永久免费视频播放| 青娱乐99| 天天夜夜操| 性做久久久久久网站| 日韩欧美一区二区三区不卡视频| 1717国产精品久久| 91亚洲国产成人久久精品网站| 深夜大尺度视频在线观看| a毛片基地免费全部香蕉| 欧美黑人粗暴另类多交| 色婷婷综合在线| 夜夜爽天天干| 香蕉久久高清国产精品免费| 欧美网站免费| 免费性bbbb台湾| 一级特级aaa毛片| 磁力bt种子搜索在线| 欧美系列在线| 色丁香久久| 天天操综合网| 2021色噜噜狠狠综曰曰曰| 韩国三级视频在线| 在线黄| 日韩一卡 二卡 三卡 四卡 免费视频| 在线观看免费xx高清视频| 午夜视频网址| 经典三级一区二区三区视频| 干中文字幕| 三级色网站| 人人草人人干| 亚洲地址一地址二地址三| 一本大道加勒比久久| 免费在线观看一区二区| 国模私拍在线| 91大神在线观看精品一区|