引用文章:添加链接描述
设备树包 可以到github中下载:
https://github.com/Xilinx/device-tree-xlnx/releases/tag/xilinx-v2020.1
设备树的生成
设备树的配置
设备树对应驱动
ZYNQ在做linux的系统移植时,例如生成 Ubuntu 的操作系统,最大的困难就是设备树的配置,眼花缭乱的模块,不明所以的语法结构,真的能把新手逼疯。
好在Xilinx Vitis 是有自动生成设备树这个功能的,但好像挺多人不知道的, 或许就不需要 ,本篇博客就是来介绍下 如何使用Vitis 和 XSA 硬件工程文件生成设备树,并且将其配置成与驱动相匹配。
设备树的生成
使用工具:Vitis 2020版
打开vitis 2020 版,选择文件夹,launch,点击下图所示:
选择下图选项:
点击 “new” 选择官方设备树包,设备树包可以去米联客官网下载,先点击 “Apply” 再点击 “Apply and close” 。
接下来正常生成 platform 需要注意的是 system 需要选择 “device tree” 如下图:
build project
在工程下就会自动生成该XSA对应的设备树文件:
有这些设备树文件就可以对编译内核所需的设备树进行修改,这一部分的修改,我个人感觉是Linux系统编译和移植最麻烦的部分,不难只是很多细节。只要做到了这一步,基本上系统启动出现的各种问题(例如boot起不来,识别不到emmc,没有eth0等等),都可以在设备树上找到对应。
设备树的配置
这一部分的配置,本篇只说下需要注意且通用的几个重点,像是依赖关系,设备树文件的命名这种和生成内核的工具相关的细节就不提了,也没有必要。
首先,上一节生成的6个“dts”或“dtsi”文件,通常只用到其中的三个:“pcw.dtsi”、“pl.dtsi”、“system-top.dts”
三个文件可以整合到同一个 “dts” 文件,也可以保留多个文件,例如一个 “dts” 文件调用另外两个 “dtsi” 文件。
但只是这样生成的 “BOOT.bin” 文件,甚至都没法完全启动系统,会在启动 kernel 时报一个识别不到 rootfs 的错误,我这边没留下当时错误的截图,就不展示了。
这时,就得在设备树中手动添加相关模块,首先在 “system-top.dts” 中添加下图所示代码:(左边是 “system-top.dts” 原始代码)
这样配置的设备树至少 boot 是可以起来的,如果boot起来还有问题,就得从 boot 生成工具,或者硬件工程的配置是否没对上上的方向去排查。
好了,接下来就是最重要的设备树与驱动的对应。
设备树对应驱动
本篇博客所举例的驱动,特指 “VDMA” 这种硬件接口驱动,也只有这类驱动才需要在设备树上配置。
首先,查看 “pl.dtsi” 中 vdma 的一个配置:
“compatible” 这个配置,默认是赛灵思官方的驱动,但不管是赛灵思官方驱动,还是米联客的驱动,亦或是自己手动配的驱动,都需要对应到驱动里的“compatible”,以米联客的驱动为例,如下图:
两者一致,且不和其他驱动重复即可。
另外提一下,容易与 compatible 混淆的设备名称,也就是在 linux 系统中输入: