1、概述 NVM Express(NVMe),或称非易失性内存主机控制器接口规范(Non-Volatile Memory express),是一个逻辑设备接口规范。他是与AHCI类似的、基于设备逻辑接口的总线传输协议规范(相当于通讯协议中的应用层),用于访问通过 PCI-Express(PCIe)总线附加的非易失性内存介质,虽然理论上不一定要求 PCIe 总线协议。 此规范目的在于充分利用PCI-E通道的低延时以及并行性,还有当代处理器、平台与应用的并行性,在可控制的存储成本下,极大的提升固态硬盘的读写性能,降低由于 AHCI接口带来的高延时,彻底解放 SATA时代固态硬盘的极致性能。 基于MZ7035FB我们设计了一款PCIE NVME FEP卡,用于NVME测试。 2、搭建FPGA BD工程 3、设置PCIE核 主要对PCIE核的设置说明,其他的不再说明 4、XDC约束文件 5、导入到SDK
5、配置kernel 1)、在路径osrc-lab/scripts/执行source settings64.sh 2)、在路径osrc-lab/sources/kernel/ 执行make menuconfig ARCH=arm 3)、配置NVME驱动,配置好后报存退出 3)、在路径osrc-lab/scripts/kernel 执行save_ kernel _config.sh保存配置。 6、修改设备树 / { amba_pl: amba_pl { #address-cells = <1>; #size-cells = <1>; compatible = "simple-bus"; ranges ; axi_pcie_0: axi-pcie@40000000 { #address-cells = <3>; #interrupt-cells = <1>; #size-cells = <2>; clock-names = "REFCLK"; clocks = <&misc_clk_0>; compatible = "xlnx,axi-pcie-2.9", "xlnx,axi-pcie-host-1.00.a"; device_type = "pci"; interrupt-map = <0 0 0 1 &pcie_intc_0 1>, <0 0 0 2 &pcie_intc_0 2>, <0 0 0 3 &pcie_intc_0 3>, <0 0 0 4 &pcie_intc_0 4>; interrupt-map-mask = <0 0 0 7>; interrupt-names = "interrupt_out"; interrupt-parent = <&intc>; interrupts = <0 29 4>; ranges = <0x02000000 0x00000000 0x80000000 0x80000000 0x00000000 0x04000000>; reg = <0x40000000 0x2000000>; pcie_intc_0: interrupt-controller { #address-cells = <0>; #interrupt-cells = <1>; interrupt-controller ; }; }; misc_clk_0: misc_clk_0 { #clock-cells = <0>; clock-frequency = <100000000>; compatible = "fixed-clock"; }; }; }; |
7、编译并且部署系统到TF卡进行测试 1)、get_hw_description.sh 2)、make_uboot.sh 3)、make_kernel.sh 4)、create_image.sh 插入TF卡 5)、make_parted.sh 6)、deploy_image.sh 完成卡的制作 但是需要对uEnv.txt修改增加cma=128M
8、测试 弹出Tf卡一定不要带电插拔,把TF卡插入到开发板,上电启动。 1)、查看设备节点 输入名令: cd /dev ls 可以看到设备节点 2 )、查看磁盘 输入命令: fdisk -l 即可看到磁盘的大小 3 )、格式化SSD fdisk /dev/nvme0n1 4 )、测试读速度 time dd if=/dev/zero of=/dev/nvme0n1 bs=2M count=1024 5 )、测试写速度 time dd if=/dev/nvme0n1 of=/dev/null bs=2M count=1024
|