草庐IT

我可以排除SIGBUS由 "minor page fault"引发吗? (内核日志没有分配失败)

动机我正在努力提高对SIGBUSerrorinXwayland的理解。自2018年2月20日左右以来,FedoraLinux的一些用户已经看到了这一点,这些用户使用Xwayland1.19.6-5.fc27.x86_64和Linux内核4.15.3-300.fc27.x86-64。可悲的是我没有kernel"segfault"logmessage(或SIGBUS的等效项)。Xwayland有一些毫无意义的代码,可以捕获致命信号。但是我可以通过调试coredump看到siginfo,这似乎差不多。定义我了解当虚拟内存的页面在RAM中不可用并且必须从磁盘读取时会发生“主要页面错误”。我想我

我可以排除SIGBUS由 "minor page fault"引发吗? (内核日志没有分配失败)

动机我正在努力提高对SIGBUSerrorinXwayland的理解。自2018年2月20日左右以来,FedoraLinux的一些用户已经看到了这一点,这些用户使用Xwayland1.19.6-5.fc27.x86_64和Linux内核4.15.3-300.fc27.x86-64。可悲的是我没有kernel"segfault"logmessage(或SIGBUS的等效项)。Xwayland有一些毫无意义的代码,可以捕获致命信号。但是我可以通过调试coredump看到siginfo,这似乎差不多。定义我了解当虚拟内存的页面在RAM中不可用并且必须从磁盘读取时会发生“主要页面错误”。我想我

驱动开发:内核LoadLibrary实现DLL注入

远程线程注入是最常用的一种注入技术,在应用层注入是通过CreateRemoteThread这个函数实现的,该函数通过创建线程并调用LoadLibrary动态载入指定的DLL来实现注入,而在内核层同样存在一个类似的内核函数RtlCreateUserThread,但需要注意的是此函数未被公开,RtlCreateUserThread其实是对NtCreateThreadEx的包装,但最终会调用ZwCreateThread来实现注入,RtlCreateUserThread是CreateRemoteThread的底层实现。基于LoadLibrary实现的注入原理可以具体分为如下几步;1.调用AllocMe

linux - 如何使用 depmod 使一个 Linux 内核模块依赖于另一个外部模块?

我正在编写一个依赖于一个现有内核模块的内核模块。我正在从树中构建我的模块(作为外部模块)。如何声明依赖关系,以便depmod识别它? 最佳答案 虽然不完全令人满意,但我想出的使modprobe工作的最佳方法是向modules.dep添加一个条目#tail-1modules.dep../../../../home/ctuffli/mymod/mymod.ko:kernel/drivers/scsi/libsas/libsas.kokernel/drivers/scsi/scsi_transport_sas.ko或者,将树外模块符号链接

linux - 如何使用 depmod 使一个 Linux 内核模块依赖于另一个外部模块?

我正在编写一个依赖于一个现有内核模块的内核模块。我正在从树中构建我的模块(作为外部模块)。如何声明依赖关系,以便depmod识别它? 最佳答案 虽然不完全令人满意,但我想出的使modprobe工作的最佳方法是向modules.dep添加一个条目#tail-1modules.dep../../../../home/ctuffli/mymod/mymod.ko:kernel/drivers/scsi/libsas/libsas.kokernel/drivers/scsi/scsi_transport_sas.ko或者,将树外模块符号链接

Linux 内核抢占级别

我想知道PREEMPT_NONE和PREEMPT_VOLUNTARY之间的区别是什么。根据文档,Thisoptionreducesthelatencyofthekernelbyaddingmore"explicitpreemptionpoints"tothekernelcode但是它并没有提到这些点是什么。我试着用谷歌搜索它,但没有找到比上面的文本更多的细节(这似乎令人惊讶,因为我认为这将是一个常见问题)。我主要关心的是使其他进程挨饿的进程,所以我想知道抢占是否发生在带有VOLUNTARY的定时器中断上。当然,信息越多越好,所以我想知道其他预测点可能是什么。

Linux 内核抢占级别

我想知道PREEMPT_NONE和PREEMPT_VOLUNTARY之间的区别是什么。根据文档,Thisoptionreducesthelatencyofthekernelbyaddingmore"explicitpreemptionpoints"tothekernelcode但是它并没有提到这些点是什么。我试着用谷歌搜索它,但没有找到比上面的文本更多的细节(这似乎令人惊讶,因为我认为这将是一个常见问题)。我主要关心的是使其他进程挨饿的进程,所以我想知道抢占是否发生在带有VOLUNTARY的定时器中断上。当然,信息越多越好,所以我想知道其他预测点可能是什么。

linux - 如何在不重命名传递给 insmod 的 .ko 的情况下重命名内核模块名称?

我需要重命名一个已经存在的驱动程序的内核模块(用lsmod显示的名称)而不更改源文件的名称。例如#insmodxxx.ko>#lsmodModuleSizeUsedbyTainted:Pxxx1915270#我想将xxx重命名为yyy。现在我知道更改驱动程序源文件的名称(当它涉及单个文件时)会更改模块的名称。但我不想更改源文件的名称。 最佳答案 在Makefile中重命名您的obj-m并将obj-m的依赖项设置为原始模块。例如,我有包含我所有源代码的文件hello.c。但我希望模块是mynewname。这是执行此操作的整个Makef

linux - 如何在不重命名传递给 insmod 的 .ko 的情况下重命名内核模块名称?

我需要重命名一个已经存在的驱动程序的内核模块(用lsmod显示的名称)而不更改源文件的名称。例如#insmodxxx.ko>#lsmodModuleSizeUsedbyTainted:Pxxx1915270#我想将xxx重命名为yyy。现在我知道更改驱动程序源文件的名称(当它涉及单个文件时)会更改模块的名称。但我不想更改源文件的名称。 最佳答案 在Makefile中重命名您的obj-m并将obj-m的依赖项设置为原始模块。例如,我有包含我所有源代码的文件hello.c。但我希望模块是mynewname。这是执行此操作的整个Makef

linux - 将 Ext4 打补丁并编译为内核模块

我目前正在为学术目的修补Ext4(仅linux/fs/ext4/*,如file.c、ioctl.c、ext4.h)。我正在QEMU虚拟机上工作,为了加快整个过程,我选择了Ext4作为内核模块进行编译。在测试新更改时会出现问题,因为即使我运行makemodulesARCH=x86&&makemodules_installARCH=x86并重新启动机器(/是Ext4),它们也不可见,除非我重新编译了整个内核。这有点奇怪,因为我有各种迹象表明Ext4已被编译为一个模块:配置为:$grepEXT4.configCONFIG_EXT4_FS=m它确实编译为一个模块:$makemodulesARC