常見的嵌入式程序加載方式

1、大型的嵌入式系統(ARM + Linux架構爲例)

類似於電腦程序,手機APP的加載方式,稍微大型的嵌入式系統(Linux),應用程序經過編譯、連接之後,形成一個類似於exe、apk的可執行文件,將這個執行文件放置到文件系統中的固定路徑下。以Linux爲例,常用文件系統ext3、ext4等等,文件系統根目錄下有許多文件夾(可理解爲C盤,D盤),如bin、root、usr、opt等。

進入存放被執行文件的路徑,使用./XXX命令,執行該XXX程序。如果需要開機就執行、該程序,則需要將該可執行文件啓動,加載到開機啓動項內。

 

TIPS:如使用execve命令執行該程序,通過ext4文件的fsopen函數找到XXX這個文件,然後解釋其ELF格式,在創建好頁表後,將code段和data段搬到內存,初始化bss段,最後跳到entry所在的地方。

 

2、小型的嵌入式程序(51爲例)

應用程序在編譯、鏈接之後,會通過二進制工具分析可執行文件的格式,抽出code和data段數據,生成.HEX格式或者.BIN格式,下載到SOC內置的flash中。在上電之後就直接執行了。

 

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

1)應用程序編譯、鏈接之後生成可執行文件,可執行文件格式一般比較複雜。通過二進制工具將code、data和entry、bss等信息重新組成一個簡單的文件,這樣操作系統在加載這個文件的時候由於格式簡單,可以用較少的內存和較少的計算就可以完成。這個簡單的文件會和OS一塊放到系統區,即不是放到一般文件系統所管理的用戶數據區。當然,在系統區也有文件系統管理,但這個文件系統往往是自定義的最簡單的文件系統(自己設計一個簡單文件系統),而不是ext4,fat這些文件系統。

 

2)當需要運行某個應用時,通過系統區的簡單文件系統找到這個文件,並進行簡單的解釋,將code和data搬到內存中,初始化bss後即跳到entry執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章