嵌入式系統引導和啟動的流程

2022-04-13 11:06:15 字數 1701 閱讀 6520

author:kiki

email : [email protected]

date: 2011.3.7

blog主題

這篇blog想弄清楚fpga上電配置後程式引導和啟動的整個流程是怎麼樣的,不是談論如何編寫bootloader。

主題的引出

本 人建立了乙個基於microblaze的嵌入式系統(類似於如圖1所示,當然沒有圖1那麼複雜)。片上bram僅僅是64kb,而本人生成的程式映象有 2mb多,所以這樣的話,程式映象不能跟用於配置fpga的bit流檔案融合直接配置到片上的bram中。解決的方案是用外部非易失性儲存介質來儲存程式 映象和bit流檔案,如prom,或者flash。xilinx提供了一種systemace 配置解決方案,那整個工作流程又是如何的呢?

圖1. 基於microblaze的sopc架構

問題的解決

首先說明一下systemace檔案是如何生成的?

1. 通過impact工具將bitstream檔案轉為svf檔案

該svf檔案包含了配置fpga的jtag指令序列

3.通過xmd將資料/二進位制**轉為svf檔案

4.鏈結第一步和第二步中生成的svf檔案

5.通過impact工具利用結合的svf檔案生成systemace檔案

總結,systemace配置方案,需要硬體的支援,即systemace控制器和cf卡,當然在嵌 入式系統中還需要新增debug模組。優點顯而易見,不用編寫bootload類似的引導程式,也不用關心程式映象的大小,因為cf卡的容量很大,滿足了 絕大多數的嵌入式應用的要求。

問題的延伸

還有一種情況就是通過prom/flash儲存程式映象和bitstream檔案配置fpga,並引導程式啟動。具體的流程如下:

圖2 spartan6的配置和啟動的過程

這裡不關心如何去配置fpga,而關心的是系統是如何引導的。以在fpga執行linux為例作說明。如圖3所示,具體步驟如下:

第一步,cpu從0x0位址(bram)執行loader1 (注意,loader1放在bram中,在配置fpga過程中就加在進去)

第二步,loader1讀取spi flash中loader2程式,然後複製到記憶體中。

第三步,loader1程式跳至在記憶體中執行loader2

第四步,loader2讀取spi flash中壓縮的核心映象

第五步,loader2程式解壓縮核心到另一塊記憶體空間

第六步,loader2程式跳至解壓縮的核心映象

第七步,linux核心啟動

圖3 linux引導流程

由上面的流程可知,通過prom或者flash進行配置的話,需要bootload作支援,即需要完成將程式映象從flash或者prom中讀取至記憶體上。當然嵌入式系統中需要新增prom或者flash控制器。

嵌入式linux啟動流程

s3c6410 map io裡面呼叫 mach s3c6410下的cpu.c中 各個成員函式在不同時期被呼叫 1.init machine 在 arch arm kernel setup.c 中被 customize machine 呼叫,放在 arch initcall 段裡面,會自動按順序被呼叫...

嵌入式 ARM Linux啟動流程

bootloader 翻譯為 第一階段 引導裝入程式 bootstrap loader 翻譯為 第二階段引導裝入程式 bootloader不用多解釋都能理解 上電後執行的第乙個程式,它絕對不會依賴核心。比如uboot vivi bootstrap,第二階段引導裝入程式,屬於核心 沒有被編譯進vmli...

嵌入式linux核心啟動流程

核心構成分析 uimage構成 arm linux核心映像uimage生成過程 u boot認為zimage為自解壓檔案 zimage decompress code head.s misc.s compressed vmlinux vmlinux vmlinux init arch arm ker...