亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux驅動編程基礎知識講解

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

掃碼添加小助手

加入工程師交流群

由于Linux驅動編程的本質屬于Linux內核編程,因此我們非常有必要熟悉Linux內核以及Linux內核的特點。 這篇文章將會幫助讀者打下Linux驅動編程的基礎知識。

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

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

2、Linux的用戶空間和內核空間;

3、Linux內核的引導過程。

1、Linux內核的組成

1.1、Linux內核源代碼的目錄結構

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

arch:包含和硬件體系結構相關的代碼,每種平臺占一個相應的目錄,如:ARM、PowerPC、MIPS等,在arch目錄下,存放了各個不同的平臺芯片對Linux內核進程調度、內存管理和中斷等的支持;

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

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

documentation:內核各部分的注釋;

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

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

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

init:內核初始化代碼;

ipc:進程間通信的代碼;

kernel:內核最核心的部分,包括進程調度和定時器等;

lib:庫文件代碼;

mm:內存管理代碼:

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

scripts:用于配置內核的文件;

security:主要是一個SELinux模塊;

sound:音頻設備的驅動核心代碼;

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

Linux驅動編程基礎知識講解

Linux的目錄結構

1.2、進程調度

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

1.3、內存管理

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

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

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

1.5、網(wǎng)絡接口

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

1.6、進程間通信

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

2、Linux內核的用戶空間和內核空間

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

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

Linux驅動編程基礎知識講解

用戶和內核使用的地址空間

3、Linux內核的引導過程

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

Linux驅動編程基礎知識講解

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

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

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

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

    關注

    68

    文章

    11201

    瀏覽量

    222180
  • 接口
    +關注

    關注

    33

    文章

    9364

    瀏覽量

    155855
  • Linux
    +關注

    關注

    88

    文章

    11592

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

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

    順序為從基礎到進階,從進階到實戰(zhàn),也就是說前面的部分偏理論知識學習,后端知識偏向于項目應用 Yocto可能能解決目前linux源碼中的無用代碼過多的問題(我一直覺得linux,zepy
    發(fā)表于 06-30 21:49

    效果器的基礎知識

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

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

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

    開關電源的基礎知識題目及答案(免積分)

    本文含有開關電源的基礎知識題目及答案,下載附件即可查看!
    發(fā)表于 03-06 15:52

    【北京迅為】iTOP-RK3568OpenHarmony系統(tǒng)南向驅動開發(fā)GPIO基礎知識

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

    功率器件熱設計基礎知識

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

    PCB繪制基礎知識

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

    EMC基礎知識-華為

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

    萬字長文,看懂激光基礎知識!

    深入介紹激光基礎知識,幫助您輕松理解激光領域的關鍵概念和原理。
    的頭像 發(fā)表于 12-20 09:49 ?1695次閱讀
    萬字長文,看懂激光<b class='flag-5'>基礎知識</b>!

    華為-射頻基礎知識培訓

    課程目標z 熟悉和掌握射頻基本概念和知識z 了解無線射頻系統(tǒng)結構z 了解天饋系統(tǒng)的概念和知課程內容第一章 無線通信的基本概念第二章 射頻常用計算單位簡介第三章 射頻常用概念辨析第四章 射頻系統(tǒng)介紹第五章 天線傳播基礎知識簡介
    發(fā)表于 12-10 13:39 ?1次下載

    硬件工程師需要掌握的硬件基礎知識

    作為一個資深硬件工程師,我們需要掌握一些硬件基礎知識,今天總結一下哪些算是基礎知識。給學電子方面想從事硬件工作的同學們一點提示。給未走出大學校園的電子方面的學生一些幫助。 ? 工具/原料 萬用表
    的頭像 發(fā)表于 12-02 09:22 ?2662次閱讀
    硬件工程師需要掌握的硬件<b class='flag-5'>基礎知識</b>

    玩轉FPGA必備的基礎知識

    FPGA已成為現(xiàn)今的技術熱點之一,無論學生還是工程師都希望跨進FPGA的大門。那么我們要玩轉FPGA必須具備哪些基礎知識呢?下面我們慢慢道來。 (一) 要了解什么是FPGA 既 然要玩轉FPGA
    的頭像 發(fā)表于 11-28 10:24 ?1107次閱讀

    FPGA基礎知識及設計和執(zhí)行FPGA應用所需的工具

    本文將首先介紹FPGA的基礎知識,包括FPGA的工作原理以及為什么要使用FPGA等,然后討論設計和執(zhí)行FPGA應用所需的工具。
    的頭像 發(fā)表于 11-11 11:29 ?2298次閱讀
    FPGA<b class='flag-5'>基礎知識</b>及設計和執(zhí)行FPGA應用所需的工具