mt7628 pcie挂载nvme并测试
默认情况下openwrt并没有启用nvme特性
需要使用make kernel_menuconfig 进入 Device 设置并启用NVMe
编译后启动内核panic如下
[ 0.810128] Kernel bug detected[#1]:
[ 0.813779] CPU: 0 PID: 9 Comm: kworker/u2:1 Not tainted 4.14.162 #0
[ 0.820240] Workqueue: nvme-wq nvme_reset_work
[ 0.824749] task: 87c22d00 task.stack: 87cfa000
[ 0.829336] $ 0 : 00000000 00000001 80276b18 00000001
[ 0.834642] $ 4 : 87c1f8e8 00000000 87cfbd70 87d55c00
[ 0.839948] $ 8 : 00000000 00000008 00000000 00000001
[ 0.845252] $12 : 00000000 00000400 ffffffff 00000000
[ 0.850556] $16 : 87c1f8e8 87c1f844 87c1f800 804c0000
[ 0.855862] $20 : 87cf6c00 00000000 87c1f8e8 00000088
[ 0.861169] $24 : 00000400 c71307b5
[ 0.866475] $28 : 87cfa000 87cfbd50 804d0000 802752e4
[ 0.871784] Hi : 00000000
[ 0.874699] Lo : 00000001
[ 0.877624] epc : 80276b18 nvme_pci_reg_read64+0x0/0x4
[ 0.883012] ra : 802752e4 nvme_init_identify+0x94/0x6e0
[ 0.888568] Status: 11009403 KERNEL EXL IE
[ 0.892819] Cause : 10800024 (ExcCode 09)
[ 0.896883] PrId : 00019655 (MIPS 24KEc)
[ 0.900942] Modules linked in:
[ 0.904045] Process kworker/u2:1 (pid: 9, threadinfo=87cfa000, task=87c22d00, tls=00000000)
[ 0.912506] Stack : 80038118 87c22d00 87e11600 87c1f844 87c1f800 87e11600 87c1f844 87c1f870
[ 0.920994] 87c1f87c 87cf6c00 00000000 801f35d4 87cf6c00 87c1f844 00000000 00000000
[ 0.929478] 87c1f844 87c1f844 87e11600 87c1f800 87ce9680 c71307b5 87c1f938 87c1f844
[ 0.937964] 87c1f800 87ce9680 87cf6c00 00000000 87c1f8e8 802785f8 87cb6198 00000000
[ 0.946448] 00000000 80024450 00000002 8003516c 87ce9d00 87c22d00 00000000 00000000
[ 0.954932] ...
[ 0.957413] Call Trace:
[ 0.959894] [<80276b18>] nvme_pci_reg_read64+0x0/0x4
[ 0.964930] [<802752e4>] nvme_init_identify+0x94/0x6e0
[ 0.970142] [<802785f8>] nvme_reset_work+0x488/0x1164
IDA反汇编后发现上述崩溃点的代码竟然是
.text:000011E8 # =============== S U B R O U T I N E =======================================
.text:000011E8
.text:000011E8
.text:000011E8 nvme_pci_reg_read64: # DATA XREF: .rodata:00004570↓o
.text:000011E8 break 0x3000
.text:000011E8 # End of function nvme_pci_reg_read64
查看源代码 drivers/nvme/host/pci.c
static int nvme_pci_reg_read64(struct nvme_ctrl *ctrl, u32 off, u64 *val)
{*val = readq(to_nvme_dev(ctrl)->bar + off);return 0;
}
可能是mips这个平台并没有readq这个函数,寻找其他readq发现
/** Some devices and/or platforms don't advertise or work with INTx* interrupts. Pre-enable a single MSIX or MSI vec for setup. We'll* adjust this later.*/result = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_ALL_TYPES);if (result < 0)return result;dev->ctrl.cap = lo_hi_readq(dev->bar + NVME_REG_CAP);
这可能是一个workaround,所以把上述代码的readq改成lo_hi_readq即可,如下
static int nvme_pci_reg_read64(struct nvme_ctrl *ctrl, u32 off, u64 *val)
{*val = lo_hi_readq(to_nvme_dev(ctrl)->bar + off);return 0;
}
编译openwrt并刷机启动,果然识别到了nvme (建兴T11 Plus 256G)
root@OpenWrt:/# lspci
00:00.0 PCI bridge: MEDIATEK Corp. Device 0801 (rev 01)
01:00.0 Non-Volatile memory controller: Lite-On Technology Corporation Device 5100 (rev 01)
root@OpenWrt:/# ls /dev/nvme*
/dev/nvme0 /dev/nvme0n1 /dev/nvme0n1p1
挂载ext4分区后,测速
root@OpenWrt:/mnt# time dd if=/dev/zero of=./640MB.bin bs=64k count=10000 conv=fsync
10000+0 records in
10000+0 records out
real 0m 14.64s
user 0m 0.02s
sys 0m 12.72s
root@OpenWrt:/mnt# time dd if=./640MB.bin of=/dev/null bs=64k count=10000
10000+0 records in
10000+0 records out
real 0m 8.14s
user 0m 0.02s
sys 0m 7.47s
计算后,写入速度 43.71MB/s 读取速度 78.62MB/s,还算不错!
mt7628 pcie挂载nvme并测试相关推荐
- 基于PCIe的NVMe协议在FPGA中实现方法
NVMe协议是工作在PCIE的最上层协议层的,故需要先搞清楚PCIE.本文基于Xilinx的UltraScale+,开发工具为Vivado2021.2.学习中以spec为主,其它资料辅助参考(重点介绍 ...
- 微星970A-G43 主板 PCIE接NVME固态硬盘无法启动Win7,解决方案
微星970A-G43 主板 PCIE接NVME固态硬盘无法启动Win7解决心路! 华硕M5A97主板添加 PCI NVME硬盘 ADM970芯片组添加PCIE NVME硬盘,并WIN7启动问题. 97 ...
- linux nvme固态硬盘,Linux PCIe SSD NVME 性能调优篇
直接来干货!怎么调优 PBlaze IV PCIe SSD NVMe. Go! 1. 中断绑定 在Redhat 6.5中的NVMe驱动会自动把全部的中断向量绑定到core0上,如果有多个SSD, c ...
- [固态硬盘协议 第3回] 你懂 PCIE 和 NVME是如何相依相恋?
前言 固态硬盘中的王者,一说非PCIE 莫属,一说非NVME SSD 莫属. PCIE 和 NVME 因何而生? PCIE 和 NVME 的联系和区别? 本着对 PCIE 和 NVME 的好奇心,本文 ...
- MIPI C-PHY/D-PHY/ UFS/ SDIO/eMMC/DP/eDP/DDR5/LPDDR5/I3C/PCIE/Automotive Ethernet/Serdes......测试方案
MIPI C-PHY/D-PHY/ UFS/ SDIO/eMMC/DP/eDP/DDR5/LPDDR5/I3C/PCIE/Automotive Ethernet/Serdes-测试方案介绍_Reete ...
- [元带你学NVMe协议] PCIe 和 NVME 寄存器
声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言. 个人辛苦整理,付费内容,禁止转载. 内容摘要 前言 NVMe(Over PCIe)寄存器主要分为两类,一类是PCIe配置空 ...
- [NVME协议8] : 从传输层看PCIE 和 NVME 交互
声明 主页: 元存储的博客_CSDN博客 https://blog.csdn.net/vagrant0407?type=blog 本文依据公开知识及个人经验整理而成,如有错误请留言. 文章为个人辛苦整 ...
- XFS为例 讨论NVMe SSD测试注意事项
之前一篇<测给你看!异步I/O模式下NVMe SSD性能有多高>文章,介绍了同步I/O和异步I/O模式下NVMe SSD性能的差异,更高性能的存储设备也需要更高的压力才能显示其性能优势.在 ...
- 微星970A-G43 主板 PCIE转NVME固态硬盘做WIN10启动盘,解决方案
本人有台微星A970-G43主板,只支持sata3的硬盘.无奈现在M2接口的固态硬盘速度飞快,心痒也想搞一搞,又不想换平台.查看网上资源说更新bios可以支持PCIE转NVME固态硬盘. 买了一块转接 ...
最新文章
- 在Windows 7下安装Oracle 11g的解决方法
- c语言字母g,C语言库函数(G类字母) - 1.doc
- ThinkSNS积分商城系统 一站式解决企业商城建站需求
- Yii2 获取URL的一些方法
- 堆排序(利用最大堆)
- CNCF发布K8s项目历程报告,35k贡献者有你吗?
- 【Python】Jupyter Notebook 配置路径
- C语言,计算数据类型及所对应的字节数。
- 数据库的跨平台设计(转)
- 什么是北京54坐标系
- word中公式添加序号后字体变小问题的解决方案(2010和2016两个版本)
- The Top 50 ‘Pictures of the Day’ for 2011
- Start Developing iOS Apps (Swift) 学习笔记 (1)
- bMap+Echarts--百度地图使用方法
- 谷歌人工智能检索开普勒望远镜数据后,找到了“迷你太阳系”
- 【时间序列分析】11.AR(1)和AR(2)模型
- 如何使用mount命令远程挂载
- 页面拖动功能jquery +js+html5 移动 弹出框 拖动 弹出框 拖动 div 拖动 弹出框
- 【推荐系统】召回离线评估指标Hit Ratio
- BZOJ1191 超级英雄Hero
热门文章
- win2003能装mysql_Windows2003系统安装mysql小结
- 八进制数输出二进制c语言,C语言 某数输出二进制的某位
- 某计算机型号,某计算机的型号为486/33,其中33的含义是?
- ctf(pwn) canary保护机制讲解 与 解密方法介绍
- 解决UbuntuE: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
- 2014 ecb,_it’s_easy_as_123(修改bmp文件头) 攻防世界;
- compact php,php中compact函数的功能起什么作用呢?
- C语言预定义宏 __func__、__FUNCTION__、__LINE__、__FILE__、__DATE__、__TIME__
- python绘制柱状图,如何改变柱状柱间距,如何设置横纵轴标签(绘制Intel Realsense D435深度误差柱状图)
- python dict()函数(用于创建一个字典)