日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

U-BOOT之一:BootLoader 的概念与功能

發(fā)布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 U-BOOT之一:BootLoader 的概念与功能 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

U-BOOT之一:BootLoader 的概念與功能

???????????????????????????? ——轉(zhuǎn)自《U-BOOT移植S3C2440完全手冊》

1.1嵌入式Linux 軟件結(jié)構(gòu)與分布

一般情況下嵌入式Linux 系統(tǒng)中的軟件主要分為以下幾部分:

1) 引導(dǎo)加載程序:其中包括內(nèi)部ROM 中的固化啟動代碼和BootLoader 兩部分。內(nèi)部固化ROM 是廠家在芯片生產(chǎn)時候固化的,作用基本上是引導(dǎo)BootLoader。有的芯片比較復(fù)雜,比如Omap3 在flash 中沒有代碼的時候有許多啟動方式:USB、UART 或以太網(wǎng)等等。而S3C24x0 則很簡單,只有Norboot 和Nandboot。

2) Linux kernel drivers。

3) 文件系統(tǒng)。包括根文件系統(tǒng)和建立于Flash 內(nèi)存設(shè)備之上的文件系統(tǒng)(EXT4、UBI、CRAMFS 等等)。它是提供管理系統(tǒng)的各種配置文件以及系統(tǒng)執(zhí)行用戶應(yīng)用程序的良好運(yùn)行環(huán)境及載體。

4) 應(yīng)用程序。用戶自定義的應(yīng)用程序,存放于文件系統(tǒng)之中。

在Flash 存儲器中,他們的分布一般如下:

但是以上只是大部分情況下的分布,也有一些可能根文件系統(tǒng)是initramfs,被一起壓縮到了內(nèi)核映像里,或者沒有Bootloader 參數(shù)區(qū),等等。

1.2 在嵌入式Linux BootLoader 的必要性

Linux 內(nèi)核的啟動除了內(nèi)核映像必須在主存的適當(dāng)位置,CPU 還必須具備一定的條件:

1. CPU 寄存器的設(shè)置:

R0=0;

R1=Machine ID(即Machine Type Number,定義在

linux/arch/arm/tools/mach-types);

R2=內(nèi)核啟動參數(shù)在 RAM 中起始基地址;

2. CPU 模式:

必須禁止中斷(IRQs 和FIQs);

CPU 必須 SVC 模式;

3. Cache 和 MMU 的設(shè)置:

MMU 必須關(guān)閉;

指令 Cache 可以打開也可以關(guān)閉;

數(shù)據(jù) Cache 必須關(guān)閉;

但是在CPU 剛上電啟動的時候,一般連內(nèi)存控制器都沒有初始化過,根本無法在主存中運(yùn)行程序,更不可能處在Linux 內(nèi)核啟動環(huán)境中。為了初始化CPU 及其他外設(shè),使得Linux內(nèi)核可以在系統(tǒng)主存中運(yùn)行,并讓系統(tǒng)符合Linux 內(nèi)核啟動的必備條件,必須要有一個先于內(nèi)核運(yùn)行的程序,他就是所謂的引導(dǎo)加載程序(Boot Loader)。

而BootLoader 并不是Linux 才需要,而是幾乎所有運(yùn)行操作系統(tǒng)的設(shè)備都需要。我們的PC 的BOIS 就是Boot Loader 的一部分(只是前期引導(dǎo),后面一般還有外存中的各種BootLoader),對于Linux PC 來說,Boot Loader = BIOS + GRUB/LILO。

1.3 Boot Loader 的功能和選擇

綜上所述:BootLoader 是在操作系統(tǒng)內(nèi)核啟動之前運(yùn)行的一段小程序。通過這段程序,我們可以初始化硬件設(shè)備,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境,最后從別處(Flash、以太網(wǎng)、UART)載入內(nèi)核映像到主存并跳到入口地址。

由于BootLoader 需要直接操作硬件,所以它嚴(yán)重依賴于硬件,而且依據(jù)所引導(dǎo)的操作系統(tǒng)的不同,也有不同的選擇。對于嵌入式世界中更是如此。就S3C24x0 而言,如果是引導(dǎo)Linux,一般選用韓國的mizi 公司設(shè)計(jì)的vivi 或者DENX 軟件工程中心的Das U-boot,如果是引導(dǎo)Win CE,就選用Eboot。如果是開發(fā)StrongARM 構(gòu)架下的LART,就可選用由Jan-Derk Bakker 和 Erik Mouw 發(fā)布的Blob(Boot Loader Object)。如果是要引導(dǎo)eCos 系統(tǒng),可

以選用同是Redhat 公司開發(fā)的Redboot。

所以在嵌入式世界中建立一個通用的 BootLoader 幾乎是不可能的,而可能的是讓一個Boot Loader 代碼支持多種不同的構(gòu)架和操作系統(tǒng),并讓她有很好的可移植性。U-boot 就是支持多平臺多操作系統(tǒng)的一個杰出代表。這也是U-boot 的優(yōu)勢所在,因?yàn)槿绻陂_發(fā)S3C2440 時熟悉了U-boot,再轉(zhuǎn)到別的平臺的時候,就可以很快地完成這個平臺下U-boot的移植。而且U-boot 的代碼結(jié)構(gòu)越來越合理,對于新功能的添加也十分容易。

總結(jié)

以上是生活随笔為你收集整理的U-BOOT之一:BootLoader 的概念与功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。