VxWorks 引導程式

2021-09-26 09:19:07 字數 2531 閱讀 7077

前言:vxworks 的一些檔案,如 usrconfig.c 在 config,comp目錄中均有出現,因編譯方式而選擇某乙個檔案,命令列方式採用 config 目錄檔案,tornado 圖形介面配置選擇comp 目錄檔案。此處採用命令列方式編譯。

一、vxworks映像型別

bootrom、vxworks兩種映像。

bootrom 用於引導 vxworks,功能如上所述。該映像直接燒在flash中,也可用uboot代替。

vxworks 多工的系統映像檔案。

二、bootrom 啟動策略

共三種:bootrom、bootrom_uncmp、bootrom_res。

1、bootrom 壓縮型,占用 flash 空間小,其中大部分被壓縮過,完成將自身從flash中解壓並搬運到ram中的操作,該步驟完成後將跳到ram中繼續執行 bootrom 程式(聽起來神奇,看起來挺美)。優點:占用flash小,程式段**段均在ram中執行,速度快。

2、bootrom_uncmp 非壓縮型,較 bootrom 型占用 flash 大些,完成將自身從flash到ram的搬運過程,無需解壓,其後與 bootrom 方式一致。個人認為速度會較 bootrom 方式忙些,因讀取 flash 的速度較慢,未壓縮,多讀取flash時間可能超過 bootrom 方式的解壓時間。

3、bootrom_res 駐留flash型,因未經壓縮,占用flash空間和 bootrom_uncmp 大小幾乎一致。執行時**段一致在flash中執行,導致速度較上兩種慢;資料段將被搬到ram中。優點:占用ram小;缺點:較1占用較多flash空間,較1、2的執行速度慢。

注:bootrom 與 vxworks 關係易混淆。vxworks 是真正系統執行時映像,因支援多種啟動策略,故由其他模組(bootrom、uboot)完成載入。bootrom 在完成載入使命後將不再被執行。

三、bootrom 啟動流程

這裡描述的bootrom均由命令列方式編譯產生。

1、上電後執行順序

rominit() (rominit.s)

-->

romstart() (bootinit.c)

-->

usrinit() (bootconfig.c)

-->

excvecinit() (target\lib\arm\armarch4\common\libarch.a)

-->

syshwinit() (bootconfig.c)

-->

usrkernelinit() (target\src\config\usrkernel.c)

(included by bootconfig.c)

-->

kernelinit() (target\lib\arm\armarch4\common\libwind.a)

-->

usrroot() (bootconfig.c)

2、rominit() (rominit.s)

初始化中斷、時鐘、系統匯流排、記憶體。非 bootrom_res 型 bootrom,還將 bootrom 的 rominit 函式段從 flash 搬運到 ram 中,位址對映,之後該函式的執行將在 ram 中進行。對於 bootrom_res 型 bootrom 將一直在 flash 中執行。因 vxworks 系統啟動後,需對所有硬體重新初始化,該函式僅做必不可少的初始化部分。

注:該函式在 ld 的時候被對映到 ram_high_adrs。如下:

ldarm -x -el -n   -e rominit \

-ttext 0c500000   -o bootrom_uncmp rominit.o bootinit_uncmp.o version.o \

bootconfig.o sysalib.o syslib.o ne2000end.o   --start-group   -lc:\tornado2.2_

arm\target/lib/arm/armarch4/gnu -lc:\tornado2.2_arm\target/lib/arm/armarch4/comm

on \

-lcplus   -lgnucplus   -lvxcom   -larch   -lcommoncc   -ldcc   -ldrv   -lgcc   -

lnet   -los   -lrpc   -ltffs   -lvxfusion   -lvxvmi   -lwdb   -lwind   -lwindview c:\tor

nado2.2_arm\target/lib/libarmarch4gnuvx.a --end-group   -t c:\tornado2.2_arm\targ

et/h/tool/gnu/ldscripts/link.ram

3、romstart() (bootinit.c)

bootrom 型:將 code 段、data 段從 flash 中拷貝到 ram中,清記憶體,之後對code段進行解壓縮。

bootrom_uncmp 型:將 code 段、data 段從 flash 中拷貝到 ram中,清記憶體。

bootrom_res 型:將 data 段從 flash 中拷貝到 ram。

硬碟主引導扇區引導程式

硬碟主引導扇區的引導程式只佔139個位元組 不同版本的fdisk 不同的分割槽程式寫入的主引導記錄會不相同,但其基本功能一樣 經過反彙編後的引導程式的彙編 如下 1000 0600 fa cli 自舉,將0000 7c00開始的硬碟主引導記錄本身轉移到0000 0600處,空出0000 7c00開始...

什麼是引導引導程式?

引導引導程式 boot loader 會引導作業系統。當機器引導它的作業系統時,bios 會讀取引導介質上最前面的 512 位元組 即人們所知的 主引導記錄 master boot record,mbr 在單一的 mbr 中只能儲存乙個作業系統的引導記錄,所以當需要多個作業系統時就會出現問題。所以需...

GRUB 引導引導程式 20210209

在系統啟動的第二步中,開始執行引導程式,那引導程式是 來的呢?引導程式是grub安裝到mbr中。grub,乙個引導引導程式,屬於gnu專案。它是 多引導規範 的 參考實現 可以使用者在安裝了多個作業系統的主機上選擇要啟動的系統,或者選擇特定的核心配置。作業系統的核心通常儲存在檔案系統中的,但是bio...