linux-kernel相关内容
我正在Linux内核中寻找__kernel_vsyscall方法,该方法用于进行系统调用.我想观察它的代码以了解更多信息,但是我的grep搜索似乎无法将其选中,并且无法在Internet上找到它的位置.谁能指出我的确切位置?可以操纵吗? 感谢您的帮助! 解决方案 假设当前目录位于linux内核源代码的开头,那么这是定义__kernel_vsyscall符号的文件的位置. (下面显示的
..
我们可以在单个调用中使用kzalloc()分配的最大大小是多少? 这是一个非常常见的问题.另外,请告诉我是否可以验证该值. 解决方案 上限(可以在单个kmalloc/kzalloc请求中分配的字节数)是以下功能: 处理器(实际上是页面大小)以及 好友系统空闲列表的数量(MAX_ORDER). 在x86和ARM上,标准页面大小均为4 Kb,MAX_ORDER为11,单个调用的km
..
我正在开发一个小型嵌入式系统.当我的Linux启动到用户空间时,我知道物理内存中的设备在哪里.我想将它们映射到用户空间虚拟地址.目前,我正在通过内核模块来实现.我使用vmalloc/kmalloc(取决于大小),然后在返回的虚拟地址上使用ioremap_page_range来映射我的物理地址.我不认为这是正确的方法.首先,我正在分配内存,然后要求内核将虚拟地址空间重新映射到一些不同的物理地址空间.
..
在Linux内核中b/w __raw_readl/__raw_writel和readl/writel有什么区别?据说readl/writel比__raw_readl/__raw_writel更安全,那为什么我们仍然使用__raw_readl/__raw_writel? 在什么情况下应使用__raw_readl/__raw_writel或readl/writel? 解决方案 似乎是
..
Linux内核代码中的EXPORT_SYMBOL_GPL是什么? 下面是一段代码,其中包含EXPORT_SYMBOL_GPL 62 struct resource *platform_get_resource(struct platform_device *dev, 63 unsigned int type
..
在编译内核模块时,我得到一个警告,并带有添加编译选项 CONFIG_DEBUG_SECTION_MISMATCH = y 的注释.它为我提供了有关问题的更多详细信息: WARNING: \**\*path to module\***(.text+0x8d2): Section mismatch in reference from the function Pch_Spi_Enable_Bio
..
我正在尝试在内核驱动程序和用户空间程序之间进行异步通信(我知道这里有很多问题需要类似的信息,但是找不到与sysfs_notify相关的信息). 我将在这里保留Vilhelm的编辑,但是将源代码添加到一个使用sysfs的简单驱动程序和一个用于轮询它的用户空间程序中.驱动程序工作正常(我从网络上获得了大部分钱;它缺少功劳,但是当我回去添加功劳时我找不到它们). 不幸的是,轮询程序无法正常工作.它
..
我的问题是:当我在设备驱动程序中正确使用[pci_]dma_sync_single_for_{cpu,device}时,如何确定何时可以安全地禁用缓存侦听? 我正在为通过PCI Express(DMA)直接写入RAM的设备开发设备驱动程序,并担心管理缓存一致性.在启动DMA时,我可以设置一个控制位来启用或禁用DMA期间的缓存侦听,显然为了提高性能,我想尽可能使缓存侦听保持禁用状态. 在
..
我一直在尝试移植一些Linux驱动程序,并且意识到Linux的内核版本2.4和2.6之间存在实质性的差异. 在2.4版本的内核中,模块编程如下- #define MODULE #include #include int init_module(void) { printk(KERN_INFO "Hi \
..
我已经学习了有关操作系统设计和概念的课程,现在我正尝试全面学习Linux内核.我有一个我无法摆脱的问题.在现代操作系统中,每个进程都有自己的虚拟地址空间(VAS)(例如,在32位系统中为0到2 ^ 32-1).这提供了许多优点.但是在实现过程中,我有时会感到困惑.让我通过一个例子来解释它: 假设我们有两个过程p1,p2; p1和p2具有自己的VAS.地址0x023f4a54映射到不同的物理地
..
有没有办法添加动态系统调用,例如通过模块?我找到了一些地方,可以通过更改sys_call_table[]数组来覆盖模块来覆盖现有的系统调用,以获取覆盖的函数而不是安装模块时的本机函数,但是您可以使用新的系统调用和一个模块? 解决方案 不,sys_call_table具有固定大小: const sys_call_ptr_t sys_call_table[__NR_syscall_max
..
Linux工作队列是具有进程上下文的内核级线程.我试图将其用作没有特定进程上下文的kthread的替代方案.但是,如何将数据传递到工作队列? work_struct具有类型为atomic_long_t的数据字段.我无法将指针传递给该字段.我该怎么办? 我也找不到工作队列的一个具体示例.你能推荐一个吗? 解决方案 如果要将数据传递到工作队列函数,只需将work_struct结构嵌入到自
..
“呼叫跟踪"包含类似这样的条目: [] FunctionName+0xAB/0xCD [module_name] [] ? AnotherFunctionName+0x12/0x40 [module_name] [] ClearFunctionName+0x88/0x88 [module_name] '是什么意思?标记在A
..
我正在编写一个Linux字符驱动程序,该驱动程序可以在用户空间中打印系统日志.就像命令"dmesg"一样. 我了解到,我们使用"printk"打印的所有日志都将发送到名为“环形缓冲区"的空间.所以我有个问题: 环形缓冲区是否在内核空间内? 如果是这样,我如何读取内核空间中的环形缓冲区? (我尝试阅读dmesg.c的源代码.但这没有帮助.) 解决方案 您正在寻找的是/proc/kms
..
我了解到Mac OS X和bsd是相关的.它们之间有多紧密的联系.可以调整Mac OS X软件并将其安装在BSD上吗? 解决方案 在OS X 10.4时代,我花了一些时间未能为OS X编写VFS.在那些日子里,内核的主要子系统中,只有网络堆栈和VFS仍然是真正的BSD.那时,甚至对VFS进行了部分重写,以使其更具模块化(所有BSD VFS数据结构都变为不透明指针,并且API通过所谓的KPI
..
我找到了此链接( http://www.spinics.net/lists/newbies /msg41016.html ),并一直在考虑这样做.所以我在内核模块中编写了代码: #include #include #include struct path p; struct kstat ks; kern
..
我写了下面提到的小的内核模块代码, 我正在ubuntu 14.04 中对其进行测试 #include #include #include #include int init_mod_func(void) { printk(KERN_INFO "My
..
我正在linux ubuntu 17.04中编写一个简单的内核模块,该模块需要一个字符串并将其打印在内核日志中. #include #include #include char* mystring = "hello world"; module_param(mystring ,charp ,
..
下面是我遇到的三个线程模型. 基于以下三种架构,对我来说,新的理解是,除了作为POSIX.1C一部分引入的用户线程之外,还存在一种称为内核线程的东西. 这是1-1型 这是N-1型. 这是混合模式. 关于内核线程,我在SO上遇到了很多问题. 链接,以进行澄清. 在进程级别,对于Linux加载程序(例如)加载的每个用户进程,内核不会分配相应的内核进程来执行用户进程提出的机器指
..
假设,我想对可能非常大的文件执行顺序写入. 如果我mmap()一个巨大的区域,并在整个区域上使用madvise(MADV_SEQUENTIAL),那么我可以以一种相对有效的方式写入内存.我已经可以正常工作了. 现在,为了释放我正在编写的各种OS资源,我有时会在已经写入的小内存块上执行munmap().我担心的是munmap()和msync()会阻塞我的线程,等待将数据物理提交到磁盘
..