首页 文章
  • 7 votes
     answers
     views

    是否有原始的linux系统调用API / ABI文档

    系统调用有man(2)页面,但这些页面描述了位于系统调用之上的C库(glibc)的行为 . 原始系统调用API / ABI是否记录在某处(UseTheSourceLuke除外)?我在手册页中看到了一些内核/ libc之间的差异,但我并没有感觉到记录这些差异是最重要的 . 我真正要说的是:通过POLICY将C库视为稳定/记录的Linux API,并且内核的系统调用API / ABI被认为是不稳定的(...
  • 0 votes
     answers
     views

    中断服务程序在iret上崩溃

    我正在编写一个中断服务程序,用于我正在编写的32位保护模式内核(来自网络的GPL代码的帮助;来自GazOS) . 我正在研究IDT并启用irq 1来测试键盘处理程序 . ISR看起来像这样:= .globl keyb_ISR keyb_ISR: pusha pushw %ds pushw %es pushw %ss pushw %ss popw %ds pop...
  • 0 votes
     answers
     views

    在iptable规则上使用--dport,引导我“通过该名称没有链/目标/匹配 . ”

    我在ububntu环境中使用qemu作为访客启动基于Linux的操作系统 . 当我从qemu启动来宾操作系统时,我将内核文件作为bzimage和ext4文件作为主文件 . $ sudo qemu-system-i386 -enable-kvm -kernel bzImage-linux-yocto-qemux86.bin ........ -drive file = apollo-image-qe...
  • 2 votes
     answers
     views

    用于学习在系统/内核级编程的教科书/在线资源

    有没有可以参考的书/资源,能够在内核/系统级编写程序 . 我正在寻找一本可以作为编写内核代码/系统级编程等指南的编程书 . 我有Tannenbaum的设计和实现 . 它很好地解决了理论问题 . 但是,一本教授这些主题的编程的书会很有帮助 . 我希望能够实现线程库,调度程序等 . 谢谢
  • 13 votes
     answers
     views

    SYSCALL / SYSRET指令如何跨x86 CPU执行?

    SYSCALL 和 SYSRET (以及它们仅32位的英特尔对应物 SYSENTER 和 SYSEXIT )通常被描述为在x86处理器中进入和退出管理员模式的“通常更快”的方式,而不是调用门或软件中断,但这个声明的确切数字仍然很大程度上没有证件 . 特别是,我能找到的所有英特尔或AMD优化指南都没有提及这些指令 . 所以: 最近的英特尔64微架构 SYSCALL 和 SYSRET 需要多少个周期...
  • 3 votes
     answers
     views

    哪些指令只能在内核模式下运行? [关闭]

    哪些指令(对于x86芯片)只能在内核模式下运行?我试图了解用户和内核模式之间的实际区别 . 到目前为止,我知道地址空间的一部分只能在内核模式下访问 . 此内存空间包含应受到保护以免受用户程序影响的驱动程序等 . 内核模式如何在CPU中实际实现?在CPU中有一点转1或类似的事情发生? Edit :在下面提供了答案之后 . 我只是在这里添加从答案中提到的链接复制的部分答案 . Privileged L...
  • 3 votes
     answers
     views

    谁在Linux内核中进行上下文切换后调用IRET?

    我一直试图理解上下文切换在Linux内核中是如何工作的 . 在我看来,有一种情况(后面会解释)导致在中断后没有调用IRET指令(我确信有些东西我错过了!) . 我假设在中断之后调用IRET是非常必要的,因为在调用IRET之前你不能得到相同的中断 . 我只担心在x86 arch上运行的单处理器内核 . 我认为可能导致所述行为的情况如下: 进程在内核模式下运行会自动调用 schedule() (例...
  • 2 votes
     answers
     views

    在debian wheezy上编译新内核

    我'm trying to compile the 3.8.11 kernel on Debian 7.0 Wheeze. I'm使用this教程,但在最后一步有一个奇怪的问题: sudo dpkg -i linux-headers-3.8.11_3.8.11-10.00.Custom_amd64.deb 失败并缺少依赖项: linux-headers-3.8.11依赖于libc6-amd6...
  • 0 votes
     answers
     views

    Linux内核编译错误

    我从Linus的github克隆了内核源代码,我对usbhid驱动程序进行了一些修改(这可以很好地编译为模块,没有错误),但如果我尝试构建整个内核,我会收到此错误: AR drivers/gpu/drm/built-in.o AR drivers/gpu/built-in.o Makefile:1023: recipe for target 'drivers' failed m...
  • 8 votes
     answers
     views

    内核模块Init和Exit函数的调用顺序错误

    我'm making a very simple hello world kernel module and getting some crazy behavior. This worked until I upgraded to kernel 3.3.8 and now it... Well, it'在退出时调用 init 函数,在初始化时调用 exit 函数 . 我确保我的名字是正确的 // ...
  • 1 votes
     answers
     views

    构建linux内核模块

    我是一个Windows驱动程序员,是Linux内核开发的新手 . 我已经安装了linux内核头文件 . 我在linux内核中尝试我的helloworld模块 . #include <linux/init.h> #include <linux/module.h> /*MODULE_LICENSE("Dual BSD/GPL");*/ static int ...
  • 13 votes
     answers
     views

    如何在Ubuntu中启动时加载自定义模块?

    我创建了一个名为Hello.ko的自定义简单模块 . 我使用命令“ insmod hello.ko ", I check it with " dmesg”安装模块并且它正常工作,但是当我重新启动系统时,我必须手动加载它 . 那么,如何自动加载我的自定义模块,以及在哪里放置hello.ko?加载模块后,我想显示消息 Hello World ,直到我按下Enter键 . 有谁能够...
  • 0 votes
     answers
     views

    Hello World内核模块格式无效

    我目前正在尝试运行我的Hello World内核模块,但我有点挣扎,我不知道为什么 . 首先 uname -r 2.6.32-358.23.2.el6.x86_64 我的Hello.c #include <linux/module.h> /* Needed by all modules */ #include <linux/kernel.h> /*...
  • 8 votes
     answers
     views

    将驱动程序编译为内核的一部分,而不是作为模块

    我正在尝试为嵌入式设备创建简约的Linux . 这意味着编译内核和驱动程序的必要性 . 一个驱动程序由它的创建者直接为设备的板写入,因此它不是存储库 . 它可以编译为内核模块 . 但是由于Linux的不可变性以及对内存使用极少的要求,我不想使用模块 . 我想要内核中内置的所有驱动程序 . 所有提供内核的驱动程序都是这样设置的 . 所以我的问题是如何将一个特殊的驱动程序编译到内核? 所有搜索都没有为...
  • 5 votes
     answers
     views

    使内置的虚拟机内核模块,而不是模块,完成一半

    我正在尝试内置虚拟机内核模块,我几乎已经在这里完成了,但是在最后一步,它停止了编译,因为内核似乎将所有vbox *模块视为单个模块: drivers/vboxnetadp/built-in.o: In function `cleanup_module': (.exit.text+0x0): multiple definition of `cleanup_module' drivers/vboxdr...
  • 1 votes
     answers
     views

    在linux中编译内核模块时出现问题

    我写了一个简单的hello world内核模块 . make文件由我编写如下: obj -m += hello.o KDIR: /usr/src/linux-headers-3.2.0-21-generic-pae all: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules clean: rm -rf *.o *.ko *.mod.* ...
  • 0 votes
     answers
     views

    如何理解Linux内核模块的“构建单独文件”?

    摘自Linux内核documentation: 2.4构建单独的文件 It is possible to build single files that are part of a module. This works equally well for the kernel, a module, and even for external modules. Example (The modu...
  • 2 votes
     answers
     views

    有助于在操作系统类中学习Windows内核开发的资源?

    我目前正在大学操作系统课程中,我们正在为我们的项目开发Windows内核,更准确地说是Windows研究内核WRK . WRK基于win2k3服务器 . 然而,我正在努力挖掘资源以帮助学习操作系统开发,Windows内核开发以及通常绕过Windows API的基础知识 . 我们正在使用Russinovich的Microsoft Internals这本书,但我想知道你是否有一些很好的资源可以推荐给...
  • 1 votes
     answers
     views

    编写自己的内核有什么好处

    我对操作系统编程非常感兴趣 . 我想从空白的文件中编写自己的内核 . 我非常了解C语言并且有点汇编 . 我打算购买Andrew tanenbaum的书:“操作系统设计和实现”并开始阅读它 . 每个人都告诉我,这只是浪费时间,如果我放弃编写自己内核的想法会很好 . 但我只是想知道幕后的一切是如何工作的,学习编写自己的内核只是出于教育目的,我没有任何幻想,我的操作系统将是巨大的和可用的 . 有没有办法...
  • 0 votes
     answers
     views

    Java中的操作系统

    我们的团队由10人组成,旨在从头开始构建移动设备/平板电脑操作系统 . 然后我来到这个链接awesome-link,其中有一些OS简介 . 但是我们想在Linux内核之上用Java构建操作系统(可能吗?) . 我想知道该项目是否可行,如果是,我应该从哪里开始?凭借所有知识和正确的资源(假设),是否有可能在6个月内构建具有所有移动功能的操作系统? 任何帮助深表感谢 . 谢谢 .
  • 1 votes
     answers
     views

    裸金属树莓派2:为QEMU仿真生成SD卡图像

    我最近一直在为Raspberry Pi 2进行裸机开发,并取得了一些成功 . 不可否认,我已经犹豫要购买一个实际的物理设备,直到我觉得我可以用它做一些有用的东西,暂时我一直在使用qemu 2.11.0模拟设备 . 到目前为止,我已经为我的内核开发了多核功能,以及简单的串行I / O,但我觉得在使用物理设备之前我还想进一步了解 . 我现在的问题是,我正在尝试学习如何将我的内核放到SD卡映像上并从SD...
  • 0 votes
     answers
     views

    KMDF IOCTL与nonpnp驱动程序通信?

    我正在尝试编写一个Windows非pnp内核模式软件驱动程序,它应该与我的用户模式应用程序进行双向通信(用户发送请求和驱动程序响应) . 问题是我找不到示例或文档 - msdn示例驱动程序很难编译 - 如何使用非pnp驱动程序处理IOCTL请求 . 我浪费了几天研究,无法让它发挥作用 . 我只是想问一下这种沟通是否是推荐的,并且会感谢所有能帮助我完成项目的东西,比如可理解的文档或简单的示例驱动程...
  • 3 votes
     answers
     views

    ioremap之后的内存访问非常慢

    我正在开发一个Linux内核驱动程序,它可以为用户空间提供一大块物理内存 . 我有一个工作版本的驱动程序,但它目前非常慢 . 所以,我已经退回了几步,尝试制作一个小而简单的驱动程序来重现问题 . 我使用内核参数 memmap=2G$1G 在启动时保留内存 . 然后,在驱动程序的 __init 函数中,我将一些内存初始化为已知值 . 我还提供了一些代码来测量时序: #define RESERVED_...
  • 2 votes
     answers
     views

    Windows 7驱动程序挂钩

    我的问题是关于Windows 7的驱动程序开发 . 我需要拦截对驱动程序的系统调用 . 从理论上讲,在这种情况下,建议创建一个过滤器驱动程序,但在我的情况下,驱动程序不会公开过滤器兼容的接口 . 确切地说,这是一个Vista / 7显示微型端口驱动程序 . 显示驱动程序作为标准WDM驱动程序加载 . 在它的 DriverEntry 中,它应该调用一个 DxgkInitialize 系统例程(由wi...
  • 3 votes
     answers
     views

    会话空间中的win32k.sys映射地址

    我的问题: 当win32k.sys加载到会话空间时,它是否在每个会话中获得相同的基址? 细节: 我正在为Windows(32位)编写内核模式设备驱动程序 . 它在系统引导期间作为标准WDM驱动程序加载到 system space (全局内核模式内存)中 . 但是在某些情况下我需要访问win32k.sys导出的函数 . 确切地说,我正在编写一种有时需要伪装成显示驱动程序的驱动程序 . 我 may n...
  • 5 votes
     answers
     views

    Windows显示驱动程序挂钩,64位

    一旦我为Windows编写了一种驱动程序,它必须拦截本机显示驱动程序与操作系统的交互 . 本机显示驱动程序由一个微型端口驱动程序和一个由win32k.sys加载到会话空间的DLL组成 . 我的目标是介入win32k.sys和该DLL之间 . 此外,系统可能有几个显示驱动程序,我不得不挂钩它们 . 我创建了一个标准的WDM驱动程序,它被配置为在系统启动时加载(即在win32k之前) . 在初始化期间...
  • 0 votes
     answers
     views

    确定驱动程序模块所在的位置(内存地址)

    当动态加载linux内核驱动程序时,我们如何编写C函数来报告驱动程序模块所在的位置(内存地址)? 这更适用于Windows,但是,如果我们适应类似的Linux驱动程序会有用吗? long sizeOfExe = 0; FILE *fp; fp = fopen("./Mini.ko", "rb"); // reading itself ...
  • 0 votes
     answers
     views

    Windows中的内核模式驱动程序开发

    我正在开发一个新的内核模式驱动程序,它应该在Windows 10(64位)上运行 . 此驱动程序应分配48GB的 continuous physical 内存,并将其(其基址)映射到将使用它的Windows应用程序的用户空间中的虚拟地址 . 系统实际上安装了64GB的RAM,因此可能需要通过更改引导条目信息来创建专用于此用途的一段内存 . 此外,驱动程序应以某种方式向位于PCIe插槽上的基于FPG...
  • 7 votes
     answers
     views

    从内核模式执行用户模式可执行文件

    我'm building a HW-simulator for our driver team. Now, the simulator is devided in to 2 modules: First module runs inside the driver, in kernel mode and that' s驱动程序和HW-Simulator之间的主要接口 . 第二个模块是一个可执行的用户...
  • 0 votes
     answers
     views

    简单的内核模式驱动程序

    我正在创建简单的内核模式驱动程序(空项目)来尝试一些 在用户模式应用程序上读/写内存操作 . 我在编译项目时遇到错误在这些方面: NTSTATUS NTAPI MmCopyVirtualMemory(PEPROCESS SourceProcess, PVOID SourceAddress, PEPROCESS TargetProcess, PVOID TargetAddress, SIZE_T ...

热门问题