OK6410A 开发板 (三) 8 u-boot-2021.01 boot 解析 SPL镜像运行部分

2024-05-27 15:58

本文主要是介绍OK6410A 开发板 (三) 8 u-boot-2021.01 boot 解析 SPL镜像运行部分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

url 		: git@github.com:lisider/u-boot.git
branch 		: ok6410a
commit id 	: e63a4077ad3aea53107495b0b68b95e720fe6033
config 		: ok6410a_mini_defconfig
// 涉及的 .S .s .c 文件 有 67个
  • 从入口出口来看
// 运行在 0x0c00 0000
reset 												arch/arm/cpu/arm1176/start.S 39	lowlevel_init(108) 								board/samsung/ok6410a/lowlevel_init.S 72_main(110)										arch/arm/lib/crt0.S 91board_init_f(117)							board/samsung/ok6410a/ok6410a.c 266debug_uart_init(271) 					include/debug_uart.h 193_debug_uart_init(196) 				drivers/serial/s3c64xx_serial.c 315	board_init_r(177) 							common/spl/spl.c 589spl_board_init(641) 					board/samsung/ok6410a/ok6410a.c 255spl_boot_mmc(258) 					board/samsung/ok6410a/bl2_mmc_copy.c 18mmc_bl2_copy(23) 				board/samsung/ok6410a/bl2_mmc_copy.c 7CopyMovitoMem(HSMMC_CHANNEL, MOVI_BL2_POS, MOVI_BL2_BLKCNT, bl2_base, MOVI_INIT_REQUIRED)(13) arch/arm/mach-s3c64xx/include/mach/movi.h 25bl2base(24) // 跳转到 u-boot 的u-boot镜像
spl标准流程
reset 												arch/arm/cpu/arm1176/start.S 39	lowlevel_init(108) 								board/samsung/ok6410a/lowlevel_init.S 72_main(110)										arch/arm/lib/crt0.S 91board_init_f(117)							board/samsung/ok6410a/ok6410a.c 266debug_uart_init(271) 					include/debug_uart.h 193_debug_uart_init(196) 				drivers/serial/s3c64xx_serial.c 315	board_init_r(177) 							common/spl/spl.c 589spl_board_init(641) 					board/samsung/ok6410a/ok6410a.c 255memset(&spl_image, '\0', sizeof(spl_image)); // u-boot.imgspl_image.boot_device = 0xdeadbeef;// 得到 u-boot.img在的 device类型board_boot_order(spl_boot_list);spl_boot_list[0] = spl_boot_device();ok6410a_get_boot_device// 通过device类型得到 loader函数// 用 loader 函数加载 u-boot.img 到 ddrboot_from_devices(&spl_image, spl_boot_list, (sizeof(spl_boot_list) / sizeof((spl_boot_list)[0])));loader = spl_ll_find_loader(spl_boot_list[i]);spl_load_image(spl_image, loader);loader->load_image/spl_mmc_load_imagespl_mmc_load...spl_parse_image_headerspl_parse_legacy_headerspl_image->load_addr = image_get_load(header);spl_image->entry_point = image_get_ep(header);spl_image->size = image_get_data_size(header);// 需要 打补丁的赶紧打补丁 // 比如说 你的 u-boot.img 有问题,解析出来的 entry_point  不对// 就需要重新为 entry_point  赋值// 一般为nullspl_perform_fixups(&spl_image);switch (spl_image.os) {case IH_OS_U_BOOT:break;}// 一般为nullspl_board_prepare_for_bootjump_to_image_no_args(&spl_image);image_entry_noargs_t image_entry = (image_entry_noargs_t)spl_image->entry_point;image_entry

这篇关于OK6410A 开发板 (三) 8 u-boot-2021.01 boot 解析 SPL镜像运行部分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007928

相关文章

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用