一、前言 Device Tree总共有三篇,分别是: 1、为何要引入Device Tree,这个机制是用来解决什么问题的?(请参考引入Device Tree的原因) 2、Device Tree的基础概念(请参考DT基础概念) 3、ARM linux中和Device Tree相关的代码分析(这是本文的主题) 本文主要内容是:以Device Tree相关的数据流分析为索引,对ARM linux kernel的代码进行解析。主要的数据流包括: 1、初始化流程。也就是扫描dtb并将其转换成Device Tree Structure。 2、传递运行时参数传递以及platform的识别流程分析 3、如何将Device Tree Structure并入linux kernel的设备驱动模型。 注:本文中的linux kernel使用的是3.14版本。 二、如何通过Device Tree完成运行时参数传递以及platform的识别功能? 1、汇编部分的代码分析 linux/arch/arm/kernel/head.S文件定义了bootloader和kernel的参数传递要求:
目前的kernel支持旧的tag list的方式,同时也支持device tree的方式。r2可能是device tree binary file的指针(bootloader要传递给内核之前要copy到memory中),也可以能是tag list的指针。在ARM的汇编部分的启动代码中(主要是head.S和head-common.S),machine type ID和指向DTB或者atags的指针被保存在变量__machine_arch_type和__atags_pointer中,这么做是为了后续c代码进行处理。 2、和device tree相关的setup_arch代码分析 具体的c代码都是在setup_arch中处理,这个函数是一个总的入口点。具体代码如下(删除了部分无关代码):
|
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|