64架构 的设备树_初识设备树

本文介绍了在64位架构中,设备树如何替代传统的ATAGS,简化内核与硬件的交互。设备树使得内核不需要包含特定硬件信息,而是依赖于DTB文件。内容包括设备树的加载过程、引入设备树的原因、设备树的基本概念以及设备驱动如何与设备树节点绑定。此外,还提到了设备树编译和设备驱动的匹配方式,强调了设备树在嵌入式系统开发中的重要性。
摘要由CSDN通过智能技术生成

目录:

一、加载Linux(有无设备树)
二、设备树入门知识
 

一、加载Linux(有无设备树)

没有设备树的时候(以ARM架构为例):

- 内核在源码里记录了所有硬件相关的信息(芯片型号、内存大小,各种控制器和外设等);

- booloader只需要加载一个kernel image(例如uImage、zImage等),然后跳转到kernel image的起始地址就可以开始执行内核代码了。

- bootloader在加载kernel image前,会先准备好一些供内核使用的信息,这些信息被称为ATAGS,典型的ATAGS有:启动参数(command line)、内存大小、内存位置。bootloader在跳转到kernel image 前,会把ATAGS的地址放在r2寄存器里,内核启动时通过读r2寄存器获取ATAGS;因为ATAGS很重要(内存的起始地址和大小不确定的话内核寸步难行),内核必须尽早获取ATAGS。

- bootloader在加载kernel image前,会将单板型号(machine type,一个整型数)放在r1寄存器里,内核启动时获取到machine type integer,进而找到用于描述单板的struct machine_desc,struct machine_desc里包含了所有硬件信息:

b021ae9556c35dcccccef37d74d9ace9.png

- 以U-boot为例,U-boot加载内核的命令:bootm ,没有设备树时加载内核的示意图如下:

977da4035caa01213df2020ea508776c.png

 

为什么要引入设备树?

引入设备树前:

- 所有单板相关的硬件信息都是hard-coded,这导致内核必须收集单板所有的配置,每当有一点点非常小的改动时,就需要生成一个新的kernel image。例如产品里某个I2C设备是可插拔的,那么不管这个I2C设备是否存在ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值