當前位置:首頁 > 公眾號精選 > 嵌入式大雜燴
[導讀]本篇的重點是講解設備和驅(qū)動的啟動流程,設備和驅(qū)動的流程是整個內(nèi)核啟動的核心,也是工作中最常面對的問題。出于知識點的系統(tǒng)性考慮,在進入主題之前我們先看下整個 Linux 在 ARM 中的啟動流程如何。 Uboot 的啟動流程 ARM Linux 的啟動流程大致為:Uboot →

本篇的重點是講解設備和驅(qū)動的啟動流程,設備和驅(qū)動的流程是整個內(nèi)核啟動的核心,也是工作中最常面對的問題。出于知識點的系統(tǒng)性考慮,在進入主題之前我們先看下整個 Linux 在 ARM 中的啟動流程如何。

Uboot 的啟動流程

ARM Linux 的啟動流程大致為:Uboot → Kernel → Root filesystem。Uboot 在上電的時候就拿到 CPU 的控制權,實現(xiàn)了硬件的初始化。具體是怎么實現(xiàn)的呢?一起來看一下,CPU 的內(nèi)部集成了小容量的 Sram,而 PC 指針一上電就指向 Sram 的起始地址 0x00000000,所以一上電 Uboot 代碼就得到了運行。

Uboot 拿到 CPU 使用權就開始做初始化工作,比如關閉看門狗、設置 CPU 運行模式、設置堆棧、初始化內(nèi)存、網(wǎng)卡、nand flash 等,最后把 Linux 內(nèi)核加載到內(nèi)存中。

  • 初始化 RAM

因為內(nèi)核要在 RAM 中運行,所以在調(diào)用內(nèi)核之前必須初始化和設置 RAM,為調(diào)用內(nèi)核做好準備。

  • 初始化串口

內(nèi)核在啟動過程中可以將信息通過串口輸出,這樣就可以清楚的知道內(nèi)核啟動信息。雖然串口不是 Uboot 必須要完成的工作,但是通過串口可以方便調(diào)試 Uboot 和內(nèi)核的各種信息。

  • 檢測處理器類型

Uboot 在調(diào)用內(nèi)核前需要檢測系統(tǒng)的處理器類型,并將其保存在某個變量中提供給內(nèi)核,內(nèi)核在啟動過程中會根據(jù)該處理器的類型調(diào)用相應的初始化程序。

  • 設置內(nèi)核啟動參數(shù)

內(nèi)核在啟動過程中會根據(jù)該啟動參數(shù)進行相應的初始化工作。

  • 調(diào)用內(nèi)核鏡像

值得注意的是存儲 Uboot 的存儲器不同,Uboot 的執(zhí)行過程也并不相同,一般來講 Flash 分為 nor Flash 和 nand Flash 兩種:nor Flash 支持芯片內(nèi)執(zhí)行(XIP,eXecute In Place),這樣代碼可以在 Flash 上直接執(zhí)行而不必復制到 RAM 中去執(zhí)行。

但是 nand Flash 并不支持 XIP,所以要想執(zhí)行 nand Flash 上的代碼,必須先將其復制到 RAM 中去,然后跳到 RAM 中去執(zhí)行。如果內(nèi)核存放在 nor Flash 中,那么可直接跳轉(zhuǎn)到內(nèi)核中去執(zhí)行。但通常由于在 nor Flash 中執(zhí)行代碼會有種種限制,而且速度也遠不及 RAM 快,所以一般的嵌入式系統(tǒng)都是將內(nèi)核復制到 RAM 中,然后跳轉(zhuǎn)到 RAM 中去執(zhí)行。不論哪種情況,在跳到內(nèi)核執(zhí)行之前 CPU 的寄存器必須滿足以下條件:r0 = 0,r1 = 處理器類型,r2 = 標記列表在 RAM 中的地址。

Linux 內(nèi)核的啟動流程(設備和驅(qū)動的加載)

關于 Uboot 的啟動本課程不做詳細介紹,因為本課程的主要內(nèi)容是內(nèi)核。在講述內(nèi)核啟動之前讓我們先了解下內(nèi)核的組成結(jié)構:

其中,

(1)vmlinusx 是 ELF 格式的 Object 文件,這種文件只是各個源代碼經(jīng)過連接以后得到的文件,并不能在 ARM 平臺上運行。

(2)經(jīng)過 objcopy 這個工具轉(zhuǎn)換以后,得到了二進制格式文件 Image,Image 文件相比于 vmlinusx 文件,除了格式不同以外,還被去除了許多注釋和調(diào)試的信息。

(3)Image 文件經(jīng)過壓縮以后得到了 piggy.gz,這個文件僅僅是 Image 的壓縮版,并無其他不同。

(4)接著編譯生成另外幾個模塊文件 misc.o、big_endian.o、head.o、head-xscale.o,這幾個文件組成一個叫 Bootstrap Loader 的組件,又叫引導程序,編譯生成 piggy.o 文件。

(5)最后 piggy.o 文件和 Bootstrap Loader 組成一個 Bootable Kernel Image 文件(可啟動文件)。

經(jīng)過上面的分析不難知道 piggy.o 就是內(nèi)核鏡像,而剩下的幾個文件就組成了引導程序。知道了內(nèi)核的組成結(jié)構,Uboot 就是按照內(nèi)核的組成結(jié)構一層一層剝開然后引導內(nèi)核的:

可以說 start_kernel() 之前的所有工作都是為了將環(huán)境準備好,滿足 start_kernel() 的要求,然后由 start_kernel() 開始進行內(nèi)核的加載:

關于 start_kernl() 函數(shù)的內(nèi)容太多,可以通過紅色回調(diào)函數(shù)看出,start_kernel() 函數(shù)基本是在回調(diào)很多對應的注冊函數(shù)。為了本系列課程的結(jié)構性這里就不展開所有知識點講解,本篇內(nèi)容接著前一篇設備樹的內(nèi)容重點講解下設備和驅(qū)動的匹配過程。

還記得上一篇講到的設備樹三大作用嗎?

  • 平臺標識;

  • 運行時配置;

  • 設備信息集合。

接下來我們就看看內(nèi)核在啟動的時候是如何尋找設備,驅(qū)動又如何和設備綁定的。

首先在平臺目錄下可以看到有很多平臺描述的文件,如圖:

有那么多的平臺,我們到底要執(zhí)行哪個平臺是首先要考慮的事情。這也是設備三大功能的第一個功能——平臺標識。

  • 設備樹里有對設備根節(jié)點的 Compatible 描述,平臺文件里有對 __initconst 的描述,如果兩個字段一致則找到了對應的板級文件,這樣就通過設備樹把要用的設備平臺與其他平臺區(qū)分開來了,如圖:

找到平臺后就可以根據(jù)回調(diào)函數(shù)的指針調(diào)用該平臺的注冊函數(shù)。這里以飛思卡爾 imx.6dl 平臺為例,回調(diào)的時候會調(diào)用 imx6q_init_machine() 函數(shù),如下:

這里補充一個知識點,細心的讀者也許發(fā)現(xiàn)了在 Compatible 字段里用逗號分隔了兩個字符串。板級匹配的時候用的是哪個字符串,另外一個字符串又是做什么用?首先后面的字段 "fsl,imx6dl" 是抽象共用平臺描述符,前面的字段 "fsl,imx6dl-sabresd" 是通用平臺下的具體平臺描述符,可以理解為母板和子板的區(qū)別。在具體的子板文件中我們可以通過前面的字段進行設備信息的獲取,如圖:

  • 接著是運行時配置,讓內(nèi)核在啟動的時候根據(jù)參數(shù)設置進行不同的處理。有經(jīng)驗的讀者清楚在 Uboot 里也有對 Bootargs 的配置,這里為什么多此一舉呢,是為了在 Uboot 中更靈活的對內(nèi)核啟動進行配置。

  • 最后的作用就是設備信息集合,這是設備和驅(qū)動匹配的核心,也是工作中面對最多的情況。出于這一作用的內(nèi)容是工作中經(jīng)常遇到的重點也是難點,我們專門用一篇內(nèi)容來詳細講解各級設備是如何展開的,并且手把手教你如何定制一套自己的開發(fā)板全新案例。

猜你喜歡:

【Linux筆記】設備樹實例分析

【Linux筆記】Pinctrl子系統(tǒng)與GPIO子系統(tǒng)

【Linux筆記】通俗易懂的Linux驅(qū)動基礎

【Linux筆記】pc機_開發(fā)板_ubuntu互ping實驗
【Linux筆記】掛載網(wǎng)絡文件系統(tǒng)

學習STM32的一些經(jīng)驗分享

嵌入式Linux 學習經(jīng)驗及推薦資料

基于LiteOS的智慧農(nóng)業(yè)案例實驗分享

從單片機工程師的角度看嵌入式Linux

筆記:編寫簡單的內(nèi)核模塊


后臺回復:加群。添加ZhengN微信,加入交流群



點個贊,證明你還愛我

免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