MyFPGA Forum

 找回密码
 注册
搜索
查看: 3297|回复: 1
打印 上一主题 下一主题

soceds 中生成device tree的问题(整理篇)

[复制链接]
跳转到指定楼层
1#
发表于 2015-7-16 15:00:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 matthew_wang 于 2015-7-16 15:14 编辑

SOCEDS从最早13.0开始支持dts dtb 生成,到目前的15.1版本。软件更新中,生成device tree文件的方式也发生了一些变化。很多学习SOCFPGA的朋友能看到的官方教程是http://rocketboards.org/foswiki/ ... DeviceTreeGenerator 但是这个教程从14.0以后就会出现问题的。

问题一:14.0以后各个版本中没有了 clock xml 文件。
问题二:14.0 14.1两个版本中没有 dtc执行文件。此问题在15.0中重新加入。

针对问题二:如果是使用14.0 14.1的用户可以把dtc执行文件放入到embedded\host_tools\gnu 目录中

针对问题一要说明的是rocketboards上的教程只适用于13.1 以前的用户
如果更新到14.0以后,ghrd中不再有clock xml 文件。取而代之的是需要在生成方式中加上 --clocks 这个选项。同时官方提供的方法中还有选项 --bridge-removal all

另外对于xml file 的说明。Altera 提供的xml file 是可以修改的,在用户以后开发驱动的时候更是会根据自己的一些板级设备进行调整。用户可以通过官方的 xml 文件生成dts 文件后在dts 文件上进行修改。
也可以对xml 文件进行一些修改,然后再生成dts 文件。


这里以led为例看看 sopc2dts是如何把xml文件生成device tree的

对于下面这一段的解析
<DTAppend name="label" type="string" parentlabel="led_fpga0" val="fpga_led0"/>
<DTAppend name="gpios" parentlabel="led_fpga0" >
<val type="phandle">led_pio</val>
<val type="number">0</val>
<val type="number">1</val>
</DTAppend>
其对应的结构为
led_fpga0:  node_name{
         label = "fpga_led0";         /* appended from boardinfo */
         gpios = <&led_pio 0 1>;   /* appended from boardinfo */{
}
找到 label为 led_fpga0的添加语句
<DTAppend name="fpga0" type="node" parentlabel="soc_leds" newlabel="led_fpga0"/>
这里可以知道label为led_fpga0的node name 应该是 fpga0 它说对应的parentlabel应该是soc_leds
再寻找label 为 soc_ledsd的添加语句
<DTAppend name="leds" type="node" parentlabel="sopc0" newlabel="soc_leds"/>
这里又可以知道soc_leds的node name 是leds  其parent label应该是sopc0

综合来看就是
sopc0:node_name{
        sub_node_of_sopc0;
       soc_leds: leds{
                                    led_fpga0 :fpga0{                                                               
                                                            label = "fpga_led0";         /* appended from boardinfo */
                                                             gpios = <&led_pio 0 1>;   /* appended from boardinfo */{
                                                    }
                                      sub_node_of_leds;
                                }
      sub_node_of_sopc0;
}

遇到许多刚刚接触socfpga 的新手就是想自己生成device tree。我的建议是如果不知道device tree在内核中的作用可以先不生成。使用提供的image足够完成很多工作。即使对ghrd的QSYS进行了一定的自主设计,很多都是在应用程序中来访问这些设备,这种情况生成的device tree 并无什么用处。需要明白device tree永远是在向内核传递参数和硬件信息的。这些信息是需要linux 内核支持的,如果不知道内核中包含了哪些驱动,盲目的觉得每次更新了Qsys 系统就需要重新生成一遍device tree,请思考下你是否真的必须。

dtc.zip

203.21 KB, 下载次数: 9

dtc file

2#
发表于 2015-7-26 12:24:26 | 只看该作者
这篇文章太好了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-4-28 07:31 , Processed in 0.046871 second(s), 17 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表