修改 DTS
Read time: 1 minute(s)
启动内核时,会通过参数 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);