娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

u-boot 移植 --->7、u-bootl流程粗線條梳理

發布者:HarmonyInLife最新更新時間:2024-12-23 來源: cnblogs關鍵字:u-boot  移植  流程 手機看文章 掃描二維碼
隨時隨地手機看文章

 通過前面的調試了解到s5pv210這個芯片的啟動流程是需要將u-boot分為兩部分的分別為SPL和u-boot。這里我使用網上的方式不直接使用u-boot的SPL連接腳本單獨生成SPL的image而是用前面介紹的方法 [https://www.cnblogs.com/w-smile/p/13124631.html](u-boot 移植 --->3、S5PV210啟動序列)將u-boot的前16k直接截取出來作為SPL。

IROM中

這一部分可以參考其他博文,或者三星的文檔。

在IRAM中

通過啟動連接腳本archarmcpuu-boot.lds 我們找到了整個代碼的入口_start。全局尋找找到文件archarmlibvectors.S符合本次架構所以整個代碼入口就在這里內容如下:


_start:


#ifdef CONFIG_SYS_DV_NOR_BOOT_CFG

.word CONFIG_SYS_DV_NOR_BOOT_CFG

#endif


b reset

ldr pc, _undefined_instruction

ldr pc, _software_interrupt

ldr pc, _prefetch_abort

ldr pc, _data_abort

ldr pc, _not_used

ldr pc, _irq

ldr pc, _fiq

所以可以看出來這里也是符合ARM架構要求,在這里定義了中斷向量表,然后第一句指令是一個跳轉指令,將執行流跳轉到reset符號了,經過查找這個符號定義在archarmcpuarmv7start.S 這是架構通用的部分所以可以參考u-boot源碼這里僅羅列這段程序操作的內容:

1. 檢查是否使能了大物理頁面擴展,如果使能了則進行必要的配置。(CP15)

2. 禁止IRQ和FIQ,配置處理器模式為SVC。(CPSR)

3. 設置_start 符號地址為異常向量表基址,并禁止cache,TLB,BP,MMU(CP15)

4. 調用lowlevel_init(如果定義了CONFIG_SKIP_LOWLEVEL_INIT_ONLY則不執行),這一部分就是芯片移植人員需要早期初始化的內容可以放在這個標號下實現,我這里就是配置時鐘,配置芯片DRAM接口,配置UART0。

5. 設置堆棧為IRAM空間,并拷貝SD卡中特定地址的完整u-boot鏡像到DRAM指定地址,SD的驅動實在芯片的IROM中完成的。(這一部分是本來的u-boot內容沒有的因為我們未使用u-boot的SPL方式單獨構建SPL程序所以修改了這部分內容)。


DRAM中


完成上面的操作后進行絕對跳轉就能到DRAM地址空間繼續運行代碼了,因為代碼本身就是連接在這個地址的。跳轉后運行_main 符號處的指令他實現在rcharmlibcrt0.S 中操作序列大致如下:

1. 重新修改棧基址到DRAM地址空間中

2. 調整棧指針 (實際則是在棧中分配內存)這里是為malloc和struct global_data 的GD變量預留內存

3. 初始化 GD變量的部分成員,這是整個u-boot的一個重要的全局數據用來記錄各種數據狀態等。


執行了以上的處理步驟后將又可以使用C代碼調用了。然后調用board_init_f 這是在commonboard_f.c 中實現的屬于u-boot的內容的代碼,主要就是圍繞GD變量進行操作詳細的操作這里不深入分析,就是進行一些配置初始化相關的主要就是調用initcall_run_list 這個函數依次執行一個初始化list進行初始化,這個初始化函數數組init_sequence_f也是在commonboard_f.c 中定義并根據u-boot的使用kbuild配置產生的配置文件編譯生成。其中大部分初始化函數都是平臺無關的少量與平臺相關需要注意對應修改下,除此之外需要注意的是在這里執行board_init_f 相關調用時有打開cache。這里執行完成后GD變量的成員也越來越完善,再次根據GD中記錄的信息修改SP棧指針。然后還需要再次移動并重定位代碼,這一次移動是為了為了將u-boot放到DRAM高地址為拷貝Linux內核image準備空間,拷貝完成后無效指令和數據cache(因為原來地址空間的緩存已經無效了)。這里還使用了一個技巧使拷貝完成后直接返回到新地址的下一條指令執行。使用的方式就是在LR寄存器上做文章,具體參考代碼實現。然后在次修改異常向量表地址到新的地址空間。注意的是這里代碼重定向還是比較復雜一點的不是簡單的拷貝,因為前面的GD變量也是需要維護的,主要就是然后對新地址的數據段的拷貝。然后就是調用commonboard_r.c 文件中的board_init_r 函數,這個函數的實現和board_init_f 如出一轍他們末尾的字母就是標記他們調用的配置是在重定向前(f)和之后(r)執行的初始化。最后執行的就是 run_main_loop這里就是u-boot程序的主循環,在這里進行u-boot命令等相關功能的操作。


總結

u-boot的整個執行過程的粗流程其實是不復雜的,調試過程最復雜的感覺就是DRAM的配置那些部分。整個移植實際上出去kbuild配置工具外就是,一部分關于底層的初始化配置相關內容,其余就是u-boot的大致執行流程。流程我在做一下梳理總結如下:

_start(archarmlibvectors.S)向量表,然后跳轉(reset)--->archarmcpuarmv7start.SARM 架構相關的操作,調用(lowlevel_init)---> 平臺相關的底層或前提初始化部分的必要配置,調用(_main)--->archarmlibcrt0.S 進行u-boot相關功能的變量,棧等部分的維護初始化等,調用(board_init_f)--->commonboard_f.c 根據配置調用以系列的初始化調用,返回crt0.S,重定位u-boot代碼在DRAM中的位置,調用(board_init_f)--->commonboard_r.c 繼續進行必要的初始化--->u-boot loop(如果引導Linux則u-boot就執行完了)。如果像知道更詳細的內容可以參考這個博主的博客:https://to-run-away.blog.csdn.net/article/details/81711413?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.control


關鍵字:u-boot  移植  流程 引用地址:u-boot 移植 --->7、u-bootl流程粗線條梳理

上一篇:ARM匯編指令-STMFD/LDMFD
下一篇:u-boot 移植 --->5、友善之臂Tiny210底板王網卡驅動移植

推薦閱讀最新更新時間:2025-05-04 10:17

u-boot 移植 --->2、在u-boot新增SOC和板子
本次主要是要新增一個samsung的芯片到u-boot中,網上查閱資料發現s5pc1xx是與手上的S5PV210的友善的Tiny版子寄存器兼容的比較多,所以就準備以他為基礎增加一個我的板子的支持到u-boot中。 step1 拷貝archarm目錄下的mach-s5pc1xx目錄修改名稱為mach-s5pv210,注意這里的mach-xxx后面的xxx的命令是和Kconfig文件一會的修改相關的。 step2 在archarmKconfig 文件中增加新的芯片這里參考s5pc1xx的內容 。 。 。 config ARCH_S5PC1XX bool Samsung S5PC1XX select CPU_V7 sele
[單片機]
u-boot移植總結(一)start.S分析
本次移植u-boot-2010.09是基于S3C2440的FL440板子,板子自帶NANDFLASH而沒有NORFLASH,所以在U-BOOT啟動的過程中必須實現從NANDFLASH到SDRAM的重定向。 其中最重要的就是在U-BOOT開始的start.S匯編代碼,這段代碼要完成工作: 1,異常中斷向量表,復位后異常向量處理 2, 跳轉到代碼實際執行處start_code 3,關閉看門狗WATCHDOG 3,關閉所有中斷INTERRUPT 4,設置時鐘分頻,主要設置寄存器CLKDVN,MPLLCON,UPLLCON 5,關閉MMU和CACHE,并調用lowlevel_init.S完成SDRAM和NAND
[單片機]
<font color='red'>u-boot</font><font color='red'>移植</font>總結(一)start.S分析
u-boot移植(七)---代碼修改---存儲控制器
一、CPU訪問芯片的條件      CPU通過訪問存儲控制器,來讀取外部設備的數據。   CPU想訪問一個芯片,需要如下條件(配置信息): 地址線 數據線:8位/16位/32位數據寬度 時鐘/頻率  其他芯片相關的特性:比如SDRAM,有行地址、列地址和bank   SDRAM的訪問和表格檢索的原理一樣,先指定一個行(Row),再指定一個列(Columu),就可以準確找到所需要的單元格。這個單元格稱為存儲單元,這個表格(存儲陣列)就是邏輯Bank(Logical Bank,即L-Bank),SDRAM一般含有4個L-bank。        只有配置好了存儲管理器,才知道如何去訪問外部的設備。 二、存儲控制器
[單片機]
<font color='red'>u-boot</font><font color='red'>移植</font>(七)---代碼修改---存儲控制器
U-Boot在FL2440上移植(一)----修改系統時鐘
一 U-boot源碼結構 圖片來自韋東山的《嵌入式linux應用開發完全手冊》 U-boot下載地址: ftp://ftp.denx.de/pub/u-boot/ 交叉編譯工具鏈 3.3.2 二 U-boot移植 1.新建一個fl2440開發板目錄和文件 ①在board目錄下新建fl2440目錄,講smdk2410目錄下的文件復制到fl2440目錄下,并將board/fl2440/smdk2410.c重命名為fl2440.c ②修改u-boot-1.1.6目錄下Makefile文件 smdk2410_config : unconfig @$(MKCONFIG) $(@:_config
[單片機]
<font color='red'>U-Boot</font>在FL2440上<font color='red'>移植</font>(一)----修改系統時鐘
基于S3C2410開發板的U-BOOT移植解決方案
引言 隨著嵌入式系統的日趨復雜,它對大容量數據存儲的需求越來越緊迫。而嵌入式設備低功耗、小體積以及低成本的要求,使硬盤無法得到廣泛的應用。NAND閃存設備就是為了滿足這種需求而迅速發展起來的。目前關于U-BOOT的移植解決方案主要面向的是微處理器中的NOR 閃存,如果能在微處理器上的NAND 閃存中實現U-BOOT的啟動,則會給實際應用帶來極大的方便。 U-BOOT簡介 U-BOOT 支持ARM、 PowerPC等多種架構的處理器,也支持Linux、NetBSD和VxWorks等多種操作系統,主要用來開發嵌入式系統初始化代碼bootloader。bootloader是芯片復位后進入操作系統之前執行的一段代碼,完成由硬件啟動到操
[單片機]
基于S3C2410開發板的<font color='red'>U-BOOT</font><font color='red'>移植</font>解決方案
u-boot在s3c2410開發板上移植過程
1)u-boot版本1.1.3,gcc version 3.3.3 (DENX ELDK 3.1.1 3.3.3-9) 2)在Makefile中加入 bks2410_config : unconfig @./mkconfig $(@:_config=) arm arm920t bks2410 NULL s3c24x0 我把我的板子起名叫bks2410,可以依自己的喜好修改 3)建立board/bks2410目錄,拷貝board/smdk2410下的文件到board/bks2410目錄,將smdk2410.c更名為bks2410.c 4)cp include/configs/smdk2410.h include/configs/
[單片機]
OK6410A 開發板 (三) 25 u-boot-2021.01 boot 解析 U-boot 內存命令 md
md.b $address $count (從地址$address處顯示$count個字節的數據 b=byte,字節,8位) md.w $address $count (從地址$address處顯示$count個字的數據 w=word,字 ,16位) md.l $address $count (從地址$address處顯示$count個雙字的數據 l=long,雙字,32位) 內存里的數據 = tftp 51000000 2led_c.bin dm9000 i/o: 0x18000300, id: 0x90000a46 DM9000: running in 16 bit mode MAC: 76:c5:cb:38
[單片機]
u-boot添加yaffs2燒寫功能代碼分析
最近在學習MINI2440的u-boot移植,在添加yaffs2文件系統燒寫這一功能時,網上找到的說明文檔都比較籠統,都是給出代碼的修改位置。而我想了解其具體執行過程,所以在移植之前簡單分析了一下執行過程,記錄在此。 本文分析的代碼參考了一些文章以及友善之臂UBOOT移植文檔的實現,這些文章中的實現基本一致,本文不會列出完整代碼,請參考友善之臂UBOOT移植文檔或以下文章對比查看:u-boot-2009.08在mini2440上的移植--增加yaffs2文件系統 nand命令執行時調用/common/cmd_nand.c中的do_nand()函數,這里主要的改動是增加了.yaffs2命令的解析,之后執行nand_write
[單片機]
<font color='red'>u-boot</font>添加yaffs2燒寫功能代碼分析
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 平乐县| 富裕县| 井冈山市| 石柱| 托里县| 会理县| 余姚市| 广南县| 霍邱县| 芜湖市| 宜昌市| 康平县| 甘谷县| 长治县| 永城市| 米泉市| 白山市| 乐陵市| 高碑店市| 曲周县| 武山县| 镇宁| 马公市| 常熟市| 沅陵县| 永新县| 伊金霍洛旗| 富蕴县| 永登县| 根河市| 贺兰县| 巩义市| 灵寿县| 成安县| 清苑县| 银川市| 阳信县| 淅川县| 呼和浩特市| 新源县| 武陟县|