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);