色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

Linux內核代碼60%都是驅動?

嵌入式悅翔園 ? 來源:嵌入式悅翔園 ? 2023-07-11 11:48 ? 次閱讀

一、前言

為什么Linux內核代碼60%都是驅動? 如果每支持新的設備就加入驅動,內核會不會變得越來越臃腫?

要先搞明白這個問題,我們首先要明確(區分)兩個概念:內核代碼和內核,這是兩個完全不一樣的概念,我們通過 git clone 命令從網上拉取下來的代碼叫做內核代碼,如果增加新的設備內核代碼確實會變得越來越臃腫,這點是肯定的,但是內核并不會變得臃腫,具體原因我們接下里會進行討論。說了那么多內核代碼,那內核是什么呢?為什么內核代碼變多了內核卻不會變大?

內核 是我們通過交叉編譯之后真正燒錄到板子里跑起來的代碼,而交叉編譯的時候,是有選擇的進行編譯,這里面有頂尖的大神們的智慧結晶,與你硬件相關的才編譯,不相關的代碼則不會被編譯到內核里,所以不是說內核里提交了一個設備的驅動你的內核就會變大,這要看你的硬件有沒有用到這個驅動。

二、Linux中避免內核臃腫的措施

我們上面知道了內核是經過我們交叉編譯裁剪之后的代碼,會有選擇性的將對我們有用的代碼編譯進內核中,不需要的將被舍棄,這是Linux內核開發者智慧的結晶,也是保證內核不會變得臃腫的原因。那除了交叉編譯之外還有沒有其他的措施來保證內核不會變的越來越大呢?下面就給大家分享幾個用來保證內核不臃腫的措施。

2.1 交叉編譯及SDK包的裁剪

(這部分稍微有些啰嗦,主要為了讓初學者更好的理解,老工程師可以直接跳過啦!)交叉編譯是指在一種平臺上編譯生成在另一種不同平臺上運行的可執行程序。在Linux中,常見的情況是在PC主機(Ubuntu系統)上編譯生成適用于嵌入式設備或其他架構的目標程序。

437e73d2-1f9d-11ee-962d-dac502259ad0.png

通過上面的介紹我們已經知道了內核代碼是會通過交叉編譯來進行選擇性的將對我們有用的代碼編譯進內核的,但是交叉編譯到底是如何工作的呢?我們應該怎么去配置交叉編譯以讓我們的內核能過夠在穩定運行的基礎上盡量小巧呢?

做過嵌入式Linux的應該都清楚,我這里的介紹也主要針對嵌入式Linux來講解,一般嵌入式Linux的交叉編譯工具鏈都是由SDK包提供商(一般是芯片廠)提供,所以一般不需要我們進行編寫和設計,只需要針對自己開發板的實際情況進行裁剪即可。

其實Linux代碼到你燒錄到板子中的內核代碼是經過了下面的過程:

43a6c684-1f9d-11ee-962d-dac502259ad0.png

上面的圖是我對于一套代碼從Linux開源代碼一步一步的被裁剪和適配后最終到達用戶手中過程的理解,當然不同的廠商這個過程可能有所不同。

所以回到我們的問題,看完上面圖片中的過程,你覺得Linux內核中提交了新設備的驅動代碼會被燒錄到最終燒錄到板子中嗎?

這里分幾種情況來討論:

如果這個新設備在該款芯片上完全不會用到,那么芯片廠提供的SDK包中就不會包含這個驅動;

如果這個新設備芯片是支持的,但是我這款開發板不支持,那么板廠就不會同步這個設備的驅動;

如果這個新設備在開發板上也是支持的,但是作為用戶完全不會用到該設備,那么該設備的驅動也會被裁剪;

所以不是說Linux內核代碼中新提交一個設備驅動,該設備驅動就會最終到開發板中,中間是會經過很多篩選的,只有真正對用戶有用的代碼才會被同步編譯和燒錄。

這里用戶可能會有疑問,講了半天代碼包的裁剪,代碼裁剪和交叉編譯有什么關系呢?這里還要明確一點,代碼的裁剪并不是你想象的直接把代碼從代碼包中刪除了,更多時候是把代碼從編譯中刪除掉,即該設備的驅動并不會被編譯到內核中,但是源代碼你還是可以看到的。

2.2 設備樹

設備樹的由來想必大家應該都有所耳聞:

ARM社區一貫充斥的大量垃圾代碼導致Linus盛怒,因此社區在2011年到2012年進行了大量的工作。ARM Linux開始圍繞Device Tree展開,Device Tree有自己的獨立的語法,它的源文件為.dts,編譯后得到.dtb,Bootloader在引導Linux內核的時候會將.dtb地址告知內核。之后內核會展開Device Tree并創建和注冊相關的設備,因此arch/arm/mach-xxx和arch/arm/plat-xxx中大量的用于注冊platform、I2C、SPI板級信息的代碼被刪除,而驅動也以新的方式和.dts中定義的設備結點進行匹配。

