dts 编译过程_linux设备树dts移植详解

【转】

摘 要:设备树的引入减少了内核为支持新硬件而需要的改变,提高代码重用,加速了Linux

支持包的开发,使得单个内核镜像能支持多个系统。作为U-Boot 和Linux 内核之间的动态

接口,本文阐述了设备树的数据存储格式以及源码描述语法,进而分析了U-Boot 对扁平设

备树的支持设置,Linux 内核对设备树的解析流程。

关键词:扁平设备树; DTS; PowerPC; Linux

IBM、Sun 等厂家的服务器最初都采用了Firmware(一种嵌入到硬件设备中的程序,用

于提供软件和硬件之间的接口),用于初始化系统配置,提供操作系统软件和硬件之间的接

口,启动和运行系统。后来为了标准化和兼容性,IBM、Sun 等联合推出了固件接口IEEE 1275

标准,让他们的服务器如IBM PowerPC pSeries,Apple PowerPC,Sun SPARC

等均采用Open

Firmware,在运行时构建系统硬件的设备树信息传递给内核,进行系统的启动运行[1]。这样

做的好处有,减少内核对系统硬件的严重依赖,利于加速支持包的开发,降低硬件带来的变

化需求和成本,降低对内核设计和编译的要求。

随着 Linux/ppc64 内核的发展,内核代码从原来的arch/ppc32 和arch/ppc64 逐渐迁移到

统一的arch/powerpc 目录,并在内核代码引入Open Firmware API 以使用标准固件接口[2]。

Linux 内核在运行时,需要知道硬件的一些相关信息。对于使用ARCH=powerpc 参数编译的

内核镜像,这个信息需要基于Open Firmware 规范,以设备树的形式存在[3]。这样内核在启

动时读取扫描Open Firmware 提供的设备树,从而获得平台的硬件设备信息,搜索匹配的设

备驱动程序并将该驱动程序绑定到设备。

在嵌入式 PowerPC 中,一般使用U-Boot 之类的系统引导代码,而不采用Open Firmware。

早期的U-Boot 使用include/asm-ppc/u-boot.h 中的静态数据结构struct bd_t

将板子基本信息传

递给内核,其余的由内核处理。这样的接口不够灵活,硬件发生变化就需要重新定制编译烧

写引导代码和内核,而且也不再适应于现在的内核。为了适应内核的发展及嵌入式PowerPC

平台的千变万化,吸收标准Open Firmware 的优点,U-Boot 引入了扁平设备树FDT 这样的

动态接口,使用一个单独的FDT blob(二进制大对象,是一个可以存储二进制文件的容器)

存储传递给内核的参数[3]。一些确定信息,例如cache 大小、中断路由等直接由设备树提供,

而其他的信息,例如eTSEC 的MAC 地址、频率、PCI 总线数目等由U-Boot 在运行时修改。

U-Boot 使用扁平设备树取代了bd_t,而且也不再保证对bd_t 的后向兼容。

2 设备树概念

简单的说,设备树是一种描述硬件配置的树形数据结构,有且仅有一个根节点[4]。它包

含了有关CPU、物理内存、总线、串口、PHY 以及其他外围设备信息等。该树继承了Open

Firmware IEEE 1275 设备树的定义。操作系统能够在启动时对此结构进行语法分析,以此配

置内核,加载相应的驱动。

3 设备树存储格式

U-B

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值