国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

《uboot教程 Exynos4412》-第3章-匯編之源碼分析

發(fā)布時(shí)間:2019-10-24 14:15    發(fā)布者:落風(fēng)

在第一章中,介紹了Exynos4412的iROM、啟動(dòng)方式、源碼組成等;在第二章中,介紹
uboot 編譯等。通過(guò)前面對(duì)編譯的詳細(xì)分析,了解到 uboot 源碼中有以下幾個(gè)文件是非常重
要的:
“cpu/ARM_cortexa9/start.S”
“board/samsung/smdkc210/lowlevel_init_SCP.S 或者 lowlevel_init_POP.S”
“include/configs/itop_4412_android.h 或者 itop_4412_ubuntu.h”
其中“cpu/arm_cortexa9/start.S”是 uboot 代碼入口文件,分析 uboot 一般是從
“start.S”文件開(kāi)始,“l(fā)owlevel_init_SCP.S”文件是內(nèi)存初始化、時(shí)鐘初始化和串口初始化
等的文件,start.S 文件在運(yùn)行過(guò)程中會(huì)跳到這個(gè)文件中。
“itop_4412_android.h 或者 itop_4412_ubuntu.h”文件是重要的配置頭文件,里面的
宏配置,會(huì)影響以上文件如何編譯和運(yùn)行,包括在下一章節(jié)中 uboot 源碼的 C 語(yǔ)言部分,很
多代碼編譯和運(yùn)行都會(huì)受到這個(gè)頭文件的影響。
本章主要內(nèi)容是,從“start.S”文件開(kāi)始分析所有匯編代碼,截止于 uboot 開(kāi)始執(zhí)行 C
代碼。其中涉及到很多不常用概念,需要我們?nèi)チ私夂驼莆眨簧婕暗絽R編語(yǔ)法,需要我們?nèi)チ?br /> 解。
3.1 分析 uboot 匯編源碼必要的知識(shí)和學(xué)習(xí)方法匯總
本小節(jié),結(jié)合 datasheet 介紹 4412 的物理地址概念,這部分和單片機(jī)中類(lèi)似;介紹匯編
語(yǔ)法如何學(xué)習(xí)以及要掌握到什么程度;匯編部分調(diào)試方法。
3.1.1 4412 的物理地址和虛擬地址介紹
如果用戶學(xué)習(xí)過(guò)迅為的 linux 驅(qū)動(dòng)教程,其中有一期,專(zhuān)門(mén)介紹物理地址和虛擬地址的概
念。幾乎在所有現(xiàn)代操作系統(tǒng)中,物理地址都是通過(guò) MMU(內(nèi)存管理單元)映射為虛擬地
址。但是在 uboot 匯編部分,還是直接操作物理地址的。
物理地址的概念。
MPU 地址總線傳來(lái)的地址,由硬件電路控制其具體含義。物理地址中很大一部分是留給
內(nèi)存條中的內(nèi)存的。物理地址空間,一部分給內(nèi)存用,一部分給總線用,這是由硬件設(shè)計(jì)來(lái)決
定的,因此在 32 bits 地址線的處理器中,物理地址空間是 2 的 32 次方,即 4GB,但物理
RAM 一般不能上到 4GB,因?yàn)檫有一部分要給總線用(總線上還掛著別的許多設(shè)備)。
對(duì)于有單片機(jī)基礎(chǔ)的用戶來(lái)說(shuō),物理地址還是比較好理解,例如在 51 單片機(jī)中,P0.0 表
示小燈的輸出寄存器,給這個(gè)寄存器寫(xiě) 1 小燈滅,寫(xiě) 0 小燈亮,寄存器 P0.0 的地址就是物理
地址。

P0 = 0xfe;//小燈亮

P0 = 0xff;//小燈滅

P0 在 51 寄存器頭文件中,有一個(gè)宏定義它的實(shí)際地址,也就是物理地址。

在 4412 中,物理地址太多了,根本沒(méi)有辦法全部介紹,2000 多頁(yè)的 datasheet 中大部
分都是介紹寄存器,一個(gè)一個(gè)介紹是無(wú)法實(shí)現(xiàn)的。但是我們有必要掌握和理解其中的寄存器框
架和典型寄存器。
在 4412datasheet 第三章“Memory Map”中,如下圖所示,這是 4412 全部基地址的描述。