在設備樹出現之前,內核代碼中包含了大量與硬件設備相關的配置信息和初始化操作。隨著硬件數量和多樣性的增加,內核代碼變得越來越復雜,難以管理和維護。設備樹將硬件描述從內核代碼中分離出來,使得內核代碼更加清晰簡潔,并且與具體硬件解耦。

使用設備樹可以在運行時動態地配置硬件設備,而無需修改內核源代碼。這點對于代碼的調試非常方便,我們自需要重新編譯設備樹文件放到開發板中即可,而不用重新燒錄整個內核。設備樹中的硬件描述信息可以根據實際硬件配置進行自由組合和調整,從而達到更好的兼容性和靈活性。

2.3 模塊化

Linux內核采用的是模塊化設計,通過將功能劃分為獨立的模塊,可以提高代碼的可復用性和靈活性。內核模塊是一段可以被動態加載到內核中并擴展其功能的代碼。它相對獨立于內核的其他部分,在需要時可以加載或卸載。

除了動態的加載將通用的功能封裝成獨立的模塊,可以被多個子系統或驅動程序共享和復用,避免了重復編寫相同的代碼,提高了開發效率。如果看過I2C驅動的話大家應該清楚I2C驅動分為設備驅動和核心驅動,Linux內核已經將I2C驅動的公用代碼封裝到核心代碼中了,其實I2C設備驅動代碼只需要簡單的調用I2C核心驅動中的接口即可,而不用從0開始完成一個I2C的驅動代碼,這樣代碼的復用率會變高,內核驅動的代碼量和代碼復雜度也會變小。

2.4 硬件抽象層

硬件抽象層(Hardware Abstraction Layer,HAL)是一種軟件層,用于將底層硬件設備的詳細實現細節與上層應用程序隔離開來,提供一組統一的接口和功能,以簡化對硬件的訪問和操作。

43c67f42-1f9d-11ee-962d-dac502259ad0.png

硬件抽象層起到了在不同硬件平臺之間建立標準化接口的作用,使得應用程序可以以相似的方式進行硬件訪問和控制,而無需關心具體硬件的細節。通過使用硬件抽象層,開發人員可以更加方便地編寫跨平臺或可移植的應用程序,而不需要針對每個具體硬件設備進行獨立的編程

總的來說硬件抽象層提供了一種中間層的軟件抽象,將底層硬件設備的具體實現細節與上層應用程序解耦,為開發人員提供簡化的硬件訪問接口和功能,以提高應用程序的可移植性和跨平臺性。

三、嵌入式Linux的裁剪

其實本文默認說的Linux內核都是說的嵌入式Linux,因為對于像Ubuntu這種系統我也不太清楚。對于嵌入式Linux的裁剪我們上面已經介紹了整個代碼包的流程,想必大家已經明白了我們燒錄進去的內核是已經通過交叉編譯精簡過的,所以理論上來說燒錄進去的已經是最精簡的了。

其實內核裁剪不是我們想象的那么簡單,只有道行深的工程師才敢進行內核的裁剪。Linux內核裁剪我也沒有做過,所以這部分我留給大佬來補充吧!

四、總結

所以回歸最開始的問題,Linux內核代碼60%都是驅動?驅動代碼不會造成內核臃腫嗎?我認為答案是不會,如果你認為會變得越來越臃,可以一起交流一下哦!





審核編輯:劉清

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

    關注

    4

    文章

    599

    瀏覽量

    27763
  • LINUX內核
    +關注

    關注

    1

    文章

    316

    瀏覽量

    21868

原文標題:Linux內核代碼60%都是驅動?驅動代碼不會造成內核臃腫嗎?

