uboot移植之tag传参

简介:

1:什么是tag

(1)tag是一种数据结构,用于uboot向内核传递参数,一个tag代表了一个参数,uboot在向kernel传参时,就是通过一个个tag来实现的。

(2)每个tag都有一个tag_header(一个结构体),包含了tag的类型和大小,然后tag中剩余的部分tag_xxx来当作传参的tag


2:kernel如何知道tag的起始地址。

uboot启动内核的最后通过theKernel (0, machid, bd->bi_boot_params);来启动内核,这三个参数,第一个固定是0,;第二个是机器码;第三个就是tag的存放的起始地址,也就是setup_start_tag。这三个参数分别存放在寄存器r0 r1 r2中。


3:kernel如何知道tag的结束地址

在tag传参的过程中,有一个setup_start_tag(ATAG_CORE类型)和setup_end_tag (ATAG_NONE类型),setup_start_tag表示tag开始传参,setup_end_tag 表示传参的结束,这两个tag之间的tag就是实际的向内核传递的tag。

总结:uboot和kernel都是在DDR中运行的,uboot先运行,最后通过theKernel (0, machid, bd->bi_boot_params);跳转到执行kernel,uboot向kernel传参的实现就是uboot和kernel规定一种传参的数据格式(tag),然后uboot将需要传递给kernel的参数存放到DDR的某段内存中,然后将 这段内存的起始地址传递给kernel,然后kernel通过这个地址来读取传递的参数。


在uboot的移植的时候需要注意的是

(1)tag传参部分的代码是不需要修改的,我们需要做的是需要打开或者关闭相应的宏定义,用来确定向内核传递哪些参数

(2)如果内核启动不成功,则需要考虑uboot传参是否正确。传参不成功首先看uboot中bootargs设置是否正确,其次看uboot是否开启了相应宏以支持传参。


本文转自 菜鸟养成记 51CTO博客,原文链接:http://blog.51cto.com/11674570/1925587

相关文章
|
SQL 开发框架 安全
Linux系统中ARMv8架构u-boot启动流程分析
Linux系统中ARMv8架构u-boot启动流程分析
840 1
|
自然语言处理 JavaScript 前端开发
Duktape:一个新的小巧的超精简可嵌入式JavaScript引擎
Duktape是一个可嵌入的Javascript引擎,主要关注便携性和精简及紧凑性。 Duktape很容易集成到C/C++项目: 添加duktape.c和duktape.h到您的build中,并使用Duktape API从C代码中,调用ECMAScript代码的功能,反之亦然。
2019 0
|
存储 SQL 数据库连接
Seata常见问题之修改大小如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
702 0
|
Linux
Pytest----CentOS7安装配置allure
Pytest----CentOS7安装配置allure
1236 0
Pytest----CentOS7安装配置allure
|
11月前
|
物联网 数据挖掘 BI
基于阿里云物联网平台(IoT)的智能家居系统开发与部署
随着物联网技术的发展,智能家居成为提升生活品质的重要方向。阿里云物联网平台提供设备接入、数据管理及应用开发能力,支持亿级设备接入、高效数据管理和灵活应用开发,确保系统安全。本文通过实战案例展示如何基于该平台构建智能家居系统,涵盖设备接入、远程控制、场景联动与数据分析等功能,助力企业快速部署智能家居解决方案。
|
Linux
3分钟带你了解Linux 中的 umount 命令
【7月更文挑战第7天】
895 0
3分钟带你了解Linux 中的 umount 命令
|
Shell 网络安全 开发工具
Gerrit✨Gerrit服务器简介 与 配置SSH keys
Gerrit✨Gerrit服务器简介 与 配置SSH keys
|
Linux Shell
Linux基础:常用命令之echo命令详解(一)
Linux基础:常用命令之echo命令详解(一)
1731 0
Linux基础:常用命令之echo命令详解(一)
|
缓存 Linux 编译器
Linux系统中u-boot启动流程分析(详解)
Linux系统中u-boot启动流程分析(详解)
1618 2

热门文章

最新文章