u-boot serial_check_stdout函数
#if CONFIG_IS_ENABLED(SERIAL_PRESENT) static int serial_check_stdout(const void *blob, struct udevice **devp) { int node = -1; const char *str, *p, *name; int namelen;
/* Check for a chosen console */ str = fdtdec_get_chosen_prop(blob, "stdout-path"); if (str) { p = strchr(str, ':'); namelen = p ? p - str : strlen(str); node = fdt_path_offset_namelen(blob, str, namelen);
if (node < 0) { /* * Deal with things like * stdout-path = "serial0:115200n8"; * * We need to look up the alias and then follow it to * the correct node. */ name = fdt_get_alias_namelen(blob, str, namelen); if (name) node = fdt_path_offset(blob, name); } }
if (node < 0) node = fdt_path_offset(blob, "console"); if (!uclass_get_device_by_of_offset(UCLASS_SERIAL, node, devp)) return 0;
/* * If the console is not marked to be bound before relocation, bind it * anyway. */ if (node > 0 && !lists_bind_fdt(gd->dm_root, offset_to_ofnode(node), devp, false)) { if (!device_probe(*devp)) return 0; }
return -ENODEV; }