设备树和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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值