日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

TI Sitara AM335x系统之AM335x uboot spl分析

發(fā)布時間:2023/12/10 windows 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TI Sitara AM335x系统之AM335x uboot spl分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本文轉(zhuǎn)載自nidetech的Blog

芯片到uboot啟動流程 ? ? ROM → SPL→ uboot.img 簡介 ? ? 在335x 中ROM code是第一級的bootlader。mpu上電后將會自動執(zhí)行這里的代碼,完成部分初始化和引導(dǎo)第二級的bootlader,第二級的bootlader引導(dǎo)第三級bootader,在ti官方上對于第二級和第三級的bootlader由uboot提供。 SPL ? ? To unify all existing implementations for a secondary program loader (SPL) and to allow simply adding of new implementations this generic SPL framework has been created. With this framework almost all source files for a board can be reused. No code duplication or symlinking is necessary anymore. ? ? 1> Basic ARM initialization ? ? 2> UART console initialization ? ? 3> Clocks and DPLL locking (minimal) ? ? 4> SDRAM initialization ? ? 5> Mux (minimal) ? ? 6> BootDevice initialization(based on where we are booting from.MMC1/MMC2/Nand/Onenand) ? ? 7> Bootloading real u-boot from the BootDevice and passing control to it. ? ??? uboot spl源代碼分析 ? ? 一、makefile分析 ? ? 打開spl文件夾只有一個makefile 可見spl都是復(fù)用uboot原先的代碼。 ? ? 主要涉及的代碼文件為u-boot-2011.09-psp04.06.00.03/arch/arm/cpu/armv7 ? ?? ?? ?? ?? ?? ?? ?u-boot-2011.09-psp04.06.00.03/arch/arm/lib ? ?? ?? ?? ?? ?? ?? ?u-boot-2011.09-psp04.06.00.03/drivers ? ? LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-spl.lds ? ? 這個為鏈接腳本 二、u-boot-spl.lds
Sram?0x402F0400 Sdram?0x80000000
? .bss
.TEXT (arch/arm/cpu/armv7/start.o) ?
.rodata ?
.data ?

__start 為程序開始 __image_copy_end _end 三、代碼解析 ? ? __start 為程序開始 (arch/arm/cpu/armv7/start.S) ? ? .globl _start??這是在定義u-boot的啟動定義入口點,匯編程序的缺省入口是?start標號,用戶也可以在連接腳本文件中用ENTRY標志指明其它入口點。 .global是GNU ARM匯編的一個偽操作,聲明一個符號可被其他文檔引用,相當于聲明了一個全局變量,.globl和.global相同。該部分為處理器的異常處理向量表。地址范圍為0x0000 0000 ~ 0x0000 0020,剛好8條指令。 為什么是8條指令呢?這里來算一算。首先,一條arm指令32bit(位),0x0000 0020換算成十進制為2^5=32B(字節(jié)),而32(B) = 4 * 8(B) = 4 * 8 * 8( bit),所以剛好8條指令(一個字節(jié)Byte包含8個位bit)。 ? ??下面是在匯編程序種經(jīng)常會遇到的異常向量表。Arm處理器一般包括復(fù)位、未定義指令、SWI、預(yù)取終止、數(shù)據(jù)終止、IRQFIQ等異常,其中U-Boot中關(guān)于異常向量的定義如下: _start:? ?b? ?? ? reset? ? _start?標號表明?oot程序從這里開始執(zhí)行。 b是不帶返回的跳轉(zhuǎn)(bl是帶返回的跳轉(zhuǎn)),意思是無條件直接跳轉(zhuǎn)到reset標號出執(zhí)行程序。b是最簡單的分支,一旦遇到一個?b指令,ARM?處理器將立即跳轉(zhuǎn)到給定的地址,從那里繼續(xù)執(zhí)行。注意存儲在分支指令中的實際的值是相對當前的?R15?的值的一個偏移量;而不是一個絕對地址。它的值由匯編器來計算,它是?24?位有符號數(shù),左移兩位后有符號擴展為?32?位,表示的有效偏移為?26?位。 ? ?? ? ldr??pc, _undefined_instr tion? ?//未定義指令 ? ?? ? ldr??pc, _software_interrupt? ?//軟中斷SWI ? ?? ? ldr??pc, _prefetch_abort? ?//預(yù)取終止 ? ?? ? ldr??pc, _data_abort??//數(shù)訪問終止 ? ?? ? ldr??pc, _not_used ? ?? ? ldr??pc, _irq? ? //中斷請求IRQ ? ?? ? ldr??pc, _fiq? ? //快速中斷FIQ #ifdef CONFIG_SPL_BUILD??//該階段為spl執(zhí)行下面代碼 _undefined_instruction: .word _undefined_instruction _software_interrupt: .word _software_interrupt _prefetch_abort:??.word _prefetch_abort _data_abort:? ?? ?.word _data_abort _not_used:? ? .word _not_used _irq:? ?? ?? ?.word _irq _fiq:? ?? ?? ?.word _fiq _pad:? ?? ?? ?.word 0x12345678 /* now 16*4=64 */ #else _undefined_instruction: .word undefined_instruction _software_interrupt: .word software_interrupt _prefetch_abort:??.word prefetch_abort _data_abort:? ?? ?.word data_abort _not_used:? ? .word not_used _irq:? ?? ?? ?.word irq _fiq:? ?? ?? ?.word fiq _pad:? ?? ?? ?.word 0x12345678 /* now 16*4=64 */ #endif /* CONFIG_SPL_BUILD */ .wordARM匯編特有的偽操作符,語法如下: .word {,} … 作用:插入一個32-bit的數(shù)據(jù)隊列。(與armasm中的DCD功能相同) .balignl 16,0xdeadbeef .align偽操作用于表示對齊方式:通過添加填充字節(jié)使當前位置滿足一定的對齊方式。 接下來是對各個段代碼的定義 略 Rest?(arch/arm/cpu/armv7/start.S) ? ? bl??save_boot_params ? ? save_boot_params:?arch/arm/cpu/armv7/ti81xx/lowlevel_init.S#ifdef CONFIG_SPL_BUILD ? ? ldr r4, =ti81xx_boot_device? ?? ?? ?? ? ? ?? ? //ti81xx_boot_device = BOOT_DEVICE_NAND ? ?? ? //啟動方式 ? ? ldr r5, [r0, #BOOT_DEVICE_OFFSET] ? ? and r5, r5, #BOOT_DEVICE_MASK ? ? str r5, [r4] #endif ? ? bx??lr 回到reset(arch/arm/cpu/armv7/start.S)? ? ? ? //設(shè)置cpu的工作模式?設(shè)置CPU的狀態(tài)類型為SVC特權(quán)模式 ? ? mrs r0, cpsr ? ? bic r0, r0, #0x1f ? ? orr r0, r0, #0xd3 ? ? msr cpsr,r0 cpu_init_crit: (arch/arm/cpu/armv7/start.S) ? ? mov r0, #0? ?? ???@ set up for MCR ? ? mcr p15, 0, r0, c8, c7, 0? ? @ invalidate TLBs ? ? mcr p15, 0, r0, c7, c5, 0? ? @ invalidate icache ? ? mcr p15, 0, r0, c7, c5, 6? ? @ invalidate BP array ? ? mcr? ???p15, 0, r0, c7, c10, 4??@ DSB ? ? mcr? ???p15, 0, r0, c7, c5, 4? ?@ ISB //關(guān)閉mmu?緩存 ? ? mrc p15, 0, r0, c1, c0, 0 ? ? bic r0, r0, #0x00002000??@ clear bits 13 (--V-) ? ? bic r0, r0, #0x00000007??@ clear bits 2:0 (-CAM) ? ? orr r0, r0, #0x00000002??@ set bit 1 (--A-) Align ? ? orr r0, r0, #0x00000800??@ set bit 11 (Z---) BTB #ifdef CONFIG_SYS_ICACHE_OFF ? ? bic r0, r0, #0x00001000??@ clear bit 12 (I) I-cache #else ? ? orr r0, r0, #0x00001000??@ set bit 12 (I) I-cache #endif ? ? mcr p15, 0, r0, c1, c0, 0 //調(diào)用初始化?函數(shù) ? ? mov ip, lr? ?? ???@ persevere link reg across call ? ? bl??lowlevel_init? ???@ go setup pll,mux,memory ? ? lowlevel_init:(arch/arm/cpu/armv7/ti81xx/lowlevel.S? ? /* The link register is saved in ip by start.S */ ? ? mov r6, ip ? ? /* check if we are already running from RAM */ ? ? ldr r2, _lowlevel_init ? ??? ?_TEXT_BASE: ? ?? ?? ?.word CONFIG_SYS_TEXT_BASE??/* Load address (RAM) */ ? ?? ?? ?? ?#define CONFIG_SYS_TEXT_BASE? ?? ?0x80800000 ? ?? ?? ?? ?SDRAM的前8MB作為splbss段然后前64bytes做為u-boot.img的頭 ? ? ldr r3, _TEXT_BASE ? ? sub r4, r2, r3 ? ? sub r0, pc, r4 ? ? //設(shè)置堆棧指針 ? ? /* require dummy instr or subtract pc by 4 instead i''m doing stack init */ ? ? ldr sp, SRAM_STACK mark1: ? ? ldr r5, _mark1 ? ? sub r5, r5, r2 /* bytes between mark1 and lowlevel_init */ ? ? sub r0, r0, r5 /* r0 <- _start w.r.t current place of execution */ ? ? mov r10, #0x0 /* r10 has in_ddr used by s_init() */ ? ? ands r0, r0, #0xC0000000 /* MSB 2 bits <> 0 then we are in ocmc or DDR */ ? ? cmp r0, #0x80000000 ? ? bne s_init_start ? ? mov r10, #0x01 ? ? b s_init_start s_init_start:arch/arm/cpu/armv7/ti81xx/lowlevel.S? ? mov r0, r10 /* passing in_ddr in r0 */ ? ? bl s_init ? ?? ??初始化pll??mux memery ? ? /* back to arch calling code */ ? ? mov pc, r6 call_board_init_f:arch/arm/cpu/armv7/start.s) ? ? //設(shè)置堆棧指針,并調(diào)用board_init_f ? ? ldr sp, =(CONFIG_SYS_INIT_SP_ADDR) ? ? bic sp, sp, #7 /* 8-byte alignment for ABI compliance */ ? ? ldr r0,=0x00000000 ? ? bl??board_init_f void board_init_f(ulong dummy) ? ??u-boot-2011.09-psp04.06.00.03/arch/arm/cpu/armv7/omap-common/spl.c? ??調(diào)用relocate_code(CONFIG_SPL_STACK, &gdata, CONFIG_SPL_TEXT_BASE); ? ??這里使用了?CONFIG_SPL_STACK ? ?? ? #define CONFIG_SPL_STACK? ? LOW_LEVEL_SRAM_STACK ? ?? ?? ???#define LOW_LEVEL_SRAM_STACK? ? (SRAM0_START + SRAM0_SIZE – 4) ? ?? ???gdata?.bss?前一段的空間?描述鏡像頭 ? ?? ? #define CONFIG_SPL_TEXT_BASE? ?? ? 0x402F0400 relocate_code:?arch/arm/cpu/armv7/start.s) ? ?重載定位代碼 jump_2_ram:?arch/arm/cpu/armv7/start.s) ? ??跳轉(zhuǎn)到spl的第二階段 board_init_r:(u-boot-2011.09-psp04.06.00.03/arch/arm/cpu/armv7/omap-common/spl.c) ? ??初始化時鐘:?timer_init() ? ? i2c?初始化:?i2c_init(); ? ??獲取啟動方式??omap_boot_device(); ? ??判斷啟動方式從不同的地方裝載鏡像 ? ?? ??mmc?中裝載鏡像?spl_mmc_load_image()? ?? ??nand?中裝載鏡像? ?spl_nand_load_image()? ?? ???uart??中裝載鏡像? ?spl_ymodem_load_image()? ??判斷鏡像類型 ? ?? ??跳轉(zhuǎn)到鏡像中執(zhí)行鏡像?jump_to_image_no_args(); ? ? ? ? 裝載鏡像 將會從配置的存儲介質(zhì)中讀取數(shù)據(jù) 及uboot鏡像 ? ? 然后跳轉(zhuǎn)到uboot中執(zhí)行uboot
注:文章版權(quán)屬于成都萊得科技有限公司所有,轉(zhuǎn)載請注明出處,保留此行文字。

