当前位置: 首页 > 面试题库 >

Linux内核源代码中的“最新”是什么?

吴升
2023-03-14
问题内容

我正在研究Linux内核,但是有问题。

我看到许多Linux内核源文件都有current->files。那是什么current

struct file *fget(unsigned int fd)
{
     struct file *file;
     struct files_struct *files = current->files;

     rcu_read_lock();
     file = fcheck_files(files, fd);
     if (file) {
             /* File object ref couldn't be taken */
             if (file->f_mode & FMODE_PATH ||
                 !atomic_long_inc_not_zero(&file->f_count))
                     file = NULL;
     }
     rcu_read_unlock();

     return file;
 }

问题答案:

它是指向当前进程(即发出系统调用的进程)的指针。

在x86上,它是在arch/x86/include/current.h(其他拱门的类似文件)中定义的。

#ifndef _ASM_X86_CURRENT_H
#define _ASM_X86_CURRENT_H

#include <linux/compiler.h>
#include <asm/percpu.h>

#ifndef __ASSEMBLY__
struct task_struct;

DECLARE_PER_CPU(struct task_struct *, current_task);

static __always_inline struct task_struct *get_current(void)
{
    return percpu_read_stable(current_task);
}

#define current get_current()

#endif /* __ASSEMBLY__ */

#endif /* _ASM_X86_CURRENT_H */

Linux设备驱动程序第2章中的更多信息:

当前指针是指当前正在执行的用户进程。在执行系统调用(例如打开或读取)期间,当前进程是调用该调用的进程。如果需要,内核代码可以通过使用current来使用特定于进程的信息。[…]



 类似资料:
  • 问题内容: Linux内核代码中的EXPORT_SYMBOL_GPL是什么? 下面是一段代码,其中包含EXPORT_SYMBOL_GPL 该宏在内核代码中多次出现。 问题答案: 将某些符号(例如函数)定义为可导出(从内核可加载模块中看到)是宏。如果该符号没有“ EXPORT_SYMBOL”,则将无法从模块访问该符号。 将仅在GPL许可的模块中显示该符号,并且-在具有任何许可的模块中显示该符号。 h

  • 问题内容: 从这里 我没有得到它的含义以及为什么使用它。我试图搜索它,但不了解其含义。 问题答案: 它使动态加载的模块可以访问符号(前提是所述模块添加了声明)。

  • 问题内容: 在Linux内核源代码中,我找到了以下功能: 在这里我不明白这意味着什么。 问题答案:

  • 问题内容: 当我经历了以下块的Linux的字符设备驱动程序代码,我发现结构的指针在。 我想知道指向的结构及其完整元素。 此结构有什么作用? 问题答案: 它是指向当前进程(即已发出系统调用的进程)的指针。 从文档: 当前过程 尽管内核模块不像应用程序那样顺序执行,但是内核执行的大多数操作都与特定进程有关。内核代码可以通过访问全局项current来了解驱动它的当前进程,该全局项current是指向st

  • 问题内容: 最近,我开始开发linux设备驱动程序, 当我想使用内核代码进行调试并在内核文件中添加一些调试消息时,我遇到了一个问题。 例如,最近我加入一些和在驻留在。 然后,我执行以下步骤,这非常耗时。 然后重启并选择我的新内核版本。 我不知道有没有多余的步骤?任何指导或帮助将不胜感激。 问题答案: 这是我有关如何构建和运行定制内核的说明。 获取资源 Linus Torvalds的树是[1]。 在

  • Linux 内核源码镜像使用帮助 其 Git 仓库的链接为 git://mirrors.ustc.edu.cn/linux.git 与 https://mirrors.ustc.edu.cn/linux.git。 断点续传 由于 git clone 不支持断点续传,所以可以使用支持断点续传的 git fetch。一个简单的步骤如下所示,请按自己的需求酌情更改: mkdir linux && cd