一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

單片機(jī)需要使用Bootloader嗎(1)

 樂創(chuàng)客搬運(yùn)工 2021-07-01

 Bootloader

“Bootloader”俗稱“引導(dǎo)加載程序”。在我們狹義上說的“Bootloader”是特指嵌入式設(shè)備中的引導(dǎo)程序,但是從廣義的角度上來說,PC機(jī)中也存在“Bootloader”,比如Windows中的引導(dǎo)工具為“NTLOADER”,“Bootmgr”?!癗TLOADER”是Windows 98和Windows XP時(shí)代的引導(dǎo)程序,而Windows Vista,Windows 7和Windows 10操作系統(tǒng)的引導(dǎo)程序則為“Bootmgr”。Linux操作系統(tǒng)也有自己特定使用的引導(dǎo)程序,這就是開源組織GNU推出的Grub(GRand Unified Bootloader簡稱“GRUB”),它可以引導(dǎo)非常多的操作系統(tǒng),功能非常強(qiáng)大。然而對(duì)于普通程序猿來說,PC端的引導(dǎo)程序根本不需要我們涉及,它們往往會(huì)隨著操作系統(tǒng)被一并自動(dòng)安裝進(jìn)我們的PC,只有當(dāng)安裝了雙系統(tǒng)的時(shí)候,開機(jī)會(huì)出現(xiàn)啟動(dòng)管理器讓你選擇進(jìn)入哪個(gè)系統(tǒng)的時(shí)候,引導(dǎo)程序才會(huì)顯出它的“真身”。

圖1 雙系統(tǒng)的開機(jī)引導(dǎo)

在嵌入式設(shè)備中,Bootloader程序的裁剪是一門必修課。嵌入式設(shè)備中,只要使用了Linux這種操作系統(tǒng)必須要使用引導(dǎo)程序,這些嵌入式Linux操作系統(tǒng)的引導(dǎo)程序用的是一個(gè)名叫“U-Boot”的開源軟件。而早在嵌入式Linux剛剛興起的時(shí)候,各家的硬件平臺(tái)標(biāo)準(zhǔn)化遠(yuǎn)遠(yuǎn)沒有現(xiàn)在這么高,因此對(duì)于不同的硬件平臺(tái),需要修改U-Boot的代碼來適配。

圖2 U-Boot的官方網(wǎng)站

接下來問題來了,為什么這種操作系統(tǒng)一定要用引導(dǎo)程序來引導(dǎo)呢?首先來看下U-Boot這種Bootloader的主要功能,這里主要是介紹早期的U-Boot功能,這些功能是整個(gè)嵌入式Linux操作系統(tǒng)成功運(yùn)行的基礎(chǔ)。U-Boot的運(yùn)行分為兩個(gè)階段:

第一階段是Low level init,即低級(jí)別的初始化,這一階段主要完成以下一些工作:

設(shè)置異常向量;

設(shè)置CPU速度、時(shí)鐘頻率以及中斷控制寄存器;

初始化內(nèi)存控制器;

拷貝U-Boot第二階段的功能代碼到RAM空間;

設(shè)置堆棧,初始化數(shù)據(jù)段并跳轉(zhuǎn)至第二階段引導(dǎo)。

第二階段主要完成的功能有:

初始化Flash設(shè)備;

初始化系統(tǒng)內(nèi)存;

初始化NAND,顯示,網(wǎng)絡(luò)等其他設(shè)備;

進(jìn)入Bootloader功能區(qū)(可選,功能可以為硬件測試,下載操作系統(tǒng)內(nèi)核,下載文件系統(tǒng)等);

將Kernel和根文件系統(tǒng)從Flash映射到RAM中;

設(shè)定內(nèi)核啟動(dòng)參數(shù)和啟動(dòng)內(nèi)核。

u-boot.lds

OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS{    . = 0x00000000;    . = ALIGN(4);    .text :    {          *(.__image_copy_start)        CPUDIR/start.o (.text*)        *(.text*)    }     . = ALIGN(4);    .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }    . = ALIGN(4);    .data : { *(.data*)

arch/arm/cpu/armv7/start.s中節(jié)選代碼

.globl _start_start: b   reset    ldr pc, _undefined_instruction    ldr pc, _software_interrupt    ldr pc, _prefetch_abort    ldr pc, _data_abort    ldr pc, _not_used    ldr pc, _irq    ldr pc, _fiq#ifdef CONFIG_SPL_BUILD_undefined_instruction: .word _undefined_instruction_software_interrupt:    .word _software_interrupt_prefetch_abort:    .word _prefetch_abort_data_abort:        .word _data_abort_not_used:      .word _not_used_irq:           .word _irq_fiq:           .word _fiq_pad:           .word 0x12345678 /* now 16*4=64 */#else.globl _undefined_instruction_undefined_instruction: .word undefined_instruction.globl _software_interrupt_software_interrupt:    .word software_interrupt.globl _prefetch_abort_prefetch_abort:    .word prefetch_abort.globl _data_abort_data_abort:        .word data_abort.globl _not_used_not_used:      .word not_used.globl _irq_irq:           .word irq.globl _fiq_fiq:           .word fiq_pad:           .word 0x12345678 /* now 16*4=64 */#endif  /* CONFIG_SPL_BUILD */.global _end_vect_end_vect:.balignl 16,0xdeadbeef

在GCC的Make系統(tǒng)中,一個(gè)程序的入口是由鏈接文件決定的,也就是我們這里的start.s文件。在ARM系統(tǒng)上電的時(shí)候,會(huì)根據(jù)硬件啟動(dòng)方式的選擇,進(jìn)入不同的啟動(dòng)區(qū)域,但是這段代碼無論無何都會(huì)被執(zhí)行,只不過是從哪里映射到起始地址而已。

等到整個(gè)U-Boot運(yùn)行起來之后,接下來用戶就可以選擇是直接引導(dǎo)程序,還是進(jìn)行內(nèi)核更新或者文件系統(tǒng)更新,這些軟件的更新也是U-Boot提供的一些功能。

圖3 U-Boot通過串口打印出的CLI界面

   單片機(jī)的Bootloader

既然Linux操作系統(tǒng)進(jìn)行啟動(dòng)時(shí),必須要用Bootloader初始化硬件以及引導(dǎo)操作系統(tǒng),那么在沒有Linux操作系統(tǒng)的單片機(jī)中為什么還要用Bootloader?

單片機(jī)中使用Bootloader的主要作用有兩個(gè):

改變軟件燒寫方式;

方便軟件更新(在線更新或者OTA)。

軟件更新這一點(diǎn)很好理解,因?yàn)槟壳昂芏嘣O(shè)備都可以聯(lián)網(wǎng),可以設(shè)置一個(gè)服務(wù)器自動(dòng)推送一個(gè)新版本的固件來給單片機(jī)升級(jí),既省去了客戶服務(wù)現(xiàn)場更新軟件的成本,又可以發(fā)揮軟件行業(yè)敏捷開發(fā)的優(yōu)點(diǎn)。

圖4 OTA升級(jí)

而改變軟件的燒寫方式這一點(diǎn)可能有點(diǎn)困惑了,現(xiàn)在的MCU明明可以用J-Link,用串口等等方式來燒寫,為什么還要去改變軟件的燒寫方式呢?

這個(gè)對(duì)于一些特殊的行業(yè),比如工程車輛,叉車,挖掘機(jī)等,它們既不支持OTA在線升級(jí),對(duì)外的標(biāo)準(zhǔn)口也只有一個(gè)CAN總線接口,這個(gè)接口既要用作車輛信息診斷的接口,又要對(duì)整個(gè)車輛網(wǎng)絡(luò)中的所有控制器進(jìn)行軟件升級(jí)。這就必然要給CAN總線加入軟件燒寫的功能,而單片機(jī)的出場IAP基本只支持串口,并不支持CAN總線等特殊通訊口。因此一個(gè)好的Bootloader程序可以完美解決這個(gè)問題。

圖5 林德叉車的CAN總線燒錄器(串口轉(zhuǎn)CAN)

下一篇文章,我們將來詳細(xì)地介紹下如何設(shè)計(jì)一個(gè)滿足OTA的STM32 Bootloader。


    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日本不卡在线一区二区三区| 熟女少妇久久一区二区三区| 不卡在线播放一区二区三区| 亚洲男人天堂网在线视频| 91在线播放在线播放观看| 国产日韩综合一区在线观看| 日韩女优视频国产一区| 日韩精品一区二区一牛| 亚洲成人精品免费在线观看 | 美国欧洲日本韩国二本道| 欧美一区二区三区高潮菊竹| 欧美日韩国产另类一区二区| 91精品日本在线视频| 精品一区二区三区不卡少妇av| 91超精品碰国产在线观看| 美女露小粉嫩91精品久久久| 精品偷拍一区二区三区| 国产午夜在线精品视频| 亚洲精品蜜桃在线观看| 日本精品中文字幕在线视频| 大香蕉久草网一区二区三区| 午夜久久久精品国产精品| 日韩人妻精品免费一区二区三区 | 国产日韩久久精品一区| 久久亚洲精品成人国产| 欧洲日韩精品一区二区三区| 性欧美唯美尤物另类视频 | 91日韩欧美国产视频| 亚洲av一区二区三区精品| 日韩国产亚洲欧美激情| 国产精品伦一区二区三区四季| 欧美一本在线免费观看| 女厕偷窥一区二区三区在线| 欧美午夜视频免费观看| 欧美韩国日本精品在线| 国产精品欧美一区二区三区不卡| 最新69国产精品视频| 福利一区二区视频在线| 婷婷亚洲综合五月天麻豆| 在线免费国产一区二区三区| 成人精品欧美一级乱黄|