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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

對(duì)于系統(tǒng)啟動(dòng),bootloader的功能的簡(jiǎn)單分析

Q4MP_gh_c472c21 ? 來(lái)源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2018-02-05 10:23 ? 次閱讀

這幾天一直在糾結(jié)于系統(tǒng)啟動(dòng),bootloader的功能等等,沒(méi)有系統(tǒng)學(xué)過(guò)所以總是想不明白,也沒(méi)有系統(tǒng)的文章,總是對(duì)一些細(xì)節(jié)困惑。最近又被分配了應(yīng)用程序的任務(wù),擔(dān)心以后再也沒(méi)機(jī)會(huì)看驅(qū)動(dòng)這邊的東西了...

今天看了一下mmu相關(guān)的,都是嵌入式系統(tǒng)的,pc可能有很大不同

mmu,硬件設(shè)備(似乎也有軟件實(shí)現(xiàn)?),實(shí)現(xiàn)虛擬地址到物理地址映射,cpu的指令都是在虛擬地址上執(zhí)行的(這么說(shuō)似乎也不準(zhǔn)確),或許該說(shuō)是在沒(méi)有mmu的時(shí)候,cpu的地址是虛擬地址同時(shí)也是物理地址(因?yàn)闆](méi)有去映射,直接輸出到地址線上了),mmu可以當(dāng)坐中間的翻譯,系統(tǒng)上電后,cpu自然要從某一處讀指令,那么我們要做的就是把初始化系統(tǒng)的代碼(請(qǐng)?jiān)试S我叫他bootloader)放在那,

這時(shí)候其他外設(shè)都(或許有的可以?)驅(qū)動(dòng)不了(cpu不會(huì)),cpu的一些工作狀態(tài)也不一定是我們想要的(寄存器的值),那么放在這的代碼就要設(shè)置一下cpu的參數(shù)(比如關(guān)中斷),也可以檢測(cè)一下硬件什么的,比如往某個(gè)地址寫個(gè)什么,但是終極目標(biāo)是加載OS,驅(qū)動(dòng)周邊設(shè)備供應(yīng)用工作

對(duì)于系統(tǒng)啟動(dòng),bootloader的功能的簡(jiǎn)單分析

關(guān)于這個(gè)放指令的地方,一般(從來(lái)都是)放在rom里,flash、eeprom什么的,這里速度比較慢,運(yùn)行個(gè)bootloader可以(匯編),程序還是要放到ram上(c語(yǔ)言還要堆棧的,不像匯編不要?jiǎng)討B(tài)內(nèi)存,堆棧的sp也要往哪分),比如sdram什么的,嵌入式的話就是知道從rom里拷到ram里了,這里你要知道放到哪,那么你就又要知道這個(gè)系統(tǒng)硬件怎么連的,ram規(guī)格什么樣的才能知道物理地址,要不然cpu不知道給你放到哪,放完了跳過(guò)去啟動(dòng)就行了,跳過(guò)去的方法還是設(shè)置一下寄存器什么的

這里有個(gè)問(wèn)題就是不同設(shè)備物理地址連的不一樣(一般來(lái)說(shuō)很多時(shí)候都是不連續(xù)的甚至),那么操作系統(tǒng)控制起來(lái)就有點(diǎn)麻煩了,每個(gè)設(shè)備都要重新設(shè)置寄存器地址啊,系統(tǒng)和程序分配的地址啊什么的,而且很可能某個(gè)應(yīng)用申請(qǐng)不到連續(xù)的地址,用指針加加減減的很麻煩

于是誕生了mmu,在bootloader里配置好(似乎一般來(lái)說(shuō)?),他把所有的物理地址按你的要求映射的虛擬地址,不連續(xù)的連續(xù)了,不統(tǒng)一的統(tǒng)一了(需要根據(jù)不同的設(shè)備編寫不同的bootloader,但是這似乎比編寫寫操作系統(tǒng)輕松),需要說(shuō)明的是mmu配置了一個(gè)寄存器存放的地址映射的表格的物理地址基址,開啟mmu以后的cpu指令都會(huì)根據(jù)那個(gè)表格翻譯了。

操作系統(tǒng)回對(duì)虛擬地址設(shè)置訪問(wèn)權(quán)限,有的只能操作系統(tǒng)涂改,有的分給用戶,用戶的程序不能隨便改操作系統(tǒng)的的虛擬內(nèi)存范圍(這其中就有cpu寄存器之類的),但是cpu也提供了修改它們的接口,這其實(shí)是防止意外發(fā)生啦,比如你的指針亂指。

再來(lái)想想現(xiàn)在的dta的啟動(dòng),看看能想通多少。

1、內(nèi)置rom的啟動(dòng)程序(或許也叫bootloader)啟動(dòng)flash里的bootloader,起始地址0xbfe00000(物理地址哦,ps:還可以設(shè)置是否效驗(yàn)什么的。。);

