3.10.4. 修改 DTS

启动内核时,会通过参数 r2 将 FDT 传递给 Kernel。Bootargs 等信息也会通过 FDT 传递给 Kernel。

由于 bootargs 是在 U-Boot 运行时生成

如果需要传递 initrd 信息,也是通过 FDT 传递。

do_bootm(); // cmd/bootm.c
|-> do_bootm_states(); // common/bootm.c
    |-> bootm_os_get_boot_func(); common/bootm_os.c
        |-> do_bootm_linux(); // arch/riscv/lib/bootm.c
            |-> boot_prep_linux(); // arch/riscv/lib/bootm.c
            |   |-> image_setup_linux(); // common/image.c
            |       |-> image_setup_libfdt(); // common/image-fdt.c
            |           |-> fdt_chosen(fdt); // common/fdt_support.c
            |           |   |-> str = env_get("bootargs");
            |           |   |-> fdt_setprop(fdt, nodeoffset, "bootargs",
            |           |                   str, ...);
            |           |       // 修改chosen 的 bootargs
            |           |-> fdt_initrd(blob, start, end); // common/fdt_support.c
            |               // "linux,initrd-start"
            |               // "linux,initrd-end"
            |
            |-> boot_jump_linux(images, flag); // arch/riscv/lib/bootm.c
                |-> kernel(gd->arch.boot_hart, images->ft_addr);