0
点赞
收藏
分享

微信扫一扫

平台对象建立过程


函数setup_machine_fdt()对struct machine_desc对象初始化。函数参数dt_phys给出了设备树的物理地址。


const struct machine_desc * __init setup_machine_fdt(unsigned int dt_phys)
 {
     const struct machine_desc *mdesc, *mdesc_best = NULL;

 #ifdef CONFIG_ARCH_MULTIPLATFORM
     DT_MACHINE_START(GENERIC_DT, "Generic DT based system")
     MACHINE_END

     mdesc_best = &__mach_desc_GENERIC_DT;
 #endif

     if (!dt_phys || !early_init_dt_verify(phys_to_virt(dt_phys)))
         return NULL;

     mdesc = of_flat_dt_match_machine(mdesc_best, arch_get_next_mach);

     if (!mdesc) {
         const char *prop;
         int size;
         unsigned long dt_root;

         early_print("\nError: unrecognized/unsupported "
                 "device tree compatible list:\n[ ");

         dt_root = of_get_flat_dt_root();
         prop = of_get_flat_dt_prop(dt_root, "compatible", &size);
         while (size > 0) {
             early_print("'%s' ", prop);
             size -= strlen(prop) + 1;
             prop += strlen(prop) + 1;
         }
         early_print("]\n\n");

         dump_machine_table(); /* does not return */
     }

     /* We really don't want to do this, but sometimes firmware provides buggy data */
     if (mdesc->dt_fixup)
         mdesc->dt_fixup();

     early_init_dt_scan_nodes();

     /* Change machine number to match the mdesc we're using */
     __machine_arch_type = mdesc->nr;

     return mdesc;
 }

举报

相关推荐

0 条评论