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

相关文章
|
8月前
普通函数中的this指向问题解决方案call
普通函数中的this指向问题解决方案call
32 0
|
8月前
普通函数中的this指向问题解决方案apply
普通函数中的this指向问题解决方案apply
45 0
|
8月前
普通函数中的this指向问题解决方案apply
普通函数中的this指向问题解决方案apply
33 0
|
8月前
|
前端开发
前端学习笔记202306学习笔记第三十八天-Es6-函数形参的结构赋值1
前端学习笔记202306学习笔记第三十八天-Es6-函数形参的结构赋值1
32 0
|
9月前
|
前端开发
|
前端开发
前端hook项目pc总结笔记-打印实现局部打印
前端hook项目pc总结笔记-打印实现局部打印
70 0
|
前端开发
前端知识学习案例21vs code-跳转或者查看函数定义
前端知识学习案例21vs code-跳转或者查看函数定义
65 0
前端知识学习案例21vs code-跳转或者查看函数定义
【鸿蒙征程】五.实现页面的跳转✨有参,无参,返回值✨
文章目录 前言 0.准备工作 1.无参数跳转 2.带参数跳转
【鸿蒙征程】五.实现页面的跳转✨有参,无参,返回值✨
|
编译器
新年第一问,请解释一下extend和super泛型中list操作的区别?
新年第一问,请解释一下extend和super泛型中list操作的区别?
70 0
|
JavaScript
2022前端面经---改变this指向问题(call、apply、bind)
2022前端面经---改变this指向问题(call、apply、bind)