啟動檔案
.global _start /* 全域性標號 */
/* * 描述: _start函式,程式從此函式開始執行,此函式主要功能是設定c
* 執行環境。
*/_start:
/* 進入svc模式 */
mrs r0, cpsr
bic r0, r0, #0x1f
/* 將r0暫存器中的低5位清零,也就是cpsr的m0~m4 */
orr r0, r0, #0x13
/* r0或上0x13,表示使用svc模式 */
msr cpsr, r0 /* 將r0 的資料寫入到cpsr_c中 */
/*清除bss段*/
ldr r0,_bss_start
ldr r1, _bss_end
mov r2, #0
bss_loop:
stmia r0!
,/*比較r0和r1裡面的值* /
cmp r0, r1 /*如果r0位址小於等於r1,繼續清除bss段*/
ble bss_loop
/* 設定棧指標,
* 注意:imx6ul的堆疊是向下增長的!
* 堆疊指標位址一定要是4位元組位址對齊的!!!
* ddr範圍:0x80000000~0x9fffffff
*/ldr sp,
=0x80200000
/* 設定使用者模式下的棧首位址為0x80200000,大小為2mb */
b main /* 跳轉到main函式 */
鏈結檔案
sections
.rodata align(4
):.data align(4
):/* 由於imx6ull是32位soc,在處理資料的時候都是4位元組進行訪問
因此bss段起始位址要是能被4整除的位址,如果不是的話會出現不能訪問的現象。
*/.=align(4
);__bss_start =.;
.bss align(4
):__bss_end =.;
}
IMX6ULL學習筆記(一)
imx6ull裸機開發學習 以下內容是我在學習正點原子imx6ull開發板alpha中記錄的筆記,部分摘錄自正點原子imx6ull開發手冊。bin檔案前面要新增頭部 ivt boot data dcd資料 由官方手冊可知要燒寫到sd卡中的load.imx檔案在sd卡中的起始位址是0x400,也就是1...
IMX6ULL學習筆記(三)
imx6ull裸機開發學習 以下內容是我在學習正點原子imx6ull開發板alpha中記錄的筆記,部分摘錄自正點原子imx6ull開發手冊。鏈結指令碼的例子 sections rodata align 4 data align 4 bss start bss align 4 bss end bss ...
IMX6ULL學習筆記(六)
imx6ull裸機開發學習 以下內容是我在學習正點原子imx6ull開發板alpha中記錄的筆記,部分摘錄自正點原子imx6ull開發手冊。首先使用預設配置檔案,編譯下測試linux能否在板子上執行。配置檔案所在路徑arch arm configs imx v7 mfg defconfig 通過修改...