2、flash的bootloader讀取某處的配置信息,獲得應(yīng)用程序的在flash中的物理地址,然后把應(yīng)用程序拷到ram里,然后跳過(guò)去跑應(yīng)用,入口應(yīng)該是個(gè)操作系統(tǒng)入口吧

接下來(lái)就是我根據(jù)各種網(wǎng)上資料對(duì)我現(xiàn)在看得這個(gè)bootloader的yy

該bootloader的確分兩步,但是不知道這兩部分別干什么暫時(shí)假設(shè):

第一步設(shè)置一下cpu、內(nèi)存控制器什么的寄存器,算是最初始的初始化,gpio引腳點(diǎn)亮一個(gè)led說(shuō)明一下,然后把stage2的文件找個(gè)ram的地方展開,運(yùn)行stage2

第二部也就是stage2,初始化串口(關(guān)于串口我實(shí)在有幾千字的吐槽不提)供調(diào)試以及輸出信息什么的(似乎嵌入式全部提供串口,而且都會(huì)從串口接收發(fā)送數(shù)據(jù)之類的,難道是因?yàn)榇隍?qū)動(dòng)起來(lái)很簡(jiǎn)單?),再玩一下led,這時(shí)候可以找一下哪些物理地址可以用,不過(guò)這里這個(gè)嵌入式系統(tǒng)似乎哪些可以用都是之前就定好了的?然后就按之前說(shuō)的從“定好的”地方(flash某處)讀取配置信息,挑一個(gè)程序映像,并挑一個(gè)ram位置作為目的地拷過(guò)去,然后啟動(dòng)那個(gè)程序!

那個(gè)程序一般來(lái)說(shuō)是個(gè)操作系統(tǒng)了,他會(huì)建幾個(gè)任務(wù)運(yùn)行什么的

不過(guò)很令我沮喪的是我看的關(guān)于bootloader的文章表示不要再os啟動(dòng)前開啟mmu。。。關(guān)于os和bl實(shí)在還有很懂地方不懂啊,不知道14號(hào)前這個(gè)應(yīng)用搞得出來(lái)不。。

不知道各位看這塊的時(shí)候,是不是也有同感啊。


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

    關(guān)注

    40

    文章

    3520

    瀏覽量

    128805
  • bootloader
    +關(guān)注

    關(guān)注

    2

    文章

    232

    瀏覽量

    45368
  • MMU
    MMU
    +關(guān)注

    關(guān)注

    0

    文章

    91

    瀏覽量

    18168

原文標(biāo)題:嵌入式er日常!最近一直糾結(jié)于MMU,bootloader,dta....

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MQX操作系統(tǒng)啟動(dòng)到main函數(shù)的過(guò)程

      當(dāng)一個(gè)嵌入式操作系統(tǒng)上電的時(shí)候,是如何從硬件跳轉(zhuǎn)到軟件的main函數(shù)里面的呢?許多學(xué)習(xí)嵌入式軟件的人一開始都會(huì)有這樣的疑惑,今天這里將詳細(xì)介紹MQX系統(tǒng)啟動(dòng)到main函數(shù)的這個(gè)過(guò)程,這個(gè)過(guò)程被
    發(fā)表于 11-08 15:48 ?955次閱讀
    MQX操作<b class='flag-5'>系統(tǒng)啟動(dòng)</b>到main函數(shù)的過(guò)程

    TL3588--系統(tǒng)啟動(dòng)卡制作及系統(tǒng)固化

    TL3588--系統(tǒng)啟動(dòng)卡制作及系統(tǒng)固化
    的頭像 發(fā)表于 01-25 09:50 ?1454次閱讀
    TL3588--<b class='flag-5'>系統(tǒng)啟動(dòng)</b>卡制作及<b class='flag-5'>系統(tǒng)</b>固化

    Linux和Windows系統(tǒng)啟動(dòng)過(guò)程的簡(jiǎn)單分析

    Linux和Windows系統(tǒng)啟動(dòng)過(guò)程的簡(jiǎn)單分析 對(duì)于Windows系統(tǒng)的使用和操作,大家應(yīng)該都比較熟悉,而
    發(fā)表于 08-28 11:27

    IAR系統(tǒng)啟動(dòng)流程及修改方法

    硬件初始化和軟件運(yùn)行環(huán)境初始化兩個(gè)部分的工作。一、系統(tǒng)硬件初始化對(duì)于硬件初始化,執(zhí)行步驟流程如下:圖?1CPU復(fù)位時(shí),會(huì)從系統(tǒng)啟動(dòng)程序代碼cstartup中的__iar_program_start函數(shù)
    發(fā)表于 08-06 13:57

    基于ARM-μCLinux嵌入式系統(tǒng)啟動(dòng)引導(dǎo)的實(shí)現(xiàn)

    基于ARM-μCLinux嵌入式系統(tǒng)啟動(dòng)引導(dǎo)的實(shí)現(xiàn):介紹了 ARM-μCLinux 嵌入式系統(tǒng)的結(jié)構(gòu)組成,重點(diǎn)分析了 ARM--μCLinux 嵌入式系統(tǒng)啟動(dòng)引導(dǎo)的過(guò)程實(shí)現(xiàn)該
    發(fā)表于 06-25 08:14 ?36次下載

    Motorola微處理器的bootloader分析與應(yīng)用

    引 言??bootloader是用來(lái)完成系統(tǒng)啟動(dòng)系統(tǒng)軟件加載工作的程序。它是底層硬件和上層應(yīng)用軟件之間的一個(gè)中間件軟件,完成處理器和周邊電路正常運(yùn)行所要的初始化工
    發(fā)表于 03-11 12:39 ?1049次閱讀
    Motorola微處理器的<b class='flag-5'>bootloader</b><b class='flag-5'>分析</b>與應(yīng)用

    BootLoader啟動(dòng)引導(dǎo)方式分析

    BootLoader啟動(dòng)引導(dǎo)方式分析 在中大規(guī)模的嵌入式系統(tǒng)開發(fā)中,往往需要BootLoader對(duì)系統(tǒng)
    發(fā)表于 03-29 15:09 ?2406次閱讀
    <b class='flag-5'>BootLoader</b><b class='flag-5'>啟動(dòng)</b>引導(dǎo)方式<b class='flag-5'>分析</b>

    系統(tǒng)啟動(dòng)過(guò)程

    系統(tǒng)啟動(dòng)過(guò)程系統(tǒng)啟動(dòng)過(guò)程主要由一下幾步組成(以硬盤啟動(dòng)為例):1. 開機(jī)2. BIOS 加電自檢 ( Power On Self Test -- POST ),內(nèi)存地址為 0ffff:00003. 將硬盤第一個(gè)
    發(fā)表于 10-11 12:17 ?2219次閱讀

    改進(jìn)的直接轉(zhuǎn)矩控制系統(tǒng)啟動(dòng)方法

    改進(jìn)的直接轉(zhuǎn)矩控制系統(tǒng)啟動(dòng)方法
    發(fā)表于 01-21 11:54 ?1次下載

    bootloader模式怎么進(jìn)入

    對(duì)于很多安卓手機(jī)用戶們來(lái)說(shuō),相信刷過(guò)機(jī)的用戶們一定對(duì)Bootloader模式不會(huì)陌生,Bootloader就相當(dāng)于手機(jī)的bios,它在手機(jī)啟動(dòng)的時(shí)候根據(jù)基帶初始化硬件,然后引導(dǎo)
    發(fā)表于 11-10 16:59 ?4.9w次閱讀

    如何實(shí)現(xiàn)簡(jiǎn)單bootloader功能

    考慮到瑞薩的MCUBoot的ROM占用和某些客戶的需求,本篇主要講述在不使用瑞薩MCUboot驅(qū)動(dòng)下,如何實(shí)現(xiàn)簡(jiǎn)單bootloader功能。
    的頭像 發(fā)表于 09-06 13:13 ?2351次閱讀

    UM2012_osxMotionXX系統(tǒng)啟動(dòng)

    UM2012_osxMotionXX系統(tǒng)啟動(dòng)
    發(fā)表于 11-22 19:24 ?0次下載
    UM2012_osxMotionXX<b class='flag-5'>系統(tǒng)啟動(dòng)</b>

    一張圖了解嵌入式系統(tǒng)啟動(dòng)流程

    如下圖所示是嵌入式系統(tǒng)啟動(dòng)流程圖,圖中紅色的數(shù)字圓點(diǎn)表示啟動(dòng)的先后順序。主要分為4個(gè)階段,分別是第一階段 bootloader,第二階段uboot,第三階段內(nèi)核啟動(dòng),第四階段app
    發(fā)表于 03-07 09:44 ?716次閱讀

    RK3568--系統(tǒng)啟動(dòng)階段LOGO顯示

    RK3568--系統(tǒng)啟動(dòng)階段LOGO顯示
    的頭像 發(fā)表于 01-19 14:44 ?760次閱讀
    RK3568--<b class='flag-5'>系統(tǒng)啟動(dòng)</b>階段LOGO顯示

    TLT507--系統(tǒng)啟動(dòng)階段LOGO顯示

    TLT507--系統(tǒng)啟動(dòng)階段LOGO顯示
    的頭像 發(fā)表于 01-26 09:42 ?303次閱讀
    TLT507--<b class='flag-5'>系統(tǒng)啟動(dòng)</b>階段LOGO顯示