Linux kernel 在linux内核驱动程序中,如何将dma数据包内存内容post mmap()放入进程coredump

Linux kernel 在linux内核驱动程序中,如何将dma数据包内存内容post mmap()放入进程coredump,linux-kernel,Linux Kernel,我有一个进程,它将mmap映射到内核驱动程序中,以将DMA数据包内存映射到用户空间。当进程崩溃时,您希望此内存成为coredump的一部分,以便进行崩溃后分析 目前,linux为作为驱动程序mmap函数一部分创建的VMA标记VM_IO标志。在elf_core_dump()中,调用vma_dump_size(),检查VM_IO标志,如果设置,则返回0。因此,这些VMA永远不会添加到coredump部分 根据always_dump_vma()的说法,似乎有一个解决方案可以设置vma->vm_ops

我有一个进程,它将mmap映射到内核驱动程序中,以将DMA数据包内存映射到用户空间。当进程崩溃时,您希望此内存成为coredump的一部分,以便进行崩溃后分析

目前,linux为作为驱动程序mmap函数一部分创建的VMA标记VM_IO标志。在elf_core_dump()中,调用vma_dump_size(),检查VM_IO标志,如果设置,则返回0。因此,这些VMA永远不会添加到coredump部分

根据always_dump_vma()的说法,似乎有一个解决方案可以设置vma->vm_ops 具有名称函数指针,在调用时应返回非NULL

将此解决方法扩展到运行到第二个问题的驱动程序mmap函数时,添加的vma由内核elf_core_dump()填充为零,而不是实际数据。在elf_core_dump()中,DMA VMA页面的get_dump_page()返回NULL,因为VMA具有VM_IO标志。这会导致调用dump_skip()而不是dump_emit(),从而导致问题

如何解决第二个问题,将非零内容放入该数据包内存vma的进程coredump中?尝试在各种论坛中搜索,但没有得到精确的解决方案