至少这对我来说并不新鲜,SATA 实际上“谈论”SCSI,因此为什么这些 SATA 设备在 Linux 中显示为 SCSI 设备。
之前有人问过一个相关的问题,例如为什么我的 SATA 设备会出现在 /proc/scsi/scsi 下?
然而,在我之前讨论过的地方没有提到的是 SATA 与 SCSI 的关系,以及它们的不同之处。
我认为它们在物理层上有所不同是理所当然的,因为它们不共享兼容的电缆。
但是,堆栈的更高位置呢?我知道 Linux 如何将现代内核上的 SATA 甚至 IDE 磁盘表示为 SCSI 到 SCSI 子系统。但是总线上使用的实际协议呢?
我也知道 ATAPI 是对 SCSI 的封装,但是常规的 ATA 呢?我注意到 SCSI 的一些特性,例如 NCQ、FUA、DPO 等(如果我没记错的话)已经从 SCSI 中采用了。但不清楚有多少 SCSI 命令集实际上是共享或相似的。
具有 ATA 规范的现代 SATA 设备是否实现了 SCSI 命令集的子集,但进行了封装(如在 ATAPI 中)?同一套?超集?或者可能只有选定的功能作为不完全相同的变体来实现?
我在哪里可以找到关于此的一些明确信息,尤其是它与 Linux 内核的关系?驱动程序开发的某种教程会很好,但即使只是一个没有完全跳过所有细节的概述也足够了。我知道我只能阅读实际的规范,但这又太详细了,很难找到你真正想要的东西,而且对我和大多数其他用户来说,在时间意义上是不现实的。
我已经通过手册看hdparm,sdparm。我知道有一些参数可以用和来降低驱动器的转速。我也知道有一些参数可以控制省电功能,例如和。但是我要的是启动马达和自旋向上的驱动器。-y-Y-S-B
我看到sdparm 的手册页有load和start参数。可以使用其中任何一个吗?它看起来更像是适合磁带驱动器的东西,或者最适合光驱的东西?
dd if=/dev/hdX of=/dev/null count=512根据我使用什么命令来启动“待机启动”驱动器,似乎是最佳答案?
但是,当它已经在缓存中时,驱动器将不会启动。
似乎很奇怪,没有命令明确告诉设备启动电机/旋转。
在 GNU/Linux 中启动 SATA HDD 的最佳方法是什么?
关于如何使用 xmodmap 将修饰符 + 某个键绑定到新键的示例似乎很少。
例如,我想绑定 left Shift(keycode 50) + `(keycode 21) 以发出重音符:
`
这是挪威语键盘的正常行为,但不适用于 Macbook Pro(运行 Linux)。
我正在使用 xev 来获取键码,我可以成功地映射单键按下(在我找不到的另一篇文章的帮助下)以这种方式获取必要的其他键,例如退格键和美元符号:
keycode 134 = ISO_Level3_Shift Multi_key ISO_Level3_Shift Multi_key
keycode 21 = backslash bar
Run Code Online (Sandbox Code Playgroud)
但是我该怎么做:
keycode 50 + keycode 21 = Grave character
Run Code Online (Sandbox Code Playgroud)
这不是正确的语法,但它应该使我想要清楚。
一般来说,如何在语法中正确使用像 shift 这样的修饰键?只能组合使用修饰键吗?
我尝试过一些简单的事情,例如“keycode 50 keycode 21 = A”和“keycode 50 + keycode 21 = A”。(“A”不是我想要的字符,我只是将它用于测试目的)。
# Automatically generated file; DO NOT EDIT
Run Code Online (Sandbox Code Playgroud)
位于内核配置文件的头部:/usr/src/linux/.config
我的问题是你为什么不应该编辑这个文件?如果我确切地知道我需要什么,或者我想删除什么,那么直接编辑这个文件有什么问题?
!作为某个字符串的前缀将执行命令缓冲区中以给定(部分)字符串开头的任何命令。它还有一些其他用途。请参阅理解 bash 中的感叹号 (!)
我的问题是,如何在执行命令之前预览将要执行的命令?例如,如果我这样做!for,并且我之前已经编写了几个以“for”开头的命令,但我不完全确定我认为是最后一个的命令是否确实是我认为的命令。如果 bash 可以在实际执行命令之前向我显示将要执行的命令是什么,那将非常有用。有什么办法可以在 bash 中做到这一点吗?