總結(jié)

以上是生活随笔為你收集整理的TI Sitara AM335x系统之AM335x uboot spl分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲三级在线播放 | 精品国产自在精品国产精小说 | av手机免费观看 | 老熟妻内射精品一区 | 好吊一二三区 | 国产精品资源网 | 在线射 | 黄色的网站免费看 | 欧美mv日韩mv国产网站 | 九九九视频在线观看 | 欧美三级一区二区三区 | 91精品一区二区三区在线观看 | 亚洲av男人的天堂在线观看 | 啪啪免费av | 亚洲免费精品视频 | 一级国产黄色片 | 国产午夜福利片 | 99在线播放 | 日本69熟| 日韩欧美国产视频 | 亚洲麻豆av | 天天干天天插天天操 | 日韩超碰 | 自拍天堂 | 欧美大肥婆大肥bbbbb | 亚洲欧美日本另类 | 国产精品av久久久久久无 | 我要看免费的毛片 | 青青国产精品 | 日本啊v在线 | 精品99在线观看 | 国产成人无码性教育视频 | 精品国产乱码久久久久久108 | 午夜在线一区二区 | 成人福利在线播放 | 青草国产视频 | 日本在线播放 | 国产一级影片 | 无码一区二区三区免费视频 | 制服丝袜在线第一页 | 少妇厨房愉情理伦bd在线观看 | 中文字幕高清 | 色碰视频 | 欧洲成人在线观看 | 亚洲av永久无码精品三区在线 | 国产乱码精品1区2区3区 | 男人的天堂在线播放 | 中文字幕精品视频在线观看 | 99久久精品一区二区 | 国产精品视频无码 | 欧美少妇色图 | 奇米第四色7777 | 国产高清中文字幕 | 超碰碰碰 | 久久加久久 | 色牛影院 | 狠狠干天天 | av片国产| 日本三级日本三级日本三级极 | 国产成人精品网 | 免费色av | 18禁免费无码无遮挡不卡网站 | 色婷婷激情 | 性开放的欧美大片 | 欧美成人精品在线观看 | 成人午夜福利一区二区 | 少妇又紧又深又湿又爽视频 | 国产精品性色 | 亚洲a∨无码无在线观看 | av在线资源播放 | 中文字幕人妻一区二区三区在线视频 | 日韩爱爱网站 | 四虎永久地址 | 四川丰满少妇被弄到高潮 | 麻豆精品在线播放 | 啪啪网站免费观看 | 欧美怡红院视频 | 国产精品伦一区 | 久久久免费观看 | 级毛片 | 久久国产精品电影 | 特级西西444www大精品视频 | 久草福利视频 | av综合站| 无码精品人妻一区二区三区影院 | 日本激情视频一区二区三区 | av资源一区 | 波多野结衣av在线免费观看 | 日本特级毛片 | 91噜噜噜| 欧美性色黄 | 97视频在线播放 | 插插射射| 成人午夜免费观看 | 电影桑叶2在线播放完整版 222aaa | 一区二区视频在线看 | 8mav在线| 以女性视角写的高h爽文 | 国产在线精品一区二区 |