标签: linux-kernel

如何找到 Linux 内核系统调用的实现?

我试图mkdir通过查看内核源代码来了解一个函数是如何工作的。这是尝试了解内核内部结构并在各种功能之间导航。我知道mkdirsys/stat.h. 我找到了原型:

/* Create a new directory named PATH, with permission bits MODE.  */
extern int mkdir (__const char *__path, __mode_t __mode)
     __THROW __nonnull ((1));
Run Code Online (Sandbox Code Playgroud)

现在我需要看看这个函数是在哪个 C 文件中实现的。从源目录,我试过

ack "int mkdir"
Run Code Online (Sandbox Code Playgroud)

其中显示

security/inode.c
103:static int mkdir(struct inode *dir, struct dentry *dentry, int mode)

tools/perf/util/util.c
4:int mkdir_p(char *path, mode_t mode)

tools/perf/util/util.h
259:int mkdir_p(char *path, mode_t mode);
Run Code Online (Sandbox Code Playgroud)

但它们中没有一个与 中的定义匹配sys/stat.h

问题

  1. 哪个文件有mkdir实现?
  2. 有了上面这样的函数定义,我怎么能找出哪个文件有实现呢?内核在定义和实现方法时是否遵循任何模式?

注意:我正在使用内核2.6.36-rc1

source system-calls linux-kernel

376
推荐指数
7
解决办法
5万
查看次数

为什么 Linux 不被接受为官方的 GNU 内核?

虽然我很长一段时间都知道Hurd的存在,以及它作为官方 GNU 操作系统内核的使命,但我想知道为什么 Linux 多年来没有被接受为官方 GNU 内核,因为它处于更好的状态比赫德?

到目前为止,Linux 或多或少已经担任了 20 多年的角色,但是可以看出 GNU 项目在 Linux 方面一直保持着距离。为什么会这样?是因为梦想赫德(在未来的某个时候)达到生产质量水平吗?是不是因为 GNU 项目没有看到它的使命在 Linux 中得到了充分体现?是不是出于其他政治原因?

gnu linux-kernel hurd

132
推荐指数
3
解决办法
3万
查看次数

内核 3.11 的 Linux 标志中的 Windows 标志是什么意思?

我刚刚为 Fedora 19 安装安装了 kernel-3.11.0-1.fc20。在重新启动过程中,我看到带有 Windows 标志的 Linux 标志,这是什么意思? Linux 内核 3.11 的 Linux 标志中的 Windows 标志

Fedora 19 安装在华硕 TX300CA 笔记本电脑中,安全启动关闭,CSM(BIOS 兼容性支持模块)模式开启。

kernel linux-kernel

123
推荐指数
3
解决办法
9472
查看次数

为什么Linux内核有15+百万行代码?

这个单体代码库的内容是什么?

我了解处理器架构支持、安全性和虚拟化,但我无法想象超过 600,000 行左右。

内核代码库中包含驱动程序的历史和当前原因是什么?

这 15 多万行是否包括每个硬件的每个驱动程序?如果是这样,那就引出了一个问题,为什么驱动程序嵌入在内核中,而不是从硬件 ID 自动检测和安装的单独软件包?

对于存储受限或内存受限的设备,代码库的大小是否是一个问题?

如果所有这些都被嵌入,它似乎会使空间受限的 ARM 设备的内核大小膨胀。预处理器是否剔除了很多行?说我疯了,但我无法想象一台机器需要那么多逻辑来运行我所理解的内核角色。

是否有证据表明,由于其看似不断增长的性质,规模将在 50 多年后成为问题?

包括驱动程序意味着它会随着硬件的制造而增长。

编辑:对于那些认为这是内核本质的人,经过一些研究,我意识到并非总是如此。内核不需要这么大,因为 Carnegie Mellon 的微内核Mach 被列为“通常不到 10,000 行代码”的例子

linux-kernel

118
推荐指数
6
解决办法
6万
查看次数