注意上表中,0x4000_0000~0xA000_0000,0xA000_0000~0x0000_0000 這兩個(gè)地址
區(qū)間,這兩個(gè)區(qū)間是 DMC 內(nèi)存控制器的尋址地址,也就是內(nèi)存的物理地址。實(shí)際上 4412 最
大支持的內(nèi)存可以達(dá)到 3G,32 位處理器理論上可以支持 2 的 32 次方(最大 4G),如上表
所示,其中 1G 的地址給了 iROM、iRAM 等等這些 MPU 內(nèi)部寄存器使用,所以 32 位 MPU
是不可能達(dá)到 4G 內(nèi)存的。
現(xiàn)代操作系統(tǒng)普遍采用虛擬內(nèi)存管理(Virtual Memory Management)機(jī)制,這需要
MMU(Memory Management Unit)的支持。MMU 通常是 CPU 的一部分,如果處理器
沒(méi)有 MMU,或者有 MMU 但沒(méi)有啟用,CPU 執(zhí)行單元發(fā)出的內(nèi)存地址將直接傳到芯片引腳
上,被內(nèi)存芯片(物理內(nèi)存)接收,這稱(chēng)為物理地址(Physical Address),如果處理器啟用
了 MMU,CPU 執(zhí)行單元發(fā)出的內(nèi)存地址將被 MMU 截獲,從 CPU 到 MMU 的地址稱(chēng)為虛擬
地址(Virtual Address),而 MMU 將這個(gè)地址翻譯成另一個(gè)地址發(fā)到 CPU 芯片的外部地址
引腳上,也就是將虛擬地址映射成物理地址。通過(guò)內(nèi)存管理單元,可以實(shí)現(xiàn) 4G 的虛擬內(nèi)存。
在 uboot 代碼中,需要多次用到以上地址的概念,其中內(nèi)存管理單元被開(kāi)啟或者關(guān)閉,
所以有必要先介紹一下這幾個(gè)地址的概念。
3.1.2 關(guān)于匯編語(yǔ)法
如果學(xué)習(xí)過(guò)單片機(jī)課程,會(huì)發(fā)現(xiàn)大部分都是使用 C 語(yǔ)言去編碼,匯編使用的非常少了。
那么還有必要去學(xué)習(xí)匯編么?其實(shí)是沒(méi)有必要的,因?yàn)樵?uboot 中匯編代碼量非常少,以
4412 的 uboot 源碼為例,其中有效的匯編代碼不足 200 行,我們根本不需要為了讀懂 200
行代碼專(zhuān)門(mén)去學(xué)習(xí)一門(mén)編程語(yǔ)言。
作者這里建議,首先我們的目標(biāo)是一定要把這些代碼讀明白,如果不明白會(huì)影響后面 C
代碼的閱讀,以及 uboot 的移植;其次,我們要弄清楚每一行有效匯編代碼的語(yǔ)法。
現(xiàn)在我們已經(jīng)知道匯編是從“cpu/arm_cortexa9/start.S”這個(gè)文件開(kāi)始執(zhí)行,那么我們
就從第一行代碼的語(yǔ)法開(kāi)始學(xué)習(xí),代碼執(zhí)行到或者跳到哪一行,我們就學(xué)習(xí)這一行代碼的語(yǔ)
法。
在手冊(cè)的附錄部分,我們會(huì)依次介紹匯編代碼中出現(xiàn)的語(yǔ)法,大家也可以通過(guò)互聯(lián)網(wǎng)學(xué)習(xí)
每一行執(zhí)行的匯編語(yǔ)法。
3.1.3 uboot 匯編代碼初始化串口之前的簡(jiǎn)易調(diào)試方法
在前面教程中我們介紹過(guò),從 A9 開(kāi)始,開(kāi)發(fā)板一般都不配 jtag,jtag 價(jià)格昂貴,在 A9
之前,由于引導(dǎo)程序 uboot 必須通過(guò) jtag 來(lái)燒寫(xiě),但是在 A9 處理器上,大部分都是支持 tf
卡引導(dǎo),這樣可以免去 jtag 的費(fèi)用,燒寫(xiě)變的簡(jiǎn)單高效。
那么沒(méi)有 jtag,對(duì)于 uboot 的調(diào)試,我們沒(méi)法單步調(diào)試,如果有一行代碼我們不是很確
定到底執(zhí)行了沒(méi),或者跳到哪一行。如果代碼已經(jīng)執(zhí)行到串口初始化階段,當(dāng)然是可以通過(guò)串
口打印字符來(lái)實(shí)現(xiàn),在串口初始化之前,其實(shí)可以通過(guò)控制 LED 燈來(lái)跟蹤代碼。
以下是開(kāi)發(fā)板上兩個(gè)小燈控制的代碼,可以將小燈點(diǎn)亮。
點(diǎn)亮 LED2 燈:ldr r0, =0x11000104 /* GPL2(0) */
ldr r1, =0x00000001 /* GPL2(0 output high) */
str r1, [r0]
ldr r0, =0x11000100 /* GPL2(0) */
ldr r1, =0x00000001 /* GPL2(0 output high) */
str r1, [r0]
點(diǎn)亮 LED3:
ldr r0, =0x11000060
ldr r1, =0x00000010
str r1, [r0]
ldr r0, =0x11000064
ldr r1, =0x00000002
str r1, [r0]
這里簡(jiǎn)單介紹下這幾行匯編代碼的含義。
ldr r0, =0x11000104
ldr 是將 0x11000104 值賦給 r0 寄存器。這個(gè)值地址為 GPL2DAT。
ldr r1, =0x00000001
ldr 是取 0x11000104 地址的值賦給 r1 寄存器。
str r1, [r0]
str 是將 r1 的值寫(xiě)入到 r0 數(shù)值對(duì)應(yīng)物理地址寄存器中。將 0x00000001 寫(xiě)入到
0x11000104 地址寄存器中,0x11000104 地址是 GPL2DAT 寄存器。
ldr r0, =0x11000100 /* GPL2(0) */
ldr r1, =0x00000001 /* GPL2(0 output high) */
str r1, [r0]
將 0x00000001 寫(xiě)入到 0x11000100 地址寄存器中,0x11000100 地址是 GPL2CON 寄
存器。執(zhí)行這兩步就可以將 LED2 點(diǎn)亮。
點(diǎn)亮 LED3 和點(diǎn)亮 LED2 類(lèi)似。
在串口初始化之前可以通過(guò)點(diǎn)燈來(lái)實(shí)現(xiàn)調(diào)試,串口初始化之后可以通過(guò)打印字符來(lái)跟蹤調(diào)
試代碼。


