草庐IT

c - 从 Linux 内核模块的文件描述符获取文件名/路径?

在linux内核模块中有没有办法从unsignedintfd获取文件名/路径?我知道这个答案:HowcanIgetafilenamefromafiledescriptorinsideakernelmodule?但如果我正确理解代码,我还需要一个structfiles_struct。编辑:请停止投票,因为它不是重复的。我正在寻求一种方法来从内核模块获取纯C中的文件名/路径,而不是使用系统工具。换句话说:在/procself/fd/上运行readlink不是一个好的答案。编辑2:内核的系统调用readssize_tread(intfd,void*buf,size_tcount);有3个参数

linux - 如何练习编写真正的 Linux 设备驱动程序?

我是一名中级程序员,在Linux内核编程方面拥有丰富的经验。在实习期间,我主要参与调试内核和驱动程序代码。我最近完成了RobertLove的内核开发一书的学习。JonathanCorbet撰写的Linux设备驱动程序手册已经读了一半。但我现在面临一个令人不安的问题。这些书都没有教我如何实际编写真正的(硬件)设备驱动程序。LDD3e书告诉我如何编写我非常擅长的基于内存的软件驱动程序和sysfs接口(interface)。那么我从哪里开始呢?有什么要求,我该如何去做?P.S:我已经开始阅读'EssentialLinuxDeviceDriversbySreekrishnanVenkatesw

linux - 如何练习编写真正的 Linux 设备驱动程序?

我是一名中级程序员,在Linux内核编程方面拥有丰富的经验。在实习期间,我主要参与调试内核和驱动程序代码。我最近完成了RobertLove的内核开发一书的学习。JonathanCorbet撰写的Linux设备驱动程序手册已经读了一半。但我现在面临一个令人不安的问题。这些书都没有教我如何实际编写真正的(硬件)设备驱动程序。LDD3e书告诉我如何编写我非常擅长的基于内存的软件驱动程序和sysfs接口(interface)。那么我从哪里开始呢?有什么要求,我该如何去做?P.S:我已经开始阅读'EssentialLinuxDeviceDriversbySreekrishnanVenkatesw

linux - 在 i386 的 linux 内核 2.6.11 中,此内联汇编 (:"0"(THREAD_SIZE - 1)) 的含义是什么

在do_IRQ中可以找到如下代码!#ifdefCONFIG_DEBUG_STACKOVERFLOW/*Debuggingcheckforstackoverflow:istherelessthan1KBfree?*/{longesp;__asm____volatile__("andl%%esp,%0":"=r"(esp):"0"(THREAD_SIZE-1));if(unlikely(esp我没看懂这个asm汇编的意思asm_volatile_("andl%%esp,%0":"=r"(esp):"0"(THREAD_SIZE-1));THREAD_SIZE-1意味着什么?我记得括号里的符

linux - 在 i386 的 linux 内核 2.6.11 中,此内联汇编 (:"0"(THREAD_SIZE - 1)) 的含义是什么

在do_IRQ中可以找到如下代码!#ifdefCONFIG_DEBUG_STACKOVERFLOW/*Debuggingcheckforstackoverflow:istherelessthan1KBfree?*/{longesp;__asm____volatile__("andl%%esp,%0":"=r"(esp):"0"(THREAD_SIZE-1));if(unlikely(esp我没看懂这个asm汇编的意思asm_volatile_("andl%%esp,%0":"=r"(esp):"0"(THREAD_SIZE-1));THREAD_SIZE-1意味着什么?我记得括号里的符

linux - 如何在内核模块中使用 proc_pid_cmdline

我正在编写一个内核模块来获取带有完整进程名称的pid列表。proc_pid_cmdline()给出完整的进程名称;使用相同的函数/proc/*/cmdline获取完整的进程名称。(structtask_struct)->comm给出了它是什么进程的提示,但不是完整的路径。我已经包含了函数名,但是它给出了错误,因为它不知道在哪里可以找到该函数。如何在模块中使用proc_pid_cmdline()? 最佳答案 您不应该调用proc_pid_cmdline()。这是一个non-publicfunction在fs/proc/base.c中:

linux - 如何在内核模块中使用 proc_pid_cmdline

我正在编写一个内核模块来获取带有完整进程名称的pid列表。proc_pid_cmdline()给出完整的进程名称;使用相同的函数/proc/*/cmdline获取完整的进程名称。(structtask_struct)->comm给出了它是什么进程的提示,但不是完整的路径。我已经包含了函数名,但是它给出了错误,因为它不知道在哪里可以找到该函数。如何在模块中使用proc_pid_cmdline()? 最佳答案 您不应该调用proc_pid_cmdline()。这是一个non-publicfunction在fs/proc/base.c中:

linux - 为什么 mm_struct->start_stack 和 vm_area_struct->start 不指向同一个地址?

据我了解Linux内核中的内存管理,每个进程中都有一个负责地址空间的mm_struct结构。一个重要的内存区域是堆栈。这应该由vm_area_struct内存区域标识,mm_struct本身有一个指针mm_struct->stack_start,它是堆栈的地址。我看到了下面的代码,我无法理解为什么任何内存区域的起始/结束地址都不等于mm_struct->stack_start值。非常感谢任何有助于理解这一点的帮助。谢谢加载编译内核模块的部分结果:Vmanumber14:Startsat0x7fff4bb68000,Endsat0x7fff4bb8a000Vmanumber15:Star

linux - 为什么 mm_struct->start_stack 和 vm_area_struct->start 不指向同一个地址?

据我了解Linux内核中的内存管理,每个进程中都有一个负责地址空间的mm_struct结构。一个重要的内存区域是堆栈。这应该由vm_area_struct内存区域标识,mm_struct本身有一个指针mm_struct->stack_start,它是堆栈的地址。我看到了下面的代码,我无法理解为什么任何内存区域的起始/结束地址都不等于mm_struct->stack_start值。非常感谢任何有助于理解这一点的帮助。谢谢加载编译内核模块的部分结果:Vmanumber14:Startsat0x7fff4bb68000,Endsat0x7fff4bb8a000Vmanumber15:Star

linux - 如何检查 vsyscall 模式

我正在努力寻找如何检查[vsyscall]表的配置方式(本地或模拟)。该设置应在名为vsyscall_mode的变量中设置。谁能阐明如何检查此设置?通过重新运行cat/proc/self/maps我观察到[vsyscall]的内存映射区域没有改变,而[vdso]却改变了。这是否意味着vsyscall的设置设置为native? 最佳答案 vsyscall模式在内核配置中设置,因此您可以在native和仿真之间进行选择。对于鱼壳:cat/usr/src/linux-headers-(uname-r)/.config|grepVSYSCA