linux-kernel相关内容
我一直在为Linux制作自己的键盘驱动程序.因此,我遇到了这两个链接: usbkbd.c 和 atkbd.c . 现在我是 混淆了哪些是当前驱动我的键盘的实际代码.正如我所看到的,atkbd.c非常脏,并且有一个转换 扫描码到键码.尽管我不确定,它应该是代码. 如果atkbd.c是代码,那么其他代码又是什么呢? 解决方案 这很容易检查.让我们以usbkbd.c. 相应的K
..
我正在一个包含一些自定义硬件和我为该硬件编写的自定义Linux设备驱动程序的系统上工作.系统有时需要非常快速地移动大量数据,因此我的驱动程序会动态地(即在需要时)分配较大的(1 GB)DMA缓冲区,这些缓冲区将在使用后再不再需要时释放.为了分配这么大的缓冲区,我实际上使用dma_alloc_coherent分配了一堆较小的缓冲区(256 X 4MB),然后使用remap_pfn_range将它们连
..
我最近想研究Linux内存管理的细节,因为我想为自己的玩具内核实现类似的东西,所以我希望熟悉这些细节的人能帮助我理解一件事.显然,物理内存管理器是一种伙伴算法,该算法还专门用于返回特定顺序的页面块(0至9,其中0只是单个页面).对于每个顺序,块都存储为链接列表.假设如果请求了5阶块,但未在5阶列表中找到该算法,则算法将搜索6阶块,将其分成两部分,给出所请求的一半,然后将另一半移低一个阶(如它只有一
..
作为我的项目的一部分,我需要读取内核以获取系统调用表的内存地址和系统调用地址.或者实际上,我需要提取系统调用表和所有系统调用的内容. 到目前为止,我将GDB用于此目的.有什么办法可以让我使用内核模块做到这一点.我是内核模块编程的新手.在这里寻求专家的建议. 解决方案 首先让我说读取任意内核内存是一件棘手的事情!这样做的方法很多,但复杂程度和灵活性各不相同. 1)对地址进行硬编码
..
您好,我是Linux新手,想知道如何在模块中使用Linux序列文件来遍历内核对象. 我知道我可以使用以下命令: cat /proc/kallsyms 要查看可用的符号,以及我在Google上所读到的内容,列表中具有'D'或'd'的符号是指向数据结构的指针. 尽管我知道如何创建模块的基础知识,但互联网上有关如何使用seq操作的示例并不统一,我有些困惑. 如果有人知道有什
..
虚拟内存I:问题[LWN.net] http://lwn.net/Articles/75174/ 尤其是,硬件的地址转换缓冲区可以在内核和用户空间之间共享. 我对此完全感到困惑.为什么在拆分虚拟机时他们可以共享TLB?我知道某些CPU中有页面全局位 表示TLB条目对于不同的进程是通用的,不需要刷新. TLB和vm split 3G/1G之间有什么关系?请详细评论.预先感
..
有没有一种方法可以将处理器排除在正常调度之外? 也就是说,使用sched_setaffinity我可以指示线程应该在哪个处理器上运行,但是我正在寻找某种相反的说法.也就是说,我想从正常调度中排除给定的处理器,以便只有在那里明确调度的进程才能在其中运行. 我还知道,在引导过程中,我可以限制init进程使用的处理器,因此可以限制所有继承的进程.但是,我希望有比这更动态的解决方案-在启动后我
..
我正在为嵌入式设备交叉编译3.4.0内核.然后,我想安装需要/lib/modules/3.4/build目录和子文件的compat-wireless驱动程序.谁能解释我如何建立该目录,以便在执行INSTALL_MOD_PATH=newmodules make modules_install时也可以加载/lib/modules/$(uname -r)/build目录?我希望您能给出清楚的解释.
..
我正在尝试根据 Essential Linux设备驱动程序一书来实现虚拟鼠标驱动程序.有一个用户空间应用程序,它可以生成坐标以及内核模块. 请参阅:虚拟鼠标驱动程序和用户空间应用程序代码,以及逐步说明如何使用此驱动程序. 1.)我编译了用户空间应用程序和驱动程序的代码. 2.)接下来,我检查了dmesg输出并具有 输入:未指定的设备为/class/input/input32
..
我正在开发块分层设备驱动程序.因此,我拦截了 WRITE 请求并加密了数据,并在end_bio()例程中解密了数据(在处理和 READ 请求期间). 因此,所有功能都可以在单个流中正常运行.但是,如果试图同时从两个或多个进程执行I/O,我将缓冲内容损坏.我没有用于缓冲区的本地存储. 我是否需要将BIO合并到我的驱动程序中? Linux I/O子系统是否有一些与大量并发I/O请求相关的要
..
现在,我正在阅读Robert Love的书"Linux Kernel Development 3d Edition".他在那里写了有关thread_info结构的信息,该结构包含指向task_struct结构的指针,并且据我所知,它位于进程的内核堆栈的底部或顶部(取决于体系结构).直到最近我才对Linux内核API感到陌生,并且不了解current()方法的存在.本书摘录了有关current()方
..
在此答案中,作者指出: With the 64-bit x86_64 kernel, a 32-bit process can use the entire 4GB address space, except for a couple pages (8KB) at the end of the 4GB address space which are managed by the kernel.
..
我已经开始在我的OS课程中查看linux内核代码.在那我对sys文件系统(sysfs)感兴趣.我有兴趣了解何时以及如何创建sysfs? linux内核代码中的哪些文件生成此文件系统? 我在系统上设置了linux内核,并已开始通过代码进行调试. 我已参考此文档来了解sysfs文件系统: [sysfs]: https://www.kernel.org/doc/Documentation/f
..
我正在通过系统调用执行copy_to_user(). 如何获取它以在出错时生成segfault或sigbus,就像用户空间试图访问相同的内存一样? 解决方案 好吧,一般来说,你做不到.除非您打算重写内核. 当内核访问用户模式地址时,它使用一种安全形式,通常是copy_from_user,copy_to_user,get_user,...-如前所述.这些宏具有内核检查的返回值,并
..
我一直在做一些研究,对此宏有些困惑.希望有人能给我一些指导.我有一些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_
..
我想迭代内核中的所有任务(线程和进程),并使用for_each_process宏打印tid/pid和名称: #define for_each_process(p) \ for (p = &init_task ; (p = next_task(p)) != &init_task ; ) 如何区分线程和进程? 所以我将这样打印: if (p->real_parent->
..
我刚刚阅读《 Linux内核模块编程指南》,并被困在字符上设备驱动程序示例. 提供了先前示例的Makefile,但没有提供此示例,因此我尝试制作一个: obj-m += chardev.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/mo
..
我正在尝试编译"hello world"内核模块的示例, 在ubuntu 11.04,内核3.2.6,gcc 4.5.2和fedora 16,内核3.2.7,gcc 4.6.7上发现的问题. 代码: #include #include MODULE_LICENSE("GPL"); static int __init he
..
我正在将自定义的initramfs映像作为CPIO存档构建到Linux内核(3.2)中. 我遇到的问题是,无论我尝试什么,内核似乎都没有尝试从initramfs运行. 我在CPIO存档中拥有的文件: cpio -it
..
内核空间中有一个libc吗?我的意思是您必须针对某些libc构建内核,对吗?那么,内核空间中是否存在一个libc(可能是静态链接的)? 如果是,这与userland glibc有什么关系?它们必须是同一版本吗? 解决方案 内核空间中实际上没有libc. Libc是用户空间库,您不能在内核空间中使用它. 但是移植了libc中几乎所有在内核空间中有意义的函数.通常,您可以在incl
..