*** e.g. console=, root=/dev/ram rw ip=:::::eth0:dhcp earlyprintk
*** Some example values for are ttyPS0 when using Zynq, ttyUL0 when using the UART Lite soft ip, or ttyS0 when using the UART16550 soft ip.
In the Linux source directory, there are also some DTS files available for use in linux-xlnx/arch//boot/dts/.
Compiling a Device Tree Blob (.dtb) file from the DTS
A utility called DTC is used to compile the DTS file into a DTB file. DTC is part of the Linux source directory. linux-xlnx/scripts/dtc/ contains the source code for DTC and needs to be compiled in order to be used. One way to compile the DTC is to build the Linux tree.
Once the DTC is available, the tool may be invoked to generate the DTB:
./scripts/dtc/dtc -I dts -O dtb -o .dtb .dts
DTC may also be used to convert a DTB back into a DTS:
./scripts/dtc/dtc -I dtb -O dts -o .dts .dtb
Alternative: For ARM only
In the Linux source directory, making the target 'dtbs' will compile all DTS files from linux-xlnx/arch/arm/boot/dts/ into DTB files.
make ARCH=arm dtbs
The compiled DTB files will be located in linux-xlnx/arch/arm/boot/dts/.
A single linux-xlnx/arch/arm/boot/dts/.dts may be compiled into linux-xlnx/arch/arm/boot/dts/.dtb:
make ARCH=arm .dtb
5.2. 懒兔子博客方法
在上一篇博文中,我已经介绍了建立AXI总线自定义外设的全过程,包括Verilog逻辑部分,和裸机软件部分。裸机控制外设是非常简单的,与普通的单片机并无二异,但仅仅有裸奔代码还远远
无法发挥Cortex-A9硬核的作用,毕竟Zynq芯片集成了一颗最高能跑到1GHz的双核CPU(ZedBoard上的XC7Z020只能到800MHz)。并且ZedBoard上配备了Gigabit Ethernet、HDMI
和USB OTG接口,不运行操作系统岂不浪费。
有朋友想要在ZedBoard上做WinCE,但这方面的资料极为稀缺,而WinCE又是体积庞大、版权成本很高的操作系统,于是开源有小巧的嵌入式Linux就成了首选。之前兔子为了做出图形界
面,还致力于移植桌面型的Linaro Ubuntu系统,不过ADI给出的参考例子未经优化奇卡无比,Xillinux正式版迟迟未现又只支持色彩度很低的简易VGA接口(ZedBoard上的VGA甚至到不了
16位色),于是兔子不得不放弃之前的工作,重新启用ZedBoard出厂默认的轻量级Linux上。这个系统没有图形桌面,但已包含了网卡、HDMI驱动和其他基本功能,足够使用了。
想要在Linux下控制外设,最重要的一环就是驱动了,但在动手写驱动之前,先要做些准备工作。为了减少工作量,我们就直接修改ZedBoard的出厂Demo,加入之前完成的my_gpio外设,
并通过U-Boot实现Bootloader功能。这个Demo的源工程可以在Digilent网站的ZedBoard页面找到:
?NavPath=2,400,1028&Prod=ZEDBOARD
点击下面的Download,可以下载到ZedBoard_OOB_Design.zip文件,这个压缩包里包含了XPS工程、U-Boot文件、Linux内核配置文件、DeviceTree源文件、rootfs等。README.txt
中有相近的操作说明,建议通读一遍。
ZedBoard上默认的XPS系统工程位于hw\xps_proj文件夹下,双击system.xmp打开工程,按照之前所说的方法,将my_gpio外设IP核导入到工程中。
传送门:ZedBoard学习手记(二) 开发自定义AXI总线外设IP核——以LED和开关为例
之后,查看一下XPS是否为我们的外设分配了地址空间,如果没有,就需要手动设置一个地址,这里我们设成0x75C80000,空间大小为AXI设备统一的64K。
按照ZedBoard学习手记(二)中的方法设置总线连接,结果如下图:
修改xps_proj\data\system.ucf文件,为my_gpio外设分配外部引脚(ucf约束文件中的引脚名称和Ports中的一定要相同,已经有不少网友在这里出过问题了)。另外我们分配的引脚占用
了原来ARM的GPIO 引脚位置,应在XPS的Port列表里将processing_system7_0_GPIO数量设为[0:6]或干禁用,以除后患。
完成后先单击Generate BitStream生成配置数据,再点击Export Design,选Export & Launch SDK将硬件信息导出到SDK中。
在SDK里,新建一个C工程,不同于裸机的HelloWorld,这次要建立的是Bootloader,因此选择FSBL工程,即First Stage Bootloader,用实现U-Boot之前的初始化和启动工作。其他
选项默认即可。
编译一下工程,完成后SDK会生成FSBL的elf文件,另外加上从XPS导出的System.bit,以及我们在第一篇文章中编译生成的u-boot.elf,就可以生成用来实现SD卡启动系统的完整Bootloader文件了。
u-boot.elf在ZedBoard_OOB_Design中包含,不过这个兔子没试过,通过Xilinx U-Boot编译生成u-boot.elf的方法请见:ZedBoard学习手记(一) First Step——建立Xilinx交叉编译环境
集齐这三个文件之后,点击Xilinx Tools→Create Boot Image,添加到列表中,选择一个输出路径,就可以创建Bootloader了。
评论
查看更多