linux-kernel相关内容

Linux键盘驱动程序的源代码

我一直在为Linux制作自己的键盘驱动程序.因此,我遇到了这两个链接: usbkbd.c 和 atkbd.c . 现在我是 混淆了哪些是当前驱动我的键盘的实际代码.正如我所看到的,atkbd.c非常脏,并且有一个转换 扫描码到键码.尽管我不确定,它应该是代码. 如果atkbd.c是代码,那么其他代码又是什么呢? 解决方案 这很容易检查.让我们以usbkbd.c. 相应的K ..

如何缩小内核空间中的Linux页面缓存?

我正在一个包含一些自定义硬件和我为该硬件编写的自定义Linux设备驱动程序的系统上工作.系统有时需要非常快速地移动大量数据,因此我的驱动程序会动态地(即在需要时)分配较大的(1 GB)DMA缓冲区,这些缓冲区将在使用后再不再需要时释放.为了分配这么大的缓冲区,我实际上使用dma_alloc_coherent分配了一堆较小的缓冲区(256 X 4MB),然后使用remap_pfn_range将它们连 ..

Linux如何为其物理分配器分配内存?

我最近想研究Linux内存管理的细节,因为我想为自己的玩具内核实现类似的东西,所以我希望熟悉这些细节的人能帮助我理解一件事.显然,物理内存管理器是一种伙伴算法,该算法还专门用于返回特定顺序的页面块(0至9,其中0只是单个页面).对于每个顺序,块都存储为链接列表.假设如果请求了5阶块,但未在5阶列表中找到该算法,则算法将搜索6阶块,将其分成两部分,给出所请求的一半,然后将另一半移低一个阶(如它只有一 ..
发布时间:2020-04-23 10:58:19 服务器开发

使用模块读取内核内存

作为我的项目的一部分,我需要读取内核以获取系统调用表的内存地址和系统调用地址.或者实际上,我需要提取系统调用表和所有系统调用的内容. 到目前为止,我将GDB用于此目的.有什么办法可以让我使用内核模块做到这一点.我是内核模块编程的新手.在这里寻求专家的建议. 解决方案 首先让我说读取任意内核内存是一件棘手的事情!这样做的方法很多,但复杂程度和灵活性各不相同. 1)对地址进行硬编码 ..
发布时间:2020-04-23 10:58:15 服务器开发

如何在Linux内核模块中使用seq_file?

您好,我是Linux新手,想知道如何在模块中使用Linux序列文件来遍历内核对象. 我知道我可以使用以下命令: cat /proc/kallsyms 要查看可用的符号,以及我在Google上所读到的内容,列表中具有'D'或'd'的符号是指向数据结构的指针. 尽管我知道如何创建模块的基础知识,但互联网上有关如何使用seq操作的示例并不统一,我有些困惑. 如果有人知道有什 ..
发布时间:2020-04-23 10:57:49 服务器开发

3G/1G虚拟机拆分有什么优势? 32位Linux内核

虚拟内存I:问​​题[LWN.net] http://lwn.net/Articles/75174/ 尤其是,硬件的地址转换缓冲区可以在内核和用户空间之间共享. 我对此完全感到困惑.为什么在拆分虚拟机时他们可以共享TLB?我知道某些CPU中有页面全局位 表示TLB条目对于不同的进程是通用的,不需要刷新. TLB和vm split 3G/1G之间有什么关系?请详细评论.预先感 ..
发布时间:2020-04-23 10:57:17 服务器开发

Linux为一组进程保留处理器(动态地)

有没有一种方法可以将处理器排除在正常调度之外? 也就是说,使用sched_setaffinity我可以指示线程应该在哪个处理器上运行,但是我正在寻找某种相反的说法.也就是说,我想从正常调度中排除给定的处理器,以便只有在那里明确调度的进程才能在其中运行. 我还知道,在引导过程中,我可以限制init进程使用的处理器,因此可以限制所有继承的进程.但是,我希望有比这更动态的解决方案-在启动后我 ..
发布时间:2020-04-23 10:56:26 服务器开发

使用Linux虚拟鼠标驱动程序

我正在尝试根据 Essential Linux设备驱动程序一书来实现虚拟鼠标驱动程序.有一个用户空间应用程序,它可以生成坐标以及内核模块. 请参阅:虚拟鼠标驱动程序和用户空间应用程序代码,以及逐步说明如何使用此驱动程序. 1.)我编译了用户空间应用程序和驱动程序的代码. 2.)接下来,我检查了dmesg输出并具有 输入:未指定的设备为/class/input/input32 ..

并发I/O-缓冲损坏,阻止设备驱动程序

我正在开发块分层设备驱动程序.因此,我拦截了 WRITE 请求并加密了数据,并在end_bio()例程中解密了数据(在处理和 READ 请求期间). 因此,所有功能都可以在单个流中正常运行.但是,如果试图同时从两个或多个进程执行I/O,我将缓冲内容损坏.我没有用于缓冲区的本地存储. 我是否需要将BIO合并到我的驱动程序中? Linux I/O子系统是否有一些与大量并发I/O请求相关的要 ..
发布时间:2020-04-23 10:54:54 服务器开发

了解从进程内核堆栈中获取task_struct指针

现在,我正在阅读Robert Love的书"Linux Kernel Development 3d Edition".他在那里写了有关thread_info结构的信息,该结构包含指向task_struct结构的指针,并且据我所知,它位于进程的内核堆栈的底部或顶部(取决于体系结构).直到最近我才对Linux内核API感到陌生,并且不了解current()方法的存在.本书摘录了有关current()方 ..
发布时间:2020-04-23 10:54:48 服务器开发

Linux内核如何创建sysfs?

我已经开始在我的OS课程中查看linux内核代码.在那我对sys文件系统(sysfs)感兴趣.我有兴趣了解何时以及如何创建sysfs? linux内核代码中的哪些文件生成此文件系统? 我在系统上设置了linux内核,并已开始通过代码进行调试. 我已参考此文档来了解sysfs文件系统: [sysfs]: https://www.kernel.org/doc/Documentation/f ..
发布时间:2020-04-23 10:53:24 服务器开发

从自定义系统调用生成段错误

我正在通过系统调用执行copy_to_user(). 如何获取它以在出错时生成segfault或sigbus,就像用户空间试图访问相同的内存一样? 解决方案 好吧,一般来说,你做不到.除非您打算重写内核. 当内核访问用户模式地址时,它使用一种安全形式,通常是copy_from_user,copy_to_user,get_user,...-如前所述.这些宏具有内核检查的返回值,并 ..
发布时间:2020-04-23 10:52:40 服务器开发

使用linux宏access_ok()有什么意义?

我一直在做一些研究,对此宏有些困惑.希望有人能给我一些指导.我有一些ioctl代码(我已经继承了,没有写过),并且在进入从用户空间复制数据之前先检查access_ok()是否是它要做的第一件事: #define __lddk_copy_from_user(a,b,c) copy_from_user(a,b,c) #define __lddk_copy_to_user(a,b,c) copy_ ..
发布时间:2020-04-23 10:50:12 服务器开发

内核空间中有一个libc吗?

内核空间中有一个libc吗?我的意思是您必须针对某些libc构建内核,对吗?那么,内核空间中是否存在一个libc(可能是静态链接的)? 如果是,这与userland glibc有什么关系?它们必须是同一版本吗? 解决方案 内核空间中实际上没有libc. Libc是用户空间库,您不能在内核空间中使用它. 但是移植了libc中几乎所有在内核空间中有意义的函数.通常,您可以在incl ..
发布时间:2020-04-23 10:38:19 服务器开发