uboot修正设备树(fixup)

您所在的位置:网站首页 uboot代码修改 uboot修正设备树(fixup)

uboot修正设备树(fixup)

2024-06-24 20:34| 来源: 网络整理| 查看: 265

说明:源码来自opensource的最新uboot,以sdhc的设备树节点被uboot修改为例说明。 调用过程;

do_bootm(cmd/bootm.c)//通用命令 ->do_bootm_subcommand(cmd/bootm.c) ->do_bootm_states(common/bootm.c) ->bootm_os_get_boot_func() (common/bootm_os.c) return boot_os[os]; ->static boot_os_fn *boot_os[] = { (common/bootm_os.c)//通用代码 [IH_OS_U_BOOT] = do_bootm_standalone, #ifdef CONFIG_BOOTM_LINUX [IH_OS_LINUX] = do_bootm_linux, ->do_bootm_linux(arch/arm/lib/bootm.c) //架构相关 ->boot_prep_linux(arch/arc/lib/bootm.c) //架构相关 ->image_setup_linux(common/image.c) ->image_setup_libfdt(common/image-fdt.c) ->ft_board_setup( board/freescale/ls2080ardb/ls2080ardb.c) //板级相关 ->ft_cpu_setup(arch/arm/cpu/armv8/fsl-layerscape/fdt.c) eg:#ifdef CONFIG_FSL_ESDHC fdt_fixup_esdhc(blob, bd);//对sdhc修正 #endif ->fdt_fixup_esdhc(drivers/mmc/fsl_esdhc.c) ->esdhc_status_fixup(修改status状态 okey 或者disabled 使能/失能设备) -> 解析fixup过程: #ifdef CONFIG_OF_LIBFDT __weak int esdhc_status_fixup(void *blob, const char *compat) { #ifdef CONFIG_FSL_ESDHC_PIN_MUX //此宏必须在.h文件中定义 if (!hwconfig("esdhc")) {//hwconfig环境变量没有设置esdhc选项eg:=> pri hwconfig hwconfig=fsl_ddr:bank_intlv=auto;dspi do_fixup_by_compat(blob, compat, "status", "disabled", sizeof("disabled"), 1); //改变status的状态为disabled return 1; } #endif return 0; }

总结: 在执行bootm启动linux内核和设备树之前,会层层调用从通用的代码到板级soc相关的代码,会根据环境变量来选择是否修改sdhc的状态,即是修改传递给linux内核的设备树的sdhc节点的status属性值,将其更改为disabled,来失能此设备。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3