linux-kernel相关内容

在Linux内核中找不到方法__kernel_vsyscall时遇到问题

我正在Linux内核中寻找__kernel_vsyscall方法,该方法用于进行系统调用.我想观察它的代码以了解更多信息,但是我的grep搜索似乎无法将其选中,并且无法在Internet上找到它的位置.谁能指出我的确切位置?可以操纵吗? 感谢您的帮助! 解决方案 假设当前目录位于linux内核源代码的开头,那么这是定义__kernel_vsyscall符号的文件的位置. (下面显示的 ..
发布时间:2020-04-25 11:20:03 服务器开发

kzalloc()-单个调用的最大大小?

我们可以在单个调用中使用kzalloc()分配的最大大小是多少? 这是一个非常常见的问题.另外,请告诉我是否可以验证该值. 解决方案 上限(可以在单个kmalloc/kzalloc请求中分配的字节数)是以下功能: 处理器(实际上是页面大小)以及 好友系统空闲列表的数量(MAX_ORDER). 在x86和ARM上,标准页面大小均为4 Kb,MAX_ORDER为11,单个调用的km ..
发布时间:2020-04-25 11:20:01 其他开发

将物理地址映射到虚拟地址linux

我正在开发一个小型嵌入式系统.当我的Linux启动到用户空间时,我知道物理内存中的设备在哪里.我想将它们映射到用户空间虚拟地址.目前,我正在通过内核模块来实现.我使用vmalloc/kmalloc(取决于大小),然后在返回的虚拟地址上使用ioremap_page_range来映射我的物理地址.我不认为这是正确的方法.首先,我正在分配内存,然后要求内核将虚拟地址空间重新映射到一些不同的物理地址空间. ..
发布时间:2020-04-25 11:18:50 服务器开发

什么是内核部分不匹配?

在编译内核模块时,我得到一个警告,并带有添加编译选项 CONFIG_DEBUG_SECTION_MISMATCH = y 的注释.它为我提供了有关问题的更多详细信息: WARNING: \**\*path to module\***(.text+0x8d2): Section mismatch in reference from the function Pch_Spi_Enable_Bio ..
发布时间:2020-04-25 11:18:34 服务器开发

使用Linux sysfs_notify调用

我正在尝试在内核驱动程序和用户空间程序之间进行异步通信(我知道这里有很多问题需要类似的信息,但是找不到与sysfs_notify相关的信息). 我将在这里保留Vilhelm的编辑,但是将源代码添加到一个使用sysfs的简单驱动程序和一个用于轮询它的用户空间程序中.驱动程序工作正常(我从网络上获得了大部分钱;它缺少功劳,但是当我回去添加功劳时我找不到它们). 不幸的是,轮询程序无法正常工作.它 ..
发布时间:2020-04-25 11:18:30 服务器开发

DMA缓存一致性管理

我的问题是:当我在设备驱动程序中正确使用[pci_]dma_sync_single_for_{cpu,device}时,如何确定何时可以安全地禁用缓存侦听? 我正在为通过PCI Express(DMA)直接写入RAM的设备开发设备驱动程序,并担心管理缓存一致性.在启动DMA时,我可以设置一个控制位来启用或禁用DMA期间的缓存侦听,显然为了提高性能,我想尽可能使缓存侦听保持禁用状态. 在 ..
发布时间:2020-04-25 11:18:28 服务器开发

同一虚拟地址如何将用于不同进程的虚拟地址映射到不同的物理地址

我已经学习了有关操作系统设计和概念的课程,现在我正尝试全面学习Linux内核.我有一个我无法摆脱的问题.在现代操作系统中,每个进程都有自己的虚拟地址空间(VAS)(例如,在32位系统中为0到2 ^ 32-1).这提供了许多优点.但是在实现过程中,我有时会感到困惑.让我通过一个例子来解释它: 假设我们有两个过程p1,p2; p1和p2具有自己的VAS.地址0x023f4a54映射到不同的物理地 ..
发布时间:2020-04-25 11:18:20 其他开发

Linux内核-通过模块动态添加系统调用

有没有办法添加动态系统调用,例如通过模块?我找到了一些地方,可以通过更改sys_call_table[]数组来覆盖模块来覆盖现有的系统调用,以获取覆盖的函数而不是安装模块时的本机函数,但是您可以使用新的系统调用和一个模块? 解决方案 不,sys_call_table具有固定大小: const sys_call_ptr_t sys_call_table[__NR_syscall_max ..
发布时间:2020-04-25 11:18:11 服务器开发

如何使用Linux工作队列

Linux工作队列是具有进程上下文的内核级线程.我试图将其用作没有特定进程上下文的kthread的替代方案.但是,如何将数据传递到工作队列? work_struct具有类型为atomic_long_t的数据字段.我无法将指针传递给该字段.我该怎么办? 我也找不到工作队列的一个具体示例.你能推荐一个吗? 解决方案 如果要将数据传递到工作队列函数,只需将work_struct结构嵌入到自 ..
发布时间:2020-04-25 11:18:09 其他开发

如何在Linux内核空间中读取环形缓冲区?

我正在编写一个Linux字符驱动程序,该驱动程序可以在用户空间中打印系统日志.就像命令"dmesg"一样. 我了解到,我们使用"printk"打印的所有日志都将发送到名为“环形缓冲区"的空间.所以我有个问题: 环形缓冲区是否在内核空间内? 如果是这样,我如何读取内核空间中的环形缓冲区? (我尝试阅读dmesg.c的源代码.但这没有帮助.) 解决方案 您正在寻找的是/proc/kms ..
发布时间:2020-04-25 11:17:53 服务器开发

Mac OS X和BSD有多紧密的联系?

我了解到Mac OS X和bsd是相关的.它们之间有多紧密的联系.可以调整Mac OS X软件并将其安装在BSD上吗? 解决方案 在OS X 10.4时代,我花了一些时间未能为OS X编写VFS.在那些日子里,内核的主要子系统中,只有网络堆栈和VFS仍然是真正的BSD.那时,甚至对VFS进行了部分重写,以使其更具模块化(所有BSD VFS数据结构都变为不透明指针,并且API通过所谓的KPI ..
发布时间:2020-04-25 11:17:51 服务器开发

为什么OS需要/维护内核级线程?

下面是我遇到的三个线程模型. 基于以下三种架构,对我来说,新的理解是,除了作为POSIX.1C一部分引入的用户线程之外,还存在一种称为内核线程的东西. 这是1-1型 这是N-1型. 这是混合模式. 关于内核线程,我在SO上遇到了很多问题. 链接,以进行澄清. 在进程级别,对于Linux加载程序(例如)加载的每个用户进程,内核不会分配相应的内核进程来执行用户进程提出的机器指 ..
发布时间:2020-04-25 11:17:23 其他开发

madvise(___,___,MADV_DONTNEED)是否指示OS延迟写入磁盘?

假设,我想对可能非常大的文件执行顺序写入. 如果我mmap()一个巨大的区域,并在整个区域上使用madvise(MAD​​V_SEQUENTIAL),那么我可以以一种相对有效的方式写入内存.我已经可以正常工作了. 现在,为了释放我正在编写的各种OS资源,我有时会在已经写入的小内存块上执行munmap().我担心的是munmap()和msync()会阻塞我的线程,等待将数据物理提交到磁盘 ..
发布时间:2020-04-25 11:17:19 服务器开发