本文地址:http://m.qingdxww.cn/thread-570115-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專(zhuān)區(qū)
  • 利用SAM E54 Xplained Pro評(píng)估工具包演示CAN轉(zhuǎn)USB橋接器以及基于CAN的主機(jī)和自舉程序應(yīng)用程序
  • 使用SAM-IoT Wx v2開(kāi)發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開(kāi)發(fā)培訓(xùn)教程
  • 集成高級(jí)模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 貿(mào)澤電子(Mouser)專(zhuān)區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区四区在线 | 在线观看亚洲人成网站 | 亚洲欧美日韩中文综合v日本 | h国产在线观看 | 久草资源视频 | 手机在线免费不卡一区二 | 日本天堂影院在线播放 | 韩国一级成a人片在线观看 韩国一级a毛片 | 成人在线亚洲 | 最新自拍偷拍 | 插吧网| 日本免费在线观看 | 色在线视频网站 | 欧美日韩国产在线人 | 韩剧初恋裴勇俊国语全集在线播放 | 好好的曰www视频在线观看 | 东台人才招聘网最新招聘2023 | 毛片三级在线观看 | 日韩男女视频 | 99精品久久99久久久久久 | 全部在线播放免费毛片 | 日本高清不卡网站免费 | 成人一级 | 88av导航 | 日本黄色高清视频网站 | 国产成人综合在线观看网站 | 奇米精品一区二区三区在 | 国产色婷婷亚洲 | 玖玖玖精品视频免费播放 | 国产资源精品一区二区免费 | 天堂网在线观看在线观看精品 | 国产亚洲精品一品区99热 | 天天曰天天 | 八戒八戒看片在线观看网 | 一级毛片免费在线播放 | 久久1024| 中文字幕日韩在线观看 | 国产免费自拍视频 | 亚洲国产一区在线观看 | 国内亚州视频在线观看 | 日本高清在线中文字幕网 |