1. 程式人生 > >嵌入式啟動之三:應用程式的三種儲存和載入方式

嵌入式啟動之三:應用程式的三種儲存和載入方式

       通過前面嵌入式啟動方式的學習,再來理解嵌入式應用程式的三種載入方式是比較容易的。一般意義上,啟動是為了引導OS到記憶體,而應用程式則是作業系統run起來後的使用者選擇,兩者是比較相似的。先根據啟動的兩種方式來介紹應用程式的載入。

        1. 對於資源有限型的嵌入式系統,應用程式在編譯、連結之後,會通過二進位制工具分析可執行檔案的格式,抽出code和data段資料,生成.HEX格式或者.BIN格式,下載到SOC內建的flash中。在上電之後就直接執行了。這種載入方式稱為離線載入。

       2. 對於資源寬裕型的嵌入式系統,應用程式在編譯、連結之後生成一個可執行檔案,如elf或者exe,放到一個檔案目錄。這個檔案目錄是受使用者檔案系統管理的,如linux系統的ext4檔案系統,或者windows的NTFS、FAT32檔案系統等等。以linux系統為例說明:

            1)CD到可執行檔案所在的目錄,假如可執行檔案時b.elf,那執行過程是./b.elf

            2)fork一個子程序

            3)在子程序中execve("b.elf")。其做的工作就是通過ext4檔案的fsopen函式找到a.elf這個檔案,然後解釋其ELF格式,在建立好頁表後,將code段和data段搬到記憶體,初始化bss段,最後跳到entry所在的地方。

         這種載入過程是線上載入。

        3. 還存在一種這樣的嵌入式系統架構,SOC的計算能力比較弱,但記憶體資源在百K級別,其能支援簡單的作業系統,例如UCOS,而其一般沒有外掛SDRAM,但其會將程式碼存放在外接的儲存裝置中,如nand和card,MP3、U盤就是這種嵌入式系統架構的最典型應用。MP3一般支援音樂、圖片、電子書等等應用,程式碼量比較大,不適宜放到內建flash中,所以放到外接儲存中。其成本敏感,記憶體要控制到最小,所以很多時候要對韌體進行優化。那麼它的應用程式的載入過程如何呢?

          1)應用程式編譯、連結之後生成可執行檔案,可執行檔案格式一般比較複雜。通過二進位制工具將code、data和entry、bss等資訊重新組成一個簡單的檔案,這樣作業系統在載入這個檔案的時候由於格式簡單,可以用較少的記憶體和較少的計算就可以完成。這個簡單的檔案會和OS一塊放到系統區,即不是放到一般檔案系統所管理的使用者資料區。當然,在系統區也有檔案系統管理,但這個檔案系統往往是自定義的最簡單的檔案系統(詳見SoC嵌入式軟體架構設計之七:嵌入式檔案系統設計),而不是ext4,fat這些檔案系統。

          2)當需要執行某個應用時,通過系統區的簡單檔案系統找到這個檔案,並進行簡單的解釋,將code和d

ata搬到記憶體中,初始化bss後即跳到entry執行。

          可以看到,這種載入方式綜合了前面兩種方式,其最大地節省記憶體和計算能力,最大地節省成本。