• 设备树和uboot启动,kernel启动


    dts->dtb->内核解析dtb->device_node->platform_device

    uboot还是通过bootm(do_bootm_linux)去启动内核,通过bootargs,过兼容tag传参与dtb传参数,kernel启动通过r0-r2传参数,ro=0,r1=machid,r2就是tag或者dtb,kernel_entry->自解压代码

    自解压部分arch/arm/boot/compressed/head.S

    CONFIG_ARM_APPEND_DTB(把zImage变成zImage-dtb)

    CONFIG_ARM_ATAG_DTB_COMPAT(uboot通过tag传参了,内核要能接受tag传参并转成dtb来追加到原来的dtb)

    atags_to_fdt(tag转换成fdt,即生成/chosen节点)

    bl decompress_kernle 真正执行解压kernel转换成可执行的elf格式

    bne __enter_kernel(mov pc r4 ) 跳转到内核

    kernel第一阶段arch/arm/kernel/head.S

    在__mmap_switched函数

    str r2, [r6] @save atags pointer

    .long __atags_pointer @r6

    b start_kernel1

    kernel第二阶段init/main.c start_kernel函数

    set_arch(&command_line)

    struct machine_desc定义在arch/arm/include/asm/mach目录下,kernle启动时会解析dtb中的模块信息,然后动态生成machine_desc

    mdesc = setup_machine_fdt(__atags_pointer);

    arm_memblock_init(mdesc)

    request_standard_resources

            unflatten_device_tree /*解包dtb操作*/

    arm_dt_init_cpu_maps //提取了cpu有关的节点,然后操作硬件设置cpu

    of_flat_dt_match_machine

    段属性:.arch.info.init __arch_info_begin __arch_info_end 

    early_init_dt_scan_nodes  

    of_scan_falt_dt

    deadbeef(asan)

    dtb解开后,of_root成为了解开后的dtb数据结结构的根结点指针,就是很多个device_node结构体变量形成的树状指针链接。

    of_find_node_by_path

  • 相关阅读:
    扩散模型Diffusion轻松入门
    java笔记整理
    dapr源码分析--服务调用
    Android Media Framework - 开篇
    高德地图根据标记点显示合适的地图级别
    抖音微短剧小程序源码部署:轻松实现巨量广告回传功能
    DP232在兼容FT232RL的注意事项
    神经网络与深度学习-7- 支持向量机2 -PyTorch
    BI如何实现用户身份集成自定义安全程序开发
    省创暨srdp项目复盘
  • 原文地址:https://blog.csdn.net/aa541850383/article/details/125117505