文章出處:【微信號:嵌入式悅翔園,微信公眾號:嵌入式悅翔園】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux內核代碼

    Linux內核代碼本章講述在L i n u x內核源碼中,應該從何處開始查找特定的內核函數。本書并不要求讀者具有C語言編程能力,也不要求讀
    發表于 02-09 15:24 ?36次下載

    Linux內核代碼漫游

    Linux內核代碼漫游 本章試圖以順序的方式來解釋Linux代碼,以幫助讀者對源代碼的體系
    發表于 02-09 15:27 ?26次下載

    Linux 內核代碼

    Linux 內核代碼 實模式setup階段setup用于體系結構相關的硬件初始化工作,在arch目錄中的各個系統結構的平臺相關都有類似功能的代碼。在32位的x86平臺中,s
    發表于 02-10 13:45 ?28次下載

    嵌入式LINUX內核網絡棧(源代碼)

    本文選擇 LINUX-1.2.13 內核所包含的網絡部分代碼分析(注意網絡部分代碼內核代碼的演
    發表于 05-12 10:39 ?57次下載
    嵌入式<b class='flag-5'>LINUX</b><b class='flag-5'>內核</b>網絡棧(源<b class='flag-5'>代碼</b>)

    基于Linux內核輸入子系統的驅動研究

    Linux因其完全開放的特性和穩定優良的性能深受歡迎,當推出了內核輸入子系統后,更方便了嵌入式領域的驅動開放。介紹了Linux的設備驅動基礎
    發表于 09-12 16:38 ?23次下載

    Linux內核代碼感悟

    直接訪問校內外的 lxr 網站)的。如果在 windows 下也可以用 source insight。以下的當前路徑為內核代碼路徑,通常為/usr/src/linux內核版本為 2
    發表于 09-11 17:01 ?18次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b><b class='flag-5'>代碼</b>感悟

    怎樣去讀Linux內核代碼

    怎樣去讀Linux內核代碼
    發表于 10-25 10:15 ?13次下載
    怎樣去讀<b class='flag-5'>Linux</b><b class='flag-5'>內核</b>源<b class='flag-5'>代碼</b>

    Linux內核輸入子系統的驅動研究

    Linux內核輸入子系統的驅動研究
    發表于 10-31 14:41 ?14次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b>輸入子系統的<b class='flag-5'>驅動</b>研究

    Linux內核與Android的關系

    Android雖然建立在Linux內核之上,但是他對內核進行了一些擴展,增加了一些驅動。比如Binder,loger等等驅動。可以拿Andr
    發表于 09-09 09:10 ?4653次閱讀

    LINUX內核代碼情景分析下冊PDF電子書免費下載

    。《LINUX內核代碼情景分析》(下)則分基于Socket的進程間通訊、設備驅動、多處理器 SMP系統結構以及系統引導和初始化四章。
    發表于 10-12 16:09 ?107次下載

    如何使用Linux內核實現USB驅動程序框架

    Linux內核提供了完整的USB驅動程序框架。USB總線采用樹形結構,在一條總線上只能有唯一的主機設備。 Linux內核從主機和設備兩個角度
    發表于 11-06 17:59 ?20次下載
    如何使用<b class='flag-5'>Linux</b><b class='flag-5'>內核</b>實現USB<b class='flag-5'>驅動</b>程序框架

    關于Linux內核代碼風格

    從編碼風格錯誤開始 曾經在開發Linux內核驅動的時候,創建了一個補丁文件,但是在把補丁打到主分支的時候提示很多編碼風格的錯誤問題,后來重做了補丁才解決了問題,這也是沒有嚴格按照的Linux
    的頭像 發表于 04-25 14:50 ?1908次閱讀

    linux內核代碼詳解

     在安裝好的Linux系統中,內核的源代碼位于/ust/src/linux.如果是從GNU網站下載的Linux
    發表于 09-06 17:01 ?4次下載

    Linux內核如何使用結構體和函數指針?

    我將結合具體的Linux內核驅動框架代碼來展示Linux內核如何使用結構體和函數指針。
    的頭像 發表于 09-06 14:17 ?1145次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b>如何使用結構體和函數指針?

    linux驅動程序如何加載進內核

    ,需要了解Linux內核的基本概念和API。以下是一些關鍵概念: 1.1 內核模塊:Linux內核模塊是一種動態加載和卸載的
    的頭像 發表于 08-30 15:02 ?716次閱讀
    主站蜘蛛池模板: 精选国产AV精选一区二区三区 | 文中字幕一区二区三区视频播放 | 世界上第一个得抑郁症的人是谁 | 色人格影院第四色 | 亚洲日韩中文字幕区 | 三级网址在线 | 某上海少妇3P黑人完整版BD | WWW国产亚洲精品久久 | 香蕉尹人综合精品 | 绑着男军人的扒开内裤 | 亚洲欧美一区二区三区九九九 | 亚洲色图影院 | 亚洲人成www在线播放 | 野花韩国中文版免费观看 | 国产精品综合AV一区二区国产馆 | 秋霞电影院兔费理论84MB | 同时被两个男人轮流舔 | 香蕉99久久久久成人麻豆 | 成年人视频在线免费观看 | 午夜福利合集1000在线 | 国产免费变态视频网址网站 | 中国国产不卡视频在线观看 | 伊人大香线蕉影院在线播放 | yellow片在线观看免费观看动漫 | 成人影片迅雷下载 | 神马影院午夜伦理限级 | 日韩欧美 亚洲视频 | 亚洲无吗视频 | 亚洲色欲啪啪久久WWW综合网 | 97干97吻| 国产亚洲精品香蕉视频播放 | 亚洲 欧美 日韩 精品 自拍 | 一区二区不卡在线视频 | 色戒无删减流畅完整版 | 麻豆国产精品va在线观看约 | 99精品国产在热久久 | 国产乱人偷精品视频A人人澡 | 轻轻cao | 久久99re66热这里只有精品 | 99热久这里都是精品小草 | 精品亚洲午夜久久久久 |