Boot Loader 就是在操作系�(tǒng)內核運行之前運行的一段小程序。通過這段小程�,我們可以初始化硬件設備、建立內存空間的映射�,從而將系統(tǒng)的軟硬件�(huán)境帶到一個合適的狀�(tài),以便為最終調用操作系�(tǒng)內核準備好正確的�(huán)�。通常,Boot Loader 是嚴重地依賴于硬件而實現的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個通用� Boot Loader 幾乎是不可能�。盡管如�,我們仍然可以對 Boot Loader 歸納出一些通用的概念來,以指導用戶特定� Boot Loader 設計與實��
大多� Boot Loader 都包含兩種不同的操作模式�"啟動加載"模式�"下載"模式,這種區(qū)別僅對于開發(fā)人員才有意義。但從最終用戶的角度�,Boot Loader 的作用就是用來加載操作系�(tǒng),而并不存在所謂的啟動加載模式與下載工作模式的區(qū)�� 啟動加載(Boot loading)模式:這種模式也稱�"自主"(Autonomous)模�。也� Boot Loader 從目標機上的某個固�(tài)存儲設備上將操作系統(tǒng)加載� RAM 中運�,整個過程并沒有用戶的介�。這種模式� Boot Loader 的正常工作模式,因此在嵌入式產品�(fā)布的時侯,Boot Loader 顯然必須工作在這種模式�� 下載(Downloading)模式:在這種模式�,目標機上的 Boot Loader 將通過串口連接或網絡連接等通信手段從主機(Host)下載文件,比如:下載內核映像和根文件系�(tǒng)映像�。從主機下載的文件通常首先� Boot Loader 保存到目標機� RAM 中,然后再被 Boot Loader 寫到目標機上的FLASH 類固�(tài)存儲設備�。Boot Loader 的這種模式通常在次安裝內核與根文件系統(tǒng)時被使用;此�,以后的系統(tǒng)更新也會使用 Boot Loader 的這種工作模式。工作于這種模式下的 Boot Loader 通常都會向它的終端用戶提供一個簡單的命令行接口� � Blob � U-Boot 等這樣功能強大� Boot Loader 通常同時支持這兩種工作模�,而且允許用戶在這兩種工作模式之間進行切換。比如,Blob 在啟動時處于正常的啟動加載模�,但是它會延� 10 秒等待終端用戶按下任意鍵而將 blob 切換到下載模式。如果在 10 秒內沒有用戶按鍵,則 blob 繼續(xù)啟動 Linux 內核�
每種不同� CPU 體系結構都有不同� Boot Loader。有� Boot Loader 也支持多種體系結構的 CPU,比� U-Boot 就同時支� ARM 體系結構和MIPS 體系結構。除了依賴于 CPU 的體系結構外,Boot Loader 實際上也依賴于具體的嵌入式板級設備的配置。這也就是說,對于兩塊不同的嵌入式板而言,即使它們是基于同一� CPU 而構建的,要想讓運行在一塊板子上� Boot Loader 程序也能運行在另一塊板子上,通常也都需要修� Boot Loader 的源程序�
系統(tǒng)加電或復位后,所有的 CPU 通常都從某個由 CPU 制造商預先安排的地址上取指令。比�,基� ARM7TDMI core � CPU 在復位時通常都從地址 0x00000000 取它的條指令。而基� CPU 構建的嵌入式系統(tǒng)通常都有某種類型的固�(tài)存儲設備(比如:ROM、EEPROM � FLASH �)被映射到這個預先安排的地址�。因此在系統(tǒng)加電后,CPU 將首先執(zhí)� Boot Loader 程序�
下圖就是一個同時裝� Boot Loader、內核的啟動參數、內核映像和根文件系�(tǒng)映像的固�(tài)存儲設備的典型空間分配結構圖�
� 固態(tài)存儲設備的典型空間分配結�
系統(tǒng)上電復位�� 在完成各種初始化配置后首先判�0x500地址單元中值是否為0xFF� 如果�,則說明系統(tǒng)從未下載過用戶程�� 系統(tǒng)會一直運行Boot loader程序等待PC 機發(fā)送下載命�� 如果0x500中的值不�0xFF� 則說明系�(tǒng)中已經下載過用戶程序�� 這時候根�0x500中的值來設置定時器T imer2的初值并開始計時� 如果UART2 在指定的自舉周期內未接收到PC 機發(fā)來的下載命令(說明系統(tǒng)不需要下載程�)� 系統(tǒng)會自動跳出Boo tloader程序而去運行已有的用戶代碼, 如果UART2在自舉周期內接收到了下載命令� Boo tloader程序會進入循環(huán)狀�(tài)等待PC機發(fā)送數�。如圖所��
� 程序流程圖�
如前文所�� PC 機發(fā)送的數據是從. hex 文件中提取的� PC機首先發(fā)送擴展地址部分� 下位機接收保存后會繼�(xù)等待接收32個指令字( 96字節(jié))并保存到RAM 中, 然后根據接收到的地址擦除FLASH 存儲器中�1�� 擦除FLASH 是通過調用匯編函數E raseMem來進行�� 函數原型如下:
mov# 0x4041, NVMCON ; 使NVMCON 寄存器為擦除FLASH模式
mov # 0x55, W 0
movW0, NVMKEY
mov # 0xAA, W0
movW 0, NVMKEY ; �0x55�0xAA 寫入密鑰寄存�
bsetNVMCON, #WR ; 開始擦除
nop
nop
return
擦除FLASH存儲器的一行后需要把接收到的32個指令字寫入到FLASH 存儲器寫鎖存器中� 這一過程可以通過函數W riteLatch 實現� 函數原型如下:
movW0, TBLPAG ; 寫表寄存�
tb lw tlW3, [W1]
tb lw thW2, [W1] ; 寫入鎖存�
return
這一步完成之后就可以將接收到�32個指令字寫入FLASH 存儲器了� 其方法與擦除FLASH 類似� 寫完一行后向PC 機發(fā)送應�。待FLASH 存儲器全部寫完之�� PC 機會�(fā)送表示結束下載的命令� 下位機接收后退出Boo tloader程序� 進入新的用戶程序繼續(xù)運行� 從而完成整個在線自編程過程�
Bootloader相當于PC主板上的B IOS� 是層的引導軟件。Boo tloader是一段固化在嵌入式系�(tǒng)目標系統(tǒng)ROM或者是諸如FLASH 等非易失存儲器中的一段程�� 它的主要作用就是引導操作系統(tǒng)或用戶程序的運行。系�(tǒng)上電后Boo tloader將首先接管系�(tǒng)� 在進行一些最基本的上電自檢后� Bootloader將對系統(tǒng)的硬件進行初始化, 為引導操作系�(tǒng)作好準備� 接下來, Bootloader需要將操作系統(tǒng)的代碼拷貝到主存儲器的特定地址� Boot loader將控制權交給操作系統(tǒng)� 由操作系�(tǒng)完成接下來的工作;在不含操作系統(tǒng)的系�(tǒng)中, Bootloader可以完成這樣一些操�: 分配程序存儲空間� 重新映射復位和中斷向量; 將程序代碼從片外加載到程序區(qū)� �(zhí)行時再將代碼加載到RAM 中以便快速執(zhí)�� 檢測是否需要下載新的用戶代�� 若需要則通過某種通信方式接收新代碼并將其寫入指定程序存儲空間�� 若不需要, 則執(zhí)行原有用戶代��
維庫電子�,電子知�,一查百通!
已收錄詞�153979