1. asm文件
????????asm是匯編語言源程序的擴展名,.asm文件是以asm作為擴展名的文件,是匯編語言的源程序文件。匯編語言(Assembly Language)是面向機器的程序設計語言,是利用計算機所有硬件特性并能直接控制硬件的語言。在匯編語言中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標號(Label)代替地址碼。這樣用符號代替機器語言的二進制碼,就把機器語言變成了匯編語言。
2. bin文件
????????bin文件是二進制文件,是文件格式binary的縮寫,后綴名為".bin"的文件,表式它是binary格式。通常來說,它的內容是機器代碼,匯編語言編譯后的結果。
注意:CPU執行 bin只需要將程序加載到其起始地址,即可執行。uboot和Linux kernel啟動時沒有ELF Loader,所以燒在flash上的文件只能是raw bin,即鏡像文件image
BIN文件是 raw binary 文件,這種文件只包含機器碼。
BIN文件(也叫鏡像文件)中的所有數據都是機器可以執行的指令碼、指令參數或者常量數據,不包含其它調試信息。加載到內存或者Nor FLASH等支持XIP(就地執行)的存儲器中規定好的加載地址之后直接從規定好的運行地址開始運行即可。例如單片機中燒寫的都是bin文件,以STM32為例,其片內Nor FLASH的起始地址也是代碼的加載(燒寫)地址為0x08000000。上電復位或者手動復位之后,程序計數器PC指向單片機的復位異常的中斷向量地址0x08000004的位置,單片機從復位開始運行。
3. hex文件
????????hex全稱baiIntel HEX,是可以燒寫到單片機中,被單片機執行的一種文件格式。通常用于傳輸將被存于ROM或者EPROM中的程序和數據。是由一行行符合Intel HEX文件格式的文本所構成的ASCII文本文件。大多數EPROM編程器或模擬器使用Intel HEX文件,其記錄由對應機器語言碼和/或常量數據的十六進制編碼數字組成。
4. elf文件
? ? elf是Linux的主要可執行文件格式,二進制文件。 elf文件除了機器碼外,還包含其它額外的信息,如段的加載地址,運行地址,重定位表,符號表等。
注意:?CPU執行elf程序則需要一個ELF Loader, gcc編譯出來的是elf文件,objcpy將elf文件轉換為bin文件
????????ELF文件除了機器碼外,還包含其它額外的信息,如段的加載地址,運行地址,重定位表,符號表等。
????????ELF文件相當于是對bin文件的一個包裝和解釋,不僅僅包含程序的機器碼,還包含加載地址、運行地址和調試信息等,使得運行操作系統(帶MMU的CPU運行的具有虛擬地址/內存映像功能的OS,如Linux、Windows)的機器中的ELF Loader模塊能夠根據elf頭信息創建一個新進程并加載elf文件中的機器碼到該進程的虛擬內存中去。例如在Linux系統上運行ls命令,Linux系統會在環境變量中定義了的文件夾中找到可執行文件“ls”,然后系統創建一個新的進程以及映射虛擬內存空間,然后ELF Loader會將可執行文件“ls”加載到虛擬內存空間中去并開始執行開進程。(注意,虛擬地址空間也物理地址空間的尋址空間是一樣的,32位CPU的有4G的尋址空間,64位的有好多G的尋址空間,但是并不是所有虛擬地址空間中的地址都能訪問,MMU只會映射一部分虛擬地址空間到物理地址空間,如果訪問沒有映射的虛擬地址空間,就會出現內存訪問錯誤Segmentation Fault)
所以ELF文件的體積比對應的BIN文件要大。
因為elf文件中包含了bin文件內容外的其它信息。