日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

uboot Stage1閱讀的一些心得

系統 1936 0

?

?

感覺一定要理解一些基本的概念,然后在看懂匯編的基礎上,再分析uboot的流程。

1.關于匯編的語法

這里有兩套匯編的語法:分為ARM公司的標準ARM匯編語言和GNU對ARM支持的GNU ARM匯編。ARM標準匯編語言即ARM公司的開發工具ADS里用的匯編語言;GNU匯編即在LINUX下用GCC編譯的匯編。兩者語法有少許差異。因此,通常我們下載的LINUX下的ARM接口代碼放到ADS下是不能編譯通過的,需要進行少許修改。

GNU AS語法即AT&T匯編語法,uboot用到的語法。

2.標簽的含義

?

    .globl _start

_start:	b       reset
  
?

標簽就是在某行程序代碼前作一個標記,標簽代表的是這行代碼的地址。

?

    .globl _armboot_start

_armboot_start:
	
.word _start
  
?

.word expression就是在當前位置放一個word型的值,這個值就是expression ,此處的含義就是建立一個全局標簽_armboot_start,在這個位置上放置_start的值(可以這樣理解,_armboot_start是一個地址,這個地址中的內容是_start),則下面的語句會把地址_armboot_start處的內容(_start)裝載到r2中。

?

    ldr	r2, _armboot_start
  
?

這樣做的目的是因為LDR指令的格式為:LDR{條件} ? ?Rd, <地址>。

3..word 0x0badc0de

含義:保留一個字,初始化一下。實際的值應該在運行時計算出來。(badcode嗎,呵呵)。

4.關于判斷是否拷貝到ram

如果是debug下,uboot直接運行在ram中,從而得到的_start值和TEXT_BASE是相等的,不需要拷貝。如果從flash啟動,_start為0x0,TEXT_BASE是sdram的地址,二者是不相等的,需要拷貝。(TQ2440的SDRAM為64M,bank6,地址空間為0x30000000-0x34000000,TEXT_BASE設置為0x33D000000,即0x33D00000-0x34000000為uboot使用的空間+bss和其他的空間)。

見映射圖

uboot Stage1閱讀的一些心得

5.匯編中調用c函數

遵循ATPCS(ARM-THUMB procedure call standard)標準。

?

uboot Stage1閱讀的一些心得


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 海丰县| 青铜峡市| 琼中| 莱西市| 巨鹿县| 永城市| 广州市| 保康县| 柘城县| 常熟市| 塔城市| 普格县| 连平县| 威信县| 揭西县| 库尔勒市| 宜良县| 郸城县| 五寨县| 岳西县| 高陵县| 金山区| 尉氏县| 温宿县| 宜川县| 屯门区| 绥中县| 万安县| 江门市| 宁津县| 平阴县| 普陀区| 伊金霍洛旗| 平武县| 镇远县| 宣城市| 南京市| 紫金县| 右玉县| 海口市| 太和县|