以Xilinx Zynq-7000为例说明设备树的运用_第1页
以Xilinx Zynq-7000为例说明设备树的运用_第2页
以Xilinx Zynq-7000为例说明设备树的运用_第3页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

以XilinxZynq-7000为例说明设备树的运用注:由于内核版本的演变,设备树成了任何使用较高版本linux系统的设备平台所必须文件,然国内相关技术文档严重不足,本文是国外技术专栏的翻译.本教程是针对XilinxZynq-7000设备写的,但其中的概念适用于所有使用了设备树的Linux内核。本文使用Xillinux发行版为例,该发行版运行于Zedboard硬件上。

设备树有什么好处设想一下:bootloader刚刚将Linux内核复制到内存中,然后跳到内核的入口点开始执行。此时内核就像运行在处理器上的一个裸机程序。需要配置处理器,设置虚拟内存,向控制台打印一些信息。但是这些事情如何完成?所有的这些操作都要通过写寄存器来实现,但Linux内核如何知道这些寄存器的地址?如何知道当前有多少个CPU核可以使用?有多少内存可以访问?最直接的办法就是在内核代码里为指定平台写好这些代码,由内核配置参数决定哪些平台代码将被启用。当一切都固定不变时这种方法还不错,比如在x86处理器上内部的寄存器,或是BIOS的访问。但对于变化量来说,比如PCI/PCIe外设,就需要内核明确了解这些变化的细节。ARM架构已经变成了Linux社区的一个在麻烦:即使处理器使用相同的编译器和函数,但具体到某一种芯片,它就有自己的寄存器地址和不同的配置方式。不仅如此,每种板子都有自己的外设。结果造成内核中有大量的头文件、补丁和特殊的配置参数,它们的一种组合就对应于一款芯片的一种特殊板型。总之,这造成了大量丑陋和不可维护的代码。另外,每个编译出来的内核bin文件都是为某一款芯片的某一种板子,有点像为市场上某一款PC主板编译内核。所以很希望为所有ARM处理器编译内核时,让内核能以某种方式识别硬件,然后使用正确的驱动,就像一台PC一样。怎么实现呢?在PC上,寄存器初始化是硬编码的,其他的信息由BIOS提供。所以当有另一块软件提供这些信息时,硬件自动检测也很容易。ARM处理器没有BIOS,Linux内核只能靠自己了。解决方案是设备树devicetree,也称作OpenFirmware(OF)或FlattenedDeviceTree(FDT)。本质上是一个字节码格式的数据结构,其中包含信息在内核启动时非常有用。bootloader在跳到内核入口点之前将这一块数据复制到RAM中的已知地址。设备树的严格的规范,却没有规定哪些内容可以放置其中以及放置的位置。内核可以搜索设备树中的任意路径和参数。程序员来决定哪些配置作为参数放进设备树里,以及放置在什么地方。采取标准的树结构,则可用一套方便的API来操作。例如,约定好如何定义总线上的外设,那么API可以获取到驱动所需的基本信息:地址、中断和自定义变量。后面会介绍更多。对于我们大多数人来说,我们用设备树来向内核描述对硬件的添加或删除操作,作为响应,内核就可以加载或卸载相应的驱动。硬件的特殊信息也可以通过设备树来向内核传达。编译设备树

设备树有三种形式:

*文本文件(.dts)-源

二进制对象(.dtb)-目标码

Linux系统中/proc/device-tree目录-调试和逆向信息启用/proc/device-tree目录需要打开配置CONFIG_PROC_DEVICETREE:

DeviceDrivers--->

DeviceTreeandOpenFirmwaresupport--->

[*]Supportfordevicetreein/proc对于设备树,我们一般的使用流程是:编辑DTS文件,然后用一个工具将其编译成DTB文件,这个工具就在Linux内核源码scripts/dtc/目录下。设备树编译器也可以单独下载并编译:

$gitclonegit:///software/dtc.gitdtc

$cddtc

$make但是下文的描述都使用内核原码中的dtc工具。设备树的语法在这里描述。注意这种语言并不作任何执行操作,不像XML,这只是一种组织数据的语法。一些架构有自动产生设备树的工具,来自于XPS项目。但目前对于ZynqEPP平台还没有此工具。DTS编译为DTB:

$scripts/dtc/dtc-Idts-Odtb-o/path/to/my-tree.dtb/path/to/my-tree.dts这样就创建了my-tree.dtb二进制文件。dtc是主机上的一个程序。如果内核没有编译过,则先需要编译好DTS编译器:配置内核,也可以复制一份已有的配置文件到内核根目录下的.config。如下:

$makeARCH=armdigilent_zed_defconfig生成DTS编译器:

$makeARCH=armscriptsdtc也可以从一个DTB文件或/proc/device-tree文件系统反编译。例如从DTB反编译:

$scripts/dtc/dtc-Idtb-Odts-o/path/to/fromdtb.dts/path/to/booted_with_this.dtb生成的dts文件仍然可以被用来生成dtb。但最好还是使用最初的DTS文件,因为一些

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论