如果 Linux 只是一个内核,那么它​​的第一个版本是如何使用的(没有分发)?

Linux只是一个内核,如果用户要使用它,那么他们需要一个完整的发行版。话虽如此,当没有 Linux 发行版时,Linux 的第一个版本是如何使用的?

linux kernel history linux-kernel

117
推荐指数
6
解决办法
2万
查看次数

什么是 Linux 中的受污染内核?

在某些情况下,Linux 内核可能会受到污染。例如,将专有视频驱动程序加载到内核中会污染内核。这种情况可能在系统日志、内核错误消息(oops 和 panics)中以及通过诸如 和 之类的工具可见lsmod,并且会一直保持到系统重新启动。

这是什么意思?它会影响我使用系统的能力吗?它会如何影响我的支持选项?

linux kernel-modules linux-kernel proprietary-drivers

116
推荐指数
1
解决办法
15万
查看次数

如何列出所有可加载的内核模块?

我正在寻找一些内核模块来加载i2c-devi2c-bcm2708. 但modprobe命令返回:

sudo modprobe i2c-dev
modprobe: module i2c-dev not found in modules.dep
Run Code Online (Sandbox Code Playgroud)

如何列出系统中所有可用的模块?它们位于哪个目录中?

kernel-modules linux-kernel

88
推荐指数
5
解决办法
20万
查看次数

如何显示为当前引导给出的 Linux 内核命令行参数?

grub.conf配置文件中,我可以指定内核将使用的命令行参数,即:

kernel /boot/kernel-3-2-1-gentoo root=/dev/sda1 vga=791
Run Code Online (Sandbox Code Playgroud)

启动给定内核后,有没有办法显示首先传递给内核的命令行参数?我找到了 sysctl,

sysctl --all
Run Code Online (Sandbox Code Playgroud)

但是 sysctl 显示了所有可能的内核参数。

linux linux-kernel

86
推荐指数
2
解决办法
11万
查看次数

空闲的 CPU 进程有什么作用?

查看strace我的来源,发现使用了克隆标志CLONE_IDLETASK,在那里描述为:

#define CLONE_IDLETASK 0x00001000 /* kernel-only flag */
Run Code Online (Sandbox Code Playgroud)

在深入研究之后,我发现,虽然该标志并未包含在man clone其中,但内核在引导过程中实际使用它为机器上的每个 CPU 创建空闲进程(所有这些进程都应该具有 PID 0)。即具有 8 个 CPU 的机器将至少有 7 个(见下面的问题)这样的进程“运行”(注意引号)。

现在,这让我想到了几个关于“空闲”过程实际上做了什么的问题。我的假设是它会持续执行 NOP 操作,直到它的时间范围结束并且内核分配一个真正的进程来运行或再次分配空闲进程(如果 CPU 没有被使用)。然而,这完全是猜测。所以:

  1. 在一台有 8 个 CPU 的机器上,会创建 7 个这样的空闲进程吗?(一个 CPU 将由内核本身持有,而没有执行用户空间工作?)

  2. 空闲进程真的只是一个无限的 NOP 操作流吗?(或执行相同操作的循环)。

  3. CPU 使用率(比如说uptime)是否简单地通过空闲进程在 CPU 上的时间以及在特定时间段内不存在的时间来计算?


PS 这个问题的很大一部分很可能是由于我不完全了解 CPU 的工作原理。即我了解程序集、时间范围和中断,但我不知道如何,例如,CPU 可能会根据执行的内容使用更多或更少的能量。如果有人也能启发我,我将不胜感激。

cpu linux-kernel

80
推荐指数
2
解决办法
3万
查看次数

Linux:如何找到用于设备的设备驱动程序?

如果我的目标连接了一个设备并且加载了该设备的多个驱动程序,我如何了解哪个设备正在使用哪个驱动程序?

linux linux-kernel

78
推荐指数
5
解决办法
31万
查看次数