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

编写Linux内核模块时获取用户进程pid

孙言
2023-03-14
问题内容

如何获得触发了内核模块file_operation.read例程的用户进程的PID (即正在读取的进程/dev/mydev)?


问题答案:

当您的read函数正在执行时,它是在发出系统调用的进程的上下文中执行的。因此,您应该能够使用current,即current->pid



 类似资料:
  • 主要内容:initramfe虚拟文件系统GRUB 加载了内核之后,内核首先会再进行二次系统的自检,而不一定使用 BIOS 检测的硬件信息。这时内核终于开始替代 BIOS 接管 Linux 的启动过程了。 内核完成再次系统自检之后,开始采用动态的方式加载每个硬件的模块,这个动态模块大家可以想象成硬件的驱动(默认 Linux 硬件的驱动是不需要手工安装的,如果是重要的功能,则会直接编译到内核当中;如果是非重要的功能,比如硬件驱动会编译为模块

  • 主要内容:内核模块保存位置与模块保存文件,内核模块的查看,内核模块的添加与删除Linux 的内核会在启动过程中自动检验和加载硬件与文件系统的驱动。一般这些驱动都是用模块的形式加载的,使用模块的形式保存驱动,可以不直接把驱动放入内核,有利于控制内核大小。 模块的全称是 动态可加载内核模块,它是具有独立功能的程序,可以被单独编译,但不能独立运行。模块是为内核或其他模块提供功能的代码集合。这些模块可以是 Linux 源码中自带的,也可以是由硬件厂商开发的(可以想象成驱动)。不过内

  • 问题内容: 我已经使用eventfd()在用户空间程序中创建了一个eventfd实例。有没有一种方法可以将某些引用(指向其struct或pid + fd对的指针)传递给已创建的eventfd实例到内核模块,以便它可以更新计数器值? 这是我想做的事情:我正在开发一个用户空间程序,该程序需要与我编写的内核空间模块交换数据和信号。为了传输数据,我已经在使用ioctl。但是我希望内核模块能够在新数据准备好

  • MANAGING THE LINUX KERNEL AND LOADABLE KERNEL MODULES 所有操作系统至少由两个主要组件组成。其中第一个也是最重要的是内核。 内核位于操作系统的中心,控制着操作系统所做的一切,包括管理内存,控制 CPU,甚至控制用户在屏幕上看到的内容。操作系统的第二个元素通常被称为用户区域,几乎包括其他所有元素。 内核被设计成一个受保护或特权的区域,只能由 roo

  • 内核模块 对于模块而言,引导选项只能用于直接编译到核心中的模块,格式是"模块名.选项=值",比如"usbcore.blinkenlights=1"。 动态加载的模块则可以在 modprobe 命令行上指定相应的选项值,比如"modprobe usbcore blinkenlights=1"。 可以使用"modinfo -p ${modulename}"命令显示可加载模块的所有可用选项。已经加载到内

  • 问题内容: 我正在从事学术项目,该项目修改了一些代码并包含了新代码。 我正在使用QEMU加载修改后的内核并进行测试。 但是,我发现某些操作系统需要完整的操作系统才能进行调试。 没有它可能吗? 或者,这是可以与Kernel 2.6一起用于系统的发行版。除了运行程序的功能(包括网络支持)以外,发行版不需要具有任何功能。 问题答案: 我认为最简单的方法是使用buildroot http://buildr