device-tree作为硬件设计和软件设计之间的参数传递,必须和zingboard的硬件和软件对应上。
本次手记所需的环境为:
1、ISE 14.4
2、ADI的内核在linux系统上
3、ADI的参考设计
这次开发手记所用的硬件设计使用的是ADI所提供的参考设计,https://github.com/analogdevicesinc/fpgahdl_xilinx/tree/edk_14_4_2013_08_02,我所用的是zc702,zingboard的硬件与zc702相似。cf_adv7511_zc702和cf_lib是必须的,其他的可以不下载。所用的软件版本是ISE 14.4。
用XPS打开cf_adv7511_zc702中的system.xmp,因为SD控制器有一个WP的脚,硬件上是没有的,所以打开后需要修改I/O peripherials,把这一项去掉。还需要勾选上Timer 0和Watchdog,不然在启动内核的时候会出现找不到Timer和Watchdog的现象。
点击Close,然后保存一下。点击左侧栏的Gernerate BitStream,生成完成后,点击Export Design。
打开SDK后,需要到xilinx的官方github下载device-tree的repositories,https://github.com/Xilinx/device-tree。下载后,新建一个文件夹并重命名为device_tree在工程SDK_export中,并把下载的文件复制进去,点击
SDK中xilinx tools->Repositories,会跳出preference点击右边的new,选择device_tree的路径。选择后完,点击下面的Rescan Repositories,然后点击OK退出。接下来再新建一个device-tree的BSP,点击File->new->Board Suport Package,在跳出的窗口的左下角有一点的device-tree的选项,这个选项在添加repositories之前是没有的,然后点击finish。会跳出一个设置的框框,可以不理会它,也可以参考这里面的信息。http://xilinx.wikidot.com/device-tree-generator
如果在Project中的Build Automatically有勾选的话,工程就会自动build,没有勾选一下后就会自动build。build完成后在bsp中的libsrc中device-tree_v0_00_x中有一个xilinx.dts就是decive-tree的原文件,可以用来生成.dtb文件。
如果以为就用这个.dts文件生成.dtb文件就万事大吉了,那就大错特错了。那是在保证这个dts文件与所要用的linux内核中的配置和参数都一致的情况下。
在这个dts文件中,我们需要添加一些内容进去,并且对比与内核中的一些参数,保证这些参数一致了,再生成dts。
下面是我在启动内核时,出现过的问题,以及修改过的地方。打写字板打开.dts文件。详看图片。
如果想从SD的第二分区启动内核,需要把bootargs参数修改为
bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0";
当然,你也需要把SD卡格成两个分区。这个下次再写。
我在启动内核时,碰到最多的问题就是CPU时钟没有提定,Timer没有时间或者Watchdog没有检测到。碰到这些问题要先看Timer和Watchdog有没有,就是上面说的,在xmp中要添加Timer和Watchdog。
再看Timer和Watchdog的设备树的参数是否正确。
修改完后,把这个.dts文件拷完虚拟机中ADI的内核文件夹中,Ctrl+T打开终端,用root进入内核的文件夹。然后输入下面这条命令,会在这个目录下生成一个devicetree.dtb的文件。
./scripts/dtc/dtc -I dts -O dtb -o ./devicetree.dtb ./xilinx.dts
本次device-tree的生成和修改的手记到此结束。