海思 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源码开始)
实现:
调用: