Vivado SDK下生成DTS

参考Xilinx Wiki上的一篇教程http://www.wiki.xilinx.com/Build+Device+Tree+Blob,我们可以轻松创建需要的设备树。

首先下载device tree generator,安装到SDK
直接下载压缩文件:
https://github.com/Xilinx/device-tree-xlnx/releases

将解压的device-tree-xlnx文件夹拷贝到xilinx安装目录下的SDK\2017.4\data\embeddedsw\devicetree\bsp文件下,并重命名为device-tree-xlnx_v2017_4。

在SDK中操作点击菜单: Xilinx Tools > Repositories
在Local Repositories中添加我们刚才的SDK\2017.4\data\embeddedsw\devicetree\bsp\device-tree-xlnx_v2017_4
路径并点击OK。

点击菜单File > New > Board Support Package
如果前面没有配置正确,出现的对话框的Board Support Package OS部分就只有standalone而没有device-tree选项,这时候需要重头检查自己的配置,最好检查前面文件的路径是否有空格,还有推荐用管理员权限打开SDK,当然最重要的是检查文件是否完全按照规则放置和命名(此处有惨痛教训)。

配置启动参数(定义串行终端和系统镜像位置等)和标准输出:
console=ttyPS0,115200 root=/dev/ram rw initrd=0x800000,8M earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0
可以看出,操作系统镜像在ram中,并从0x80000启动,ramdisk大小为8M(因为我们后面制作的根文件系统是8M大小)等。注意里面的“initrd=0x800000,8M”不能漏掉,否则启动linux时会出现如下错误并卡死。
(启动参数配置参考的digilent-zed.dts中的bootargs一行。我们在devicetree中配置的chosen启动参数会覆盖掉linux内核中默认配置的digilent_zed_defconfig中的CONFIG_COMDLINE。)

配置Console_device选择ps7_uart_1
可以看出,我们使用串口ttyPS0(不是ttyS0)作为终端并配置波特率为115200。

配置kernel version,选择需要生成的匹配合适版本的kernel的DTS。
这里我们选择2017.4,和SDK保持一致。

配置main_memory,选择主运行内存。
这里我们选择ps7_ddr_0。

然后点击”OK”生成设备树文件。

注意:
如果下载的device-tree generator版本和kernel版本不匹配可能会出现错误,要下载匹配的版本进行替换。例如kernel使用2017.4版本,那么DTG也应使用2017.4版本。
如果在运行时提到一个启动错误,则是由于devicetree文件中默认生成的compatible不一致产生的,将文件中的zynq-7000改成zynq-zed即可。

另外,如果不想挂载RAMDISK,而是想把SD卡的第二分区作为根文件系统挂载,那么要修改bootargs。
输入下面参数:
console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0
console:指定控制台的设备以及波特了
root:指定挂载的根文件系统,这里是/dev/mmcblk0p2,当时在创建linaro的sd卡镜像时会特别提示需要在SD卡中创建两个分区,第一个分区是FAT文件系统,存放内核,设备树,BOOT.bin等,而第二个就是存放Linaro根文件系统了,这里也就是对应的mmcblk0p2设备。
rootfstype:制定跟文件系统的类型,这里是ext4
rw:rw参数告诉内核以读写方式加载根文件系统。
earlyprintk:在console设备注册前(也就是printk注册之前)提供对打印函数的支持,这个之前就可以使用early_printk()函数来代替printk()函数
rootwait:让内核等待所有设备都被初始化完成后,再去执行root文件系统的挂载工作。这样可以避免根文件系统驱动初始化成功之前就挂载根文件系统

你可能感兴趣的:(vivado)