我知道交换 - 这个问题不是关于那个。在 dmesg 中,Linux (x86-64) 内核告诉我我有多少内存:
[ 0.000000] Memory: 3890880k/4915200k available (6073k kernel code, 861160k absent, 163160k reserved, 5015k data, 1596k init)
Run Code Online (Sandbox Code Playgroud)
cat /proc/meminfo 告诉我我有
MemTotal: 3910472 kB
Run Code Online (Sandbox Code Playgroud)
根据我的计算,我认为我应该正好有 4*1024*1024=4194304k RAM。这是方式比上面dmesg的行第二个数字小!
所有这些不同的数字是怎么回事?
顺便说一下,uname -a输出:
Linux pavilion 3.2.2-1.fc16.x86_64 #1 SMP Thu Jan 26 03:21:58 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud) 我的软件 RAID6 的 I/O 经常冻结大约 30 秒,之后一切都恢复正常。
冻结结束后,将其放入系统日志:
Mar 14 18:43:57 server kernel: [35649.816060] sd 5:0:23:0: [sdy] CDB: Read(10): 28 00 6c 52 68 58 00 04 00 00
Mar 14 18:43:58 server kernel: [35651.149020] mptbase: ioc0: LogInfo(0x31140000): Originator={PL}, Code={IO Executed}, SubCode(0x0000) cb_idx mptscsih_io_done
Mar 14 18:43:58 server kernel: [35651.151962] mptscsih: ioc0: task abort: SUCCESS (rv=2002) (sc=ffff8807b02dfe80)
Mar 14 18:43:58 server kernel: [35651.151967] mptscsih: ioc0: attempting task abort! (sc=ffff88002a7f30c0)
Mar 14 18:43:58 server kernel: [35651.151972] sd 5:0:23:0: [sdy] CDB: Read(10): …Run Code Online (Sandbox Code Playgroud) 内核 Kconfig 文件之间select和depends on内核中的依赖项有何不同?
config FB_CIRRUS
tristate "Cirrus Logic support"
depends on FB && (ZORRO || PCI)
select FB_CFB_FILLRECT
select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT
---help---
This enables support for Cirrus Logic GD542x/543x based boards on
Amiga: SD64, Piccolo, Picasso II/II+, Picasso IV, or EGS Spectrum.
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,与 和 的FB_CIRRUS关系如何不同?FB && (ZORRO || PCI)FB_CFB_FILLRECTFB_CFB_COPYAREAFB_CFB_IMAGEBLIT
更新
我注意到这depend on在编译顺序方面并没有太大作用。
例如。AppB 的成功构建取决于首先构建静态链接的 LibB。depends on LibB在 Kconfig 中为 AppB设置不会强制首先构建 LibB。设置select LibB会。
我目前运行 Angstrom Linux 2.6.32。我打算将 linux 内核从 2.6.32 升级到 3.0.7。出于这个原因,我不得不配置内核 3.0.7 运行make menuconfig.
现在,我想将新的内核配置与以前的配置进行比较,但找不到内核 3.0.7 配置文件。有任何想法吗?
我正在尝试了解 Linux 进程。我对各自的术语感到困惑pid_max,ulimit -u和thread_max。
这些术语之间究竟有什么区别?有人可以澄清这些差异吗?
来自 Mauerer 的 Linux 内核架构,
内核线程是由内核本身直接启动的进程。它们将内核函数委托给一个单独的进程,并在那里与系统中的其他进程“并行”执行(实际上,与内核本身的执行并行)。内核线程通常被称为(内核)守护进程。例如,它们用于执行以下任务:
- 定期将修改的内存页面与页面来源的块设备同步(例如,使用 mmap 映射的文件)。
- 将很少使用的内存页写入交换区。
- 管理延迟的操作。
- 为文件系统实现事务日志。
基本上,有两种类型的内核线程:
- 类型 1 — 线程启动并等待,直到内核请求执行特定操作。
- 类型 2 — 一旦启动,线程就会定期运行,检查特定资源的利用率,并在利用率超过或低于设定的限制值时采取行动。内核使用这种类型的线程进行持续监控任务。
由于 Mauerer 的书说内核线程是进程,我认为它们必须在用户模式下运行,而不是在内核模式下运行。(或者我错了?进程可以在不同时间以用户模式或内核模式运行,还是仅在一种模式下运行?)
但是 Bovet 的《Understanding Linux Kernel》说内核线程只在内核模式下运行(见下面的引述)。两本书中“内核线程”的概念是同一个概念吗?
传统的 Unix 系统将一些关键任务委托给间歇运行的进程,包括刷新磁盘缓存、换出未使用的页面、服务网络连接等。事实上,以严格的线性方式执行这些任务是没有效率的。如果在后台调度它们的功能和最终用户进程,它们都会得到更好的响应。因为一些系统进程只在内核模式下运行,现代操作系统将它们的功能委托给内核线程,内核线程不会受到不必要的用户模式上下文的影响。在 Linux 中,内核线程在以下方面与常规进程不同:
- 内核线程仅在内核模式下运行,而常规进程在内核模式和用户模式下交替运行。
- 因为内核线程只在内核模式下运行,所以它们只使用大于 PAGE_OFFSET 的线性地址。另一方面,常规进程在用户模式或内核模式下使用所有 4 GB 的线性地址。
Mauerer 的书说内核线程是由内核直接启动的,而且似乎还说守护进程是内核线程的同义词。所以我认为守护进程必须由内核直接启动。
但是https://unix.stackexchange.com/a/193918/674说那个screen守护进程是由screen用户界面启动的(见下面的引用)。我认为screen用户界面是一个进程,而不是内核。是的概念daemon在Mauerer的书,并在链接的答复同一个概念?
当您第一次启动时
screen,您实际上是在启动一个用户界面 (ui),它默认会创建一个守护进程(会话管理器)。
总的来说,您如何理解“内核线程”、“进程”和“守护进程”的概念,它们的关系和区别?
$ k=v p &
[1] 3028
Run Code Online (Sandbox Code Playgroud)
有什么方法可以在仍在运行时p更改/proc/3028/environ不提及的内容吗?k=v p
我们有基于 BBB 的定制板,上面运行着内核 3.12。
我对 umount 和 & 同步有疑问。
假设脚本正在卸载分区,是否需要sync在umount完成挂起写入之前运行命令。?
我花了一个月的大部分时间尝试在我的Debian 9 (Stretch)上安装、重新安装、手动删除和重新安装最新的 linux-image-4.9.0-8(或其他版本),但它总是会(重新)启动进入那个错误版本的 Linux 3.16.0-5。
我什至删除了整个/boot目录内容并重新安装。
我有一个标准的 Debian 9 安装到/dev/sda驱动器中/dev/sda1,/boot独立分区在哪里。
我的清单:
/etc/kernel-img.confapt而不是apt-get这是我在这里遇到的一个谜题系统。
最新的目录/boot是:
$ ls -lat /boot
total 106000
drwxr-xr-x 23 root root 4096 Jan 17 12:25 ..
drwxr-xr-x 2 root root 4096 Jan 17 12:17 grub
drwxr-xr-x 3 root root 4096 Jan 17 12:17 .
-rw-r--r-- …Run Code Online (Sandbox Code Playgroud) 我有一个 hello world 内核模块的源代码,它可以在笔记本电脑的 Ubuntu 20 中运行。现在我正在尝试在 Ubuntu 20 中但在 WSL2 中编译相同的代码。为此,我正在使用这个:
make -C /sys/modules/$(shell uname -r)/build M=$(PWD) modules
Run Code Online (Sandbox Code Playgroud)
问题是那/lib/modules是空的。好像 WSL2 什么都带不进来/lib/modules/4.19.104-microsoft-standard/build
我尝试使用以下方法获取标题:
sudo apt search linux-headers-`uname -r`
Sorting... Done
Full Text Search... Done
Run Code Online (Sandbox Code Playgroud)
但是在模块文件夹中没有填充任何内容
为了该文件夹包含所有必需的模块,我需要做什么吗?
[编辑]
感谢@HannahJ,越来越近。
我在做:
> sudo make -C /home/<user>/WSL2-Linux-Kernel M=$(pwd) modules
SL2-Linux-Kernel M=$(pwd) modules
make: Entering directory '/home/<user>/WSL2-Linux-Kernel'
CC [M] /home/<user>/containers-assembly-permissionsdemo/demo-2/lkm_example.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/<user>/containers-assembly-permissionsdemo/demo-2/lkm_example.mod.o
LD [M] /home/<user>/containers-assembly-permissionsdemo/demo-2/lkm_example.ko
make: Leaving directory '/home/<user>/WSL2-Linux-Kernel'
Run Code Online (Sandbox Code Playgroud)
最后,我lkm_example.ko创建了文件。
在那之后:
> …Run Code Online (Sandbox Code Playgroud)