简析PPC的Device Tree机制

年底完成了公司设备从arm到ppc的移植,有很多心得需要总结,趁年后不是很忙,整理写下来。
自己也是第一次接触ppc架构的kernel(版本号:3.4.55),很多东西学习不够深入,只写个思路框架,不去深究细节,错误地方还望大家指正。
今天首先来总结下PPC的Device Tree设备树机制,之前在移植arm的uboot以及kernel时,uboot和kernel之前的传参机制在arm架构下是可以选择的,使用tags方式还是fdt方式(flattened device tree)。我选择使用tags,之前有总结过tags的传参方式,可以参考我的另一篇文章,链接如下:
http://blog.csdn.net/skyflying2012/article/details/35787971
但是阅读了PPC架构的kernel启动代码后,发现PPC架构kernel启动传参仅支持fdt方式,趁这个机会学习下fdt机制。
1 为什么要用FDT,FDT优点是什么。
从网上找到的官方解释如下:
IBM、Sun等厂家的服务器最初都采用了Firmware(一种嵌入到硬件设备中的程序,用于提供软件和硬件之间的接口),用于初始化系统配置,提供操作系统软件和硬件之间的接口,启动和运行系统。后来为了标准化和兼容性,IBM、Sun等联合推出了固件接口IEEE 1275标准,让他们的服务器如IBM PowerPCpSeries,Apple PowerPC,Sun SPARC等均采用Open Firmware,在运行时构建系统硬件的设备树信息传递给内核,进行系统的启动运行。这样做的好处有,减少内核对系统硬件的严重依赖,利于加速支持包的开发,降低硬件带来的变化需求和成本,降低对内核设计和编译的要求。
在嵌入式PowerPC中,一般使用U-Boot之类的系统引导代码,而不采用Open Firmware。早期的U-Boot使用include/asm-ppc/u-boot.h中的静态数据结构struct bd_t将板子基本信息传递给内核,其余的由内核处理。这样的接口不够灵活,硬件发生变化就需要重新定制编译烧写引导代码和内核,而且也不再适应于现在的内核。为了适应内核的发展及嵌入式PowerPC平台的千变万化,吸收标准OpenFirmware的优点,UBoot引入了扁平设备树FDT这样的动态接口,使用一个单独的FDT blob(二进制大对象,是一个可以存储二进制文件的容器)存储传递给内核的参数,一些确定信息,例如cache大小、中断路由等直接由设备树提供,而其他的信息,例如eTSEC的MAC地址、频率、PCI总线数目等由U-Boot在运行时修改。

我的理解是为了适应灵活的嵌入式平台,FDT将一些固定人为需要修改的参数信息从uboot和kernel中(如uboot下的bd_t)剥离出来,修改硬件后,不需要重新修改烧录uboot kernel,仅需要修改FDT文件即可完成对新硬件的支持。但是有一些动态修改的信息还是需要uboot以及kernel来操作,如cmdline,usb以及pci的枚举设备信息。
对比而言,arm下使用的tags方式就是需要对uboot中的tags(如mem大小等)进行修改,完成对新硬件的支持。
2 FDT怎么用,格式是什么。
FDT设备树我们可以看做是描述设备硬件配置的线性树形数据结构,开发人员需要根据设备硬件配置来编写设备树,设备树的编写提供一套完全可视化的文本形式dts(device tree source),然后利用dtc(device tree compiler)编译成kernel需要的设备数镜像文件dtb,d t c 编译器会对输入文件进行语法和语义检查,并根据L i n u x 内核的要求检查各节点及属性,将设备树源码文件(. d t s )编译二进制文件(. d t b ),以保证内核能正常启动,一个简单的例子如下:

/ {
    #address-cells = <1>;
    #size-cells = <1>;
    model = "test";
    compatible = "test";
    dcr-parent = <&{/cpus/cpu@0}>;

    cpus {
        #address-cells = <1>;
        #size-cells = <0>;

        cpu@0 {
            device_type = "cpu";
            model = "PowerPC,460EX";
            reg = <0x00000000>;
            i-cache-line-size = <32>;
            d-cache-line-size = <32>;
            i-cache-size = <32768>;
        
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值