我在 VHDL 中实现了我自己的串行 ATA 主机总线适配器 (HBA) 并将其编程到 FPGA 上。FPGA是可以用任何数字电路编程的芯片。它还配备了串行收发器,可为 SATA 或 PCIe 生成高速信号。
此 SATA 控制器支持 SATA 6 Gb/s 线速,并使用 ATA-8 DMA-IN/OUT 命令以高达 32 MiB 的数据块与设备传输数据。该设计已被证明可以以最大速度运行(例如三星 SSD 840 Pro -> 超过 550 MiB/s)。
在对几个 SSD 和 HDD 设备进行了一些测试之后,我购买了一个新的希捷 6 TB Archive HDD ( ST6000AS0002 )。这款硬盘的读取性能高达 190 MiB/s,但写入性能只有 30 到 40 MiB/s!
所以我深入挖掘并测量了传输的帧(是的,FPGA 设计可以实现)。据我所知,希捷硬盘已准备好一次性接收传输的前 32 MiB。此传输以 580 MiB/s 的最大线路速度进行。之后,硬盘将剩余字节停止超过800 毫秒!然后 HDD 准备好接收下一个 32 MiB 并再次停止 800 毫秒。总而言之,1 GiB 传输需要超过 30 秒,相当于大约 35 MiB/s。
我假设这个 HDD 有一个 32 MiB …
我正在通过 udev 调查动态设备名称映射。
目标:
在多用户系统上,每个用户都可以分配和释放 USB 串行转换器或 PCIe 卡 (FPGA) 等设备。如果用户分配了设备,/dev/<user>/<device>则应使用动态名称和分配用户的权限创建节点。如果用户释放设备,则需要删除/重命名 devfs 节点并撤销权限。
现在的情况:
我正在试验/dev/ttyUSB1- 一个 USB 串行转换器。我编写了一个 Python 脚本,该脚本在创建 dev-node 时从 udev 调用。它需要 USB 设备的 VendorID、ProductID 和 SerialNo,并返回 devfs 节点名称:例如paebbels/ttyUSB。这适用于符号链接,因此原始 devfs 节点ttyUSB1仍然存在。
如何使用我的脚本更改原始 devfs 名称?
我试图在我的 udev 规则中使用 NAME 命令,但它不起作用。文档指出:NAME 只能使用一次。udev 中是否有默认规则在我的规则之前使用 NAME?
/etc/udev/...不包含这样的规则。
在后面的阶段,我的脚本还将返回 devfs 节点的用户名、组和权限。
次要问题:
我应该按计划在/dev/<user>/<device>或 中创建设备文件~/fpga1/<device>吗?