至少这对我来说并不新鲜,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 内核的关系?驱动程序开发的某种教程会很好,但即使只是一个没有完全跳过所有细节的概述也足够了。我知道我只能阅读实际的规范,但这又太详细了,很难找到你真正想要的东西,而且对我和大多数其他用户来说,在时间意义上是不现实的。
我已经阅读了许多关于如何使用这些内核构建自定义内核和启动 Ubuntu 的教程,并成功地遵循了指南并启动了自定义内核,但我不了解指南中的每个命令的作用以及实际发生的情况每个命令。
Ubuntu 网站上描述的过程对fakeroot, dpkg, make-kpkg, 一些 initramfs 和其他可怕的东西做了很多工作,但根本无法帮助我理解发生了什么。
makelinux内核目录中的输出是什么?make modules?make modules在之前还是之后make?make自动构建我的模块吗?make install?make install它添加到我的可引导内核列表中,这样我就不必再做任何事情了吗?make modules_install吗?我正在阅读一些如何使用 EFI 存根 (efistub) 加载 Linux 内核的教程。这些指令经常使用内核引导参数add_efi_memmap。预期的硬件是具有 8GB RAM 的 Intel x64。我当前的设置正在运行grub-efi引导加载程序和内核 v3.13。
GRUB引导,而不在add_efi_memmap引导参数:
23BIOS-e820 线数dmesg | grep BIOS-e820: | wc -l 243EFI 内存行计数dmesg | grep efi:\ mem | wc -l24保留的页面GRUB引导与 add_efi_memmap和EFI存储器映射大小似乎确实有所不同:
23 BIOS-e820线57 EFI 内存线22保留的页面EFI 存根启动没有 add_efi_memmap:
22 BIOS-e820线60 EFI …我正在学习关于Linux的Kubuntu我18.04工作站上的网络,我看到有两个NetworkManager和networkd-dispatcher正在运行:
oleg@eclectic:~$ sudo ps -ef | grep -i net
root 56 2 0 Oct11 ? 00:00:00 [netns]
root 1097 1 0 Oct11 ? 00:00:02 /usr/sbin/NetworkManager --no-daemon
root 1098 1 0 Oct11 ? 00:00:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root 1250 1 0 Oct11 ? 00:00:02 /usr/sbin/inetd
root 1593 1097 0 Oct11 ? 00:00:00 /sbin/dhclient -d -q -sf /usr/lib/NetworkManager/nm-dhcp-helper...
Run Code Online (Sandbox Code Playgroud)
NetworkManager似乎被配置为通过netplan以下方式处理“一切” :
oleg@eclectic:~$ cat /etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
version: 2 …Run Code Online (Sandbox Code Playgroud) networking networkmanager linux-kernel systemd-networkd netplan
在我的 Ubuntu 机器上,在/etc/sysctl.conf文件中,我默认注释掉了反向路径过滤选项,如下所示:
#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1
Run Code Online (Sandbox Code Playgroud)
但在/etc/sysctl.d/10-network-security.conf它们中(同样,默认情况下)没有注释掉:
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
Run Code Online (Sandbox Code Playgroud)
那么是否启用了反向路径过滤?哪个配置位置优先?如何检查这些和其他内核选项的当前值?
默认情况下,Linux 操作系统是否有一些固有的东西使它们无法管理电池电源?我原以为像 Lubuntu 这样的轻型发行版会比 Windows 具有明显的电池寿命优势,但事实似乎并非如此。这是硬件供应商的问题——笔记本电脑是否只是为了在 Windows 操作系统上更高效地工作而设计的?
例如,根据我在同一台笔记本电脑上的经验,与 Windows 相比,给定的 linux 发行版的电池寿命似乎总是很短。我的旧笔记本电脑(Thinkpad X61)在启动到 Lubuntu 时的使用寿命几乎是使用 Windows XP 时的一半。在较新的型号上,我在使用 Fedora 20 与 Windows 8.1 时获得了类似的糟糕性能。
我是 OpenBSD 用户。在OpenBSD FAQ 中,它说:
OpenBSD 是一个完整的系统,旨在保持同步。它不是可以单独升级的内核和实用程序。
当您升级系统时,您可以一次性完成;内核和基本系统被替换。然后你去更新你的第 3 方包。如果从源代码编译,则重新编译内核并引导它。然后你重建基本系统,然后是你已经安装的包。如果自上次重建所有内容以来已经过去了几个星期/几个月,您首先安装一个快照并从那里重建(如果您正在关注最新的 CVS 分支)。
具有不同步的内核、基本系统和/或 3rd 方软件包是潜在问题的来源,并且或多或少使您无法从官方邮件列表中获得任何认真的帮助。
我对此很满意。事实上,这也是我使用 OpenBSD 的原因之一。它使系统成为一个一致的单元,并使我很容易对它形成一个心理概述。
在 Linux 上感觉如何?我所知道的大多数 Linux 都没有与 BSD 相同意义上的“基本系统”,而是由分发提供商组装的一组软件包。然后由本地管理员以这样的方式添加更多软件,使得从一开始就有的软件和后来添加的软件之间的界限充其量是模糊的。
Linux(一般而言)是否没有强大的内核与用户空间耦合? 据我所知,内核已更新,就像任何其他软件包一样,这让我有点困惑,这完全是可能的。除此之外,有些甚至编译自定义内核(在 OpenBSD 上不鼓励这样做),并且在其引导菜单中列出了多种不同的内核版本。
谁或什么保证 Linux 系统的各个子系统能够相互协作,即使它们彼此独立更新?
我问的原因是因为该站点上的另一个用户问我是否可以用更新的版本替换他的 Linux 系统中的内核“可行”。从 OpenBSD 方面来看,我不能说是的,这将保证不会破坏系统。
我使用上面的“Linux”作为“Linux 发行版”、内核 + 实用程序的简写。
我知道程序有两个“级别”:用户空间和内核空间。
我的问题是:我只想看到内核程序,或者更好:内核空间上的程序。
这种方法是否正确?
ps -ef|grep "\["
root 1 0 0 20:23 ? 00:00:00 init [4]
root 2 0 0 20:23 ? 00:00:00 [kthreadd]
root 3 2 0 20:23 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 20:23 ? 00:00:00 [kworker/0:0H]
root 7 2 0 20:23 ? 00:00:06 [rcu_sched]
root 8 2 0 20:23 ? 00:00:00 [rcu_bh]
root 9 2 0 20:23 ? 00:00:00 [migration/0]
root 10 2 0 20:23 ? 00:00:00 [migration/1]
root 11 2 0 20:23 ? 00:00:00 [ksoftirqd/1]
root …Run Code Online (Sandbox Code Playgroud) 是否有下载特定内核版本源的资源?比如我想拿到2.6.36.2的源码来和这个包对比,看看有什么变化?
当Linux系统休眠并从休眠状态恢复时,我认为内核需要知道它正在恢复,而不是引导。否则,内核将启动通常的引导过程,并且不会加载交换的数据。内核如何知道它正在恢复?
起初,我认为GRUB(或其他引导加载程序)通过内核参数告诉内核。但只要我检查/proc/cmdline,内核参数就和平常一样了。是否有任何机制让内核知道它正在恢复?