![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
uboot
文章平均质量分 82
it潮人
这个作者很懒,什么都没留下…
展开
-
uboot第一阶段分析(上)
mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上一个0x40字节的头,记录参数所指定的信息,这样uboot才能识别这个映象是针对哪个CPU体系结构的,哪个OS的,哪种类型,加载内存中的哪个位置, 入口点在内存的那个位置以及映象名是什么。============================================================对于uboot两阶段的小结,很重要!转载 2024-04-02 14:08:06 · 45 阅读 · 0 评论 -
PBL-SBL1-(bootloader)LK-Android启动过程详解之一(高通MSM8953启动实例)
更重要的是, AArch64作为一个分离出的执行状态,意味着一些未来的处理器可能不支持旧的 AArch32执行状态。我们在这些系统中将不支持 32位执行状态,这将使许多有益的实现得到权衡,如默认情况下,使用一个较大的 64K大小的页面,并会使得纯净的 64位 ARM服务器系统不受遗留代码的影响。为了切换到AArch64模式,SBL1会启动重映射器,操作RMR寄存器,然后触发warm-reset,QSEE就能够运行在AArch64模式了。QSEE建立安全运行环境,配置xPU,支持fuse。转载 2024-04-02 11:16:39 · 278 阅读 · 0 评论 -
UBoot怎么跳转到Kernel:uboot与linux的交界
_attribute__定义了结构体的属性,将结构体放在.u_boot_cmd段中。这样我们通过U_BOOT_CMD宏就定义了cmd_tbl_t类型的结构体变量,变量名为**__u_boot_cmd_bootm**,同时用U_BOOT_CMD宏中的参数对cmd_tbl_t结构体中的每个成员进行初始化。Struct_Section定义了结构体变量的段属性,cmd_tbl_t类型的结构体变量链接时全部链接到u_boot_cmd段中,可以查看u-boot.lds文件对u_boot_cmd段位置的安排。转载 2024-03-28 09:32:06 · 162 阅读 · 0 评论 -
uboot启动流程详解(5)-_main
也就是说,代码在取符号(全局变量、函数等)的时候,会使用相对地址的方法去函数末尾的Lable中取到该符号的地址(说明白点,就是这些Lable存储了要查找符号的地址),然后再根据该地址读取符号的内容。由于arm的流水线架构,所以执行第(1)条指令时pc是指向第(3)条指令的,再加上44(也就是再往下数11条指令,因为一条指令4个字节),即指向了地址为的语句,然后将其内容加载到r3中(即r3=0x87838c3c,对照上面的数据段,可知这就是变量test_val的地址);转载 2024-03-13 17:02:16 · 90 阅读 · 0 评论 -
uboot启动流程详解(4)-cpu_init_crit
ldrARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令。(1)LDR r0,=name,像这种带等号的是伪指令,而不是ARM指令,LDR 伪指令用于加载立即数或一个地址值到指定寄存器。如果name是立即数的话:LDR R0,=0X123;//将0X123存入R0如果name是个标识符:LDR R0,=NAME;//将NAME的地址存入R0相当于://分配内存并用NAME初始化(LABEL为内存的起始地址?转载 2024-03-13 17:00:30 · 45 阅读 · 0 评论 -
uboot启动流程详解(3)-cpu_init_cp15
3、如果想要详细阅读以下代码,需要查阅arm的参考手册。1、关于p15协处理及其指令的介绍请看。2、关于mmu的详细介绍请查看。转载 2024-03-13 16:56:18 · 33 阅读 · 0 评论 -
uboot启动流程详解(2)-reset
1、源码及注释 reset是uboot最先执行的代码,接下来我们来看看reset的具体流程。reset: /*如果没有重新定义save_boot_params,则使用<arch/arm/cpu/armv7/start.S> 中的save_boot_params。其不做任何事情,直接返回。*/ bl save_boot_params /* * disable interrupts (FIQ and IRQ), also set the转载 2024-03-13 16:49:23 · 97 阅读 · 0 评论 -
uboot启动流程详解(1)-_start
这个宏定义的主要作用就是生成 BL1 文件,提到 BL1 文件肯定又会有朋友产生疑问,在这里就这个 BL1 文件给大家简单的介绍一下:BL1 文件是一段外部代码,存放在 SD 卡或者 nandflash 上,大小为(4K\8K\16K)。除了 BL1 文件,还有 BL0 和 BL2 文件。BL0 文件是存放在 CPU 内部 IROM 中的一段固化代码,CPU 上点之后,首先去运行BL0 文件。BL2 文件是完整的 U-Boot 代码。转载 2024-03-13 16:47:03 · 39 阅读 · 0 评论 -
uboot的编译及连接过程
可以使用hexdump命令查看myboot.bin和其他.o文件的内容,如:hexdump -C myboot.bin,对比链接前后的差异。如果想在开发板上跑起来,还需要根据具体的cpu,将myboot.bin制作成相应的格式(一般在前面加个一个头),cpu的类型千千万万种,这里不说了,具体格式应该查看该cpu的datasheet。可以看到代码段大小120个字节,data段大小8个字节(变量b和c的大小),bss段的大小4个字节(变量a的大小),可执行程序的总大小为120+8+4=132。转载 2024-03-13 16:39:43 · 43 阅读 · 0 评论 -
MMU内存管理单元介绍
本篇文章简要阐述MMU的概念,以及以段地址的转换过程为例,简单说明MMU将虚拟地址转换成物理地址的过程。更多详细内容请查看《ARM-MMU(中文手册).pdf》。在ARM存储系统中,使用MMU实现虚拟地址到实际物理地址的映射。为何要实现这种映射?首先就要从一个嵌入式系统的基本构成和运行方式着手。系统上电时,处理器的程序指针从0x0(或者是由0Xffff_0000处高端启动)处启动,顺序执行程序,在程序指针(PC)启动地址,属于非易失性存储器空间范围,如ROM、FLASH等。转载 2024-03-13 16:33:48 · 21 阅读 · 0 评论 -
编译地址与运行地址
比如在函数a中定义了函数b,当执行到函数b时要进行指令跳转,要跳转到b函数所对应的起始地址上去,编译时,编译器给每条指令都分配了编译地址,如果编译器已经给分配了地址就可以直接进行跳转,查找b函数跳转指令所对应的表,进行直接跳转,因为有个编译地址和指令对应的一个表,如果没有分配,编译器就查找不到这个跳转地址,要进行计算,非常麻烦。结果是不能跳转,编译后会产生跳转地址,如果实际地址和编译后产生的地址不相等,那么就不能跳转,所以都希望把编译地址和实际运行地址放在一起的。用来告诉编译器编译地址的起始地址。转载 2024-03-13 16:29:43 · 75 阅读 · 0 评论 -
uboot整体介绍
另外u-boot对操作系统和产品研发提供了灵活丰富的支持,主要表现在:可以引导压缩或非压缩系统内核,可以灵活设置/传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,支持多种文件系统,支持多种目标板环境参数存储介质,采用CRC32校验,可校验内核及镜像文件是否完好,提供多种控制台接口,使用户可以在不需要ICE的情况下通过串口/以太网/USB等接口下载数据并烧录到存储设备中去(这个功能在实际的产品中是很实用的,尤其是在软件现场升级的时候),以及提供丰富的设备驱动等。转载 2024-03-13 16:19:45 · 31 阅读 · 0 评论 -
u-boot启动流程详解-基于iTop4412开发板
前言u-boot的作用:CPU上电后,需要设置很多状态,包括CPU状态、中断状态、MMU状态等,其次要做的就是对硬件资源经行板级初始化、代码重定向等,最后若不进入命令行模式,就会将linux内核从flash(NAND,NOR FLASH,SD,MMC等)拷贝到DDR中,最后启动linux内核。4412 u-boot启动流程:A.开机运行iRom中代码B.BL1阶段(E4412_N.bl1.xxxxG.bin:8KB,三星提供的bin文件,没有源码)C.BL2(SPL)阶段(bl2.转载 2024-03-11 15:50:25 · 240 阅读 · 0 评论