linux5.10 DTB兼容ATAG传参实现

海思 uboot传参kernel
在较新的kernel版本有两种方法可以实现uboot传参给kernel:
① :相关的参数保存在DTB文件中的节点,kernel通过读取节点的方式获取参数。(比如chosen节点,这种方式只适应静态的传参)
② :为了兼容老版本kernel的ATAG传参的方式,较新版本的kernel提供了兼容的模式。
下面就讲解兼容模式的使用流程:(这里开始是kernel源码的流程)

① :需要开下面这几个宏:

CONFIG_ARM_APPENDED_DTB=y
CONFIG_ARM_ATAG_DTB_CONPAT=y
CONFIG_ARM_ATAG_DTB_COMPAT_CMDLIEN_EXTEND=y
在这里插入图片描述

第一个宏表示编译生成的DTB文件的是紧跟着kernel 的。
第二个宏表示DTB传参方式兼容ATAG传参方式
第三宏的作用是表示DTB文件中的参数和atag的参数时兼容的。

② 三个宏在代码中的位置

在这里插入图片描述

前面两个宏在文件arch/arm/boot/compressed/head.S文件中,其中第二个宏包含在第一个宏内。
这两个宏都打开就会运行下面的流程:核心是atags_to_fdt函数。
在这里插入图片描述

③ atags_to_fdt函数(atag_to_fdt.c文件)

在这里插入图片描述

判断到atag_list内有ATAG_CMDLINE后就会跑两个分支:由do_extend_cmdline宏决定
① merge_fdt_bootargs //合并atag中bootargs和dtb文件中bootargs参数
② setprop_string //用atag中bootargs参数覆盖dtb文件中的bootarts参数。

④ do_extend_cmdline宏实现

在这里插入图片描述
由上面的第三个宏决定

⑤ :ATAG的构建(这里是kernel源码的流程结束,uboot源码开始)

实现:
在这里插入图片描述

调用:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值