類似于電腦程序,手機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執行。
來源:電子創新網
審核編輯黃昊宇
-
嵌入式
+關注
關注
5082文章
19105瀏覽量
304829
發布評論請先 登錄
相關推薦
評論