1. 访问DDR3
我们使用名为DDR3-test.c的PetaLinux应用访问DDR3存储器。该应用经过精心设计,可向DDR存储器位置写入数据并从这里读取数据。DDR3是双列直插式存储器模块,可提供用于存储用户代码和数据的SDRAM。如上文所述,用户需要知道DDR存储器的开始地址和结束地址,分别是0xC0000000和0xC7FFFFFF。存储器的容量为512兆字节。Linux内核驻留在DDR存储器的初始存储器位置。因此需要选择DDR3存储器的写入位置,以避免破坏Linux内核。我们使用以下命令向DDR3存储器写入数据:
#DDR3-test –g 0xc7000000 –o 15
其中DDR3-test是应用名称、-g是DDR3存储器的物理地址、-o是输出、15是准备在0xc7000000位置写入DDR3存储器的值。为测试该值是否能写入预计的位置,我们使用以下命令从DDR3存储器读取数据:
#DDR3-test –g 0xc7000000 –i
图7:通过QEMU运行PetaLinux
该应用旨在控制8位离散输出,可通过将板载LED连接至GPIO进行测试。
值15显示在终端上,这说明DDR3存储器读写操作正在成功进行。
2. 使用/dev/mem访问GPIO
对于接下来的应用测试,我们使用名为gpio-dev-mem-test.c的PetaLinux应用访问了通用I/O(GPIO)。该应用的设计目的是控制8位离散输出并通过将板载LED连接至GPIO来测试该输出。要从用户空间访问任何设备,就要先打开/dev/mem,然后使用mmap()将设备映射至存储器。我们所使用LED GPIO的开始地址和结束地址分别是0x40000000 和0x4fffffff。
GPIO外设具有两个寄存器:数据寄存器(GPIO_DATA)和方向寄存器(GPIO_TRI_OFFSET)。为了读取GPIO的状态,我们将方向位设置为1(即GPIO_TRI_OFFSET=1)并且从数据寄存器读取数据。为了将数据写入到GPIO,我们设置方向位为0并写入值到数据寄存器。在PetaLinux终端上使用下列命令将数据写入到GPIO:
#gpio-dev-mem-test –g 0x40000000 –o 255
其中gpio-dev-mem-test为应用名称,-g为GPIO物理地址,-o为输出,255为从GPIO(连接到LED)发送的值。LED按编写的程序点亮时,测试的结果就得到了验证。
3. 使用UIO访问GPIO
访问GPIO的另一个途径是通过用户空间输入/输出。我们通过UIO,使用名为gpio-uio-test.c的PetaLinux应用访问了GPIO。该应用旨在控制8位离散输出,可通过将板载LED连接至GPIO进行测试。UIO设备在文件系统中表现为/dev/uioX。为通过UIO访问GPIO,我们打开了/dev/uioX或sys/class/ui0,然后使用了mmap()调用。我们配置了内核使之支持UIO,并在内核中启用了UIO框架。随后我们使用名为“Compatibility”的参数,根据UIO设备(而非标准GPIO设备)对LED的GPIO控制方式进行了设置。此外,我们还将
设备的标签从 gpio@40000000修改成了leds@40000000。
然后我们重新构建了PetaLinux,并使用UIO测试了GPIO访问。我们使用以下命令,获得了所加载UIO模块的详细信息:
# ls /sys/class/uio/ uio0 uio1 uio2
UIO的名称和地址可在/sys/class/uio/uioX下找到。我们使用以下命令通过UIO驱动程序访问了GPIO LED:
# cd “/sys/class/uio/uioX
# gpio-uio-test -d /dev/uio1 -o 255
其中gpio-uio-test为应用名称、-d为设备路径、-o为输出、255为通过UIO传递给GPIO的值。使用以上命令,LED按写入到GPIO线路上的数据点亮,验证了该结果。
4. 文件传输应用
最后一项测试,我们将文件从服务器传输到了客户端,这里的服务器是主机PC,客户端是KC705电路板。在这项测试中,我们使用以太网线缆连接服务器和客户端,并使用了小型文件传输协议(TFTP)。这种协议因简单而出名,通常用于自动传输配置文件或引导文件。为测试使用TFTP从服务器向客户端传输文件的情况,我们在/tftpboot位置为服务器PC创建了一个名为test的文件。我们使用以下命令在文件中写入了“世界,你好”并查看了该文件中的内容(如图8所示):
@ echo “Hello World” 》 /tftpboot/test
@ more /tftpboot/test
图8:在服务器中创建文件的快照
图9:在客户端接收文件的快照
图10:从客户端到服务器传输文件的快照
图11:在服务器中接收文件的快照
为从服务器接收该文件,我们在以客户端方式运行在KC705电路板上的PetaLinux终端窗口中输入以下获取命令(-g):
# tftp -r test -g 192.168.25.68
# ls –a
在客户端中创建了一个名为“test”的新文件(如图9所示)。我们可以使用更多内容命令查看该文件的内容,如图9所示:
同样,如果要从客户端向服务器传输文件,可先在客户端机器上创建一个名为test1的文件,其内容为“PetaLinux OS”。然后在运行在客户端上的PetaLinux终端中使用以下“放置”命令(-p),便可将该文件从客户端传输至服务器,如图10所示:
# tftp -r test1 -p 192.168.25.68
可在服务器中创建一个空白文件test1,其内容可在文件传输工作完成后读取。该内容可图11所示方法进行验证。
在FPGA上实现嵌入式系统和运行PetaLinux,操作起来非常简单直观。接下来,我们计划使用远程编程实现设计,即引导文件通过以太网传输,客户端能够运行新应用。
评论
查看更多