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

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

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

3天內不再提示

Linux驅動編程基礎知識講解

汽車玩家 ? 來源:今日頭條 ? 作者:嵌入式在左C語言在 ? 2020-03-01 08:27 ? 次閱讀

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

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

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

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

3、Linux內核的引導過程。

1、Linux內核的組成

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

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

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

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

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

documentation:內核各部分的注釋;

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

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

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

init:內核初始化代碼;

ipc:進程間通信的代碼;

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

lib:庫文件代碼;

mm:內存管理代碼:

net:網絡相關代碼,實現常見的網絡協議;

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

security:主要是一個SELinux模塊;

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

usr:實現用于打包和壓縮等。

Linux驅動編程基礎知識講解

Linux的目錄結構

1.2、進程調度

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

1.3、內存管理

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

1.4、虛擬文件系統

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

1.5、網絡接口

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

1.6、進程間通信

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

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

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

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

Linux驅動編程基礎知識講解

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

3、Linux內核的引導過程

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

Linux驅動編程基礎知識講解

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

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

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

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

    關注

    68

    文章

    11049

    瀏覽量

    216156
  • 接口
    +關注

    關注

    33

    文章

    8961

    瀏覽量

    153294
  • Linux
    +關注

    關注

    87

    文章

    11469

    瀏覽量

    212921
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    效果器的基礎知識

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

    【北京迅為】iTOP-RK3568OpenHarmony系統南向驅動開發GPIO基礎知識

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

    功率器件熱設計基礎知識

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

    PCB繪制基礎知識

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

    EMC基礎知識-華為

    EMC基礎知識-華為
    發表于 01-06 14:09 ?2次下載

    玩轉FPGA必備的基礎知識

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

    品質管理基礎知識

    品質管理基礎知識
    的頭像 發表于 11-01 11:08 ?621次閱讀
    品質管理<b class='flag-5'>基礎知識</b>

    TWL6030氣體監測基礎知識

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

    Linux應用編程的基本概念

    Linux應用編程涉及到在Linux環境下開發和運行應用程序的一系列概念。以下是一些涵蓋Linux應用編程的基本概念。
    的頭像 發表于 10-24 17:19 ?589次閱讀

    Verilog HDL的基礎知識

    本文繼續介紹Verilog HDL基礎知識,重點介紹賦值語句、阻塞與非阻塞、循環語句、同步與異步、函數與任務語法知識
    的頭像 發表于 10-24 15:00 ?1093次閱讀
    Verilog HDL的<b class='flag-5'>基礎知識</b>

    負載開關基礎知識

    電子發燒友網站提供《負載開關基礎知識.pdf》資料免費下載
    發表于 10-08 09:56 ?2次下載
    負載開關<b class='flag-5'>基礎知識</b>

    全新的半導體基礎知識

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

    超聲波傳感基礎知識

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

    Linux 驅動開發與應用開發,你知道多少?

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

    C++語言基礎知識

    電子發燒友網站提供《C++語言基礎知識.pdf》資料免費下載
    發表于 07-19 10:58 ?8次下載
    主站蜘蛛池模板: 高清国产一区二区三区 | 亚洲国产成人久久精品影视 | 国产亚洲欧美一区二区 | 午夜欧美福利视频 | 国产一级αv片免费观看 | 人人干免费 | 分分精品 | 欧美色淫网站免费观看 | 永井玛丽亚中文在线观看视频 | 49pao强力免费打造在线高清 | 最近高清免费观看视频大全 | 韩国理论三级在线观看视频 | 免费人成在线观看网站品爱网 | 男男np主受高h啪啪肉 | 欧美在线免费 | 手机看片久久青草福利盒子 | 你懂的免费在线 | 国产情侣自拍小视频 | 欧美一级黄色影片 | 特毛片| 天天拍天天干天天操 | 日韩黄页| 亚洲国产综合人成综合网站00 | 久久精品人 | 国产性夜夜性夜夜爽91 | 超黄视频在线观看 | 天天在线精品视频在线观看 | 59日本人xxxxxxxxx69 | www在线小视频免费 www资源 | 五月天丁香激情 | 天堂电影免费在线观看 | 亚欧色视频在线观看免费 | 91网站免费在线观看 | 午夜cao | 激情五月深爱五月 | 日本特黄特色免费大片 | 老师你好大好白好紧好硬 | 欧美黄色片在线观看 | 亚州怡红院| aaa视频| a级精品九九九大片免费看 a级毛毛片看久久 |