linux 设备树和atags
linux接受参数有两种方式。一种是ATAGS一种是DTBATAGS是传统的方式,传递命令行等等信息。DTB是传递了更多的硬件信息。ATAG通过启动将各种参数打包成ATAG_TAG标记传递信息。而DTB则是通过可描述的DTSI编译成DTB块。将DTB和ATAG放到内存当中。通过寄存器R2参数传递地址给linuxkernel进行解析。如果配
linux接受参数有两种方式。
一种是ATAGS
一种是DTB
ATAGS是传统的方式,传递命令行等等信息。
DTB是传递了更多的硬件信息。
ATAG
通过启动将各种参数打包成ATAG_TAG标记传递信息。
而DTB则是通过可描述的DTSI编译成DTB块。
将DTB和ATAG放到内存当中。通过寄存器R2参数传递地址给linuxkernel进行解析。
如果配置了CONFIG_ARM_APPENDED_DTB,表示将设备存放在内核img的末尾。
但是这个操作需要手工完成。也就是编译好image以后。
通过
cat zimage xxx.dtb >zImage-dtb来实现。
如果定义了CONFIG_ARM_APPENDED_DTB的话
在解压内核的操作时会将R2(这里的R8最终将会赋值给R2)的指针直接修改为DTB的地址。
mov r8, r6 @ use the appended device tree
如果同时使用ATAGS和DTB。想要两个一起使用,就还要定义CONFIG_ARM_ATAG_DTB_COMPAT实现兼容性处理。
解压代码会使用atags_to_fdt将atags转变成FDT和image末尾的FDT合并。常见的是CMDLINE传递使用ATAG,硬件信息使用DTB实现。
更多推荐
所有评论(0)