日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

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

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

Uboot 的啟動(dòng)流程

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

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

  • 初始化 RAM

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

  • 初始化串口

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

  • 檢測(cè)處理器類型

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

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

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

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

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

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

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

關(guān)于 Uboot 的啟動(dòng)本課程不做詳細(xì)介紹,因?yàn)楸菊n程的主要內(nèi)容是內(nèi)核。在講述內(nèi)核啟動(dòng)之前讓我們先了解下內(nèi)核的組成結(jié)構(gòu):

其中,

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

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

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

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

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

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

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

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

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

  • 平臺(tái)標(biāo)識(shí);

  • 運(yùn)行時(shí)配置;

  • 設(shè)備信息集合。

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

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

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

  • 設(shè)備樹里有對(duì)設(shè)備根節(jié)點(diǎn)的 Compatible 描述,平臺(tái)文件里有對(duì) __initconst 的描述,如果兩個(gè)字段一致則找到了對(duì)應(yīng)的板級(jí)文件,這樣就通過設(shè)備樹把要用的設(shè)備平臺(tái)與其他平臺(tái)區(qū)分開來了,如圖:

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

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

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

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

猜你喜歡:

【Linux筆記】設(shè)備樹實(shí)例分析

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

【Linux筆記】通俗易懂的Linux驅(qū)動(dòng)基礎(chǔ)

【Linux筆記】pc機(jī)_開發(fā)板_ubuntu互ping實(shí)驗(yàn)
【Linux筆記】掛載網(wǎng)絡(luò)文件系統(tǒng)

學(xué)習(xí)STM32的一些經(jīng)驗(yàn)分享

嵌入式Linux 學(xué)習(xí)經(jīng)驗(yàn)及推薦資料

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

從單片機(jī)工程師的角度看嵌入式Linux

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


后臺(tái)回復(fù):加群。添加ZhengN微信,加入交流群



點(diǎn)個(gè)贊,證明你還愛我

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

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

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