RK3568开发笔记整理之ATAGS传参
1. 概述
ATAGS 传参是 RK 实现的一套传参机制,用于在各个固件之间传递参数,RK 平台的启动流程:
所以,由此可知,这个传参机制适用于 TPL、SPL、trust(BL31、BL32)以及 u-boot 之间。
其实这个机制很简单,就是这些镜像之间约定、固定一块内存地址,用这块内存空间传递参数,所以这块内存空间是这些镜像之间都知道的一个约定好的地址。
当 然 RK U-Boot 默 认 启 用 了 ATAGS 传 参 机 制 , 通 过 定 义 宏CONFIG_ROCKCHIP_PRELOADER_ATAGS 即可。
首先,通过 u-boot 代码的分析可知,ATAGS 传参所使用的基地址是 ATAGS_PHYS_BASE 所定义的,如下所示:
CONFIG_SYS_SDRAM_BASE 指的是系统 DDR 内存的基地址,对于 RK 平台,这个是 0。所以从这个宏定义可知,ATAGS 传参所使用的基地址是系统 DDR 起始地址之后的(2M – 8K)的位置,8K 被设置为ATAGS 传参机制总的内存大小,所以地址范围不会超过 DDR 基地址之后 2M 的范围。
代码实现:
./arch/arm/include/asm/arch-rockchip/rk_atags.h
./arch/arm/mach-rockchip/rk_atags.c
这套机制通过 rk_atags.c 源文件来实现。
原理上很简单,首先每一种信息会通过一个 struct tag 数据结构来描述:
hdr 是一个 tag 头数据,记录了当前 tag 的一些信息,包括 tag 的大小和一个 magic。
magic 表示当前 tag 是记录哪种信息:
每一种信息通过一个 tag 来记录,所以这个 tag 数据结构就存放在以 ATAGS_PHYS_BASE,依次存放。
RK 已经提供了封装好的接口 atags_get_tag、atags_set_tag,以及其它的一些接口函数。
譬如 TPL 初始化了 DDR,那么就知道了 DDR 相关的信息。容量大小这样,那么就会通过 ATAGS 传参机制将其传给后面的 SPL、U-Boot 这些。在分析 SPL 代码时,发现 SPL 代码中读取了 ATAGS 传参中的串口信息,并且成功读取到了,所以这个信息也是由 TPL 传递过来的,并且 SPL 在找到成功的启动设备之后,也会将启动设备这一信息写入到 ATAGS 中,以将信息传递给后续的镜像。
- 分享
- 举报
-
浏览量:2730次2024-03-18 14:27:20
-
浏览量:1699次2024-03-13 15:15:04
-
浏览量:2347次2024-03-18 15:00:34
-
浏览量:1162次2024-02-18 17:07:58
-
浏览量:4944次2022-09-30 16:40:59
-
浏览量:5849次2021-12-10 15:40:21
-
浏览量:18180次2022-09-30 16:51:48
-
浏览量:9436次2022-10-12 09:28:15
-
浏览量:1045次2023-12-08 16:48:29
-
浏览量:4081次2022-10-11 10:48:08
-
浏览量:6598次2022-10-08 14:00:42
-
浏览量:2646次2022-09-30 16:48:25
-
浏览量:5070次2022-09-26 11:51:17
-
浏览量:6600次2022-10-09 10:20:09
-
浏览量:7933次2022-10-13 19:26:04
-
浏览量:2537次2022-09-30 16:46:03
-
浏览量:6002次2022-10-08 13:56:28
-
浏览量:10296次2022-10-09 15:56:41
-
浏览量:2762次2022-10-28 09:28:29
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
Asura
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明