当内核代表用户程序(即系统调用)执行时是否使用内核空间?或者它是所有内核线程(例如调度程序)的地址空间?
如果是第一个,那么是否意味着普通用户程序的内存不能超过3GB(如果划分为3GB + 1GB)?另外,在这种情况下,内核如何使用高端内存,因为高端内存中的页面将映射到哪个虚拟内存地址,因为 1GB 的内核空间将被逻辑映射?
当我lspci -k使用 3.2.0-29-generic 内核在我的 Kubuntu 上做一个时,我可以看到这样的东西:
01:00.0 VGA compatible controller: NVIDIA Corporation G86 [Quadro NVS 290] (rev a1)
    Subsystem: NVIDIA Corporation Device 0492
    Kernel driver in use: nvidia
    Kernel modules: nvidia_current, nouveau, nvidiafb
Run Code Online (Sandbox Code Playgroud)
有一个内核驱动程序nvidia和内核模块nvidia_current,nouveau,nvidiafb。
现在我想知道内核驱动程序和内核模块之间可能有什么区别?
我知道在某些情况下,将 Windows 安装从一台计算机移动到另一台计算机(物理移动硬盘驱动器)可能会很困难,但这在 linux 上如何工作?大多数驱动程序模块不是在启动时加载的吗?所以理论上会这么麻烦吗?
显然,xorg 配置会改变,专有的 ATI 驱动程序必须重新编译(也许?)。还有比我想象的更多的吗?
假设两台电脑来自同一个时代,即都是 i7,但硬件略有不同。
更新:
感谢您的回答。这主要是为了我自己的好奇心。我的 linux 系统已启动并在工作中运行,但最终我想搬到一台可以安装双显卡的计算机上,这样我就可以运行 2 个以上的显示器。但不会很快
在 Linux 中,诸如cp或之类的命令的完成执行dd并不意味着数据已写入设备。例如,必须调用sync或调用驱动器上的“安全删除”或“弹出”功能。
这种方法背后的哲学是什么?为什么不一次写入数据?是否存在因 I/O 错误而导致写入失败的危险?
在 Linux 上,给出:
/dev/sda,8, 0,我怎么知道哪个模块/驱动程序在“驱动”它?
我可以深入研究/sys或/proc发现吗?
我正在学习设备驱动程序和内核编程。根据 Jonathan Corbet 的书,main()设备驱动程序中没有功能。
所以我有两个问题:
main()设备驱动程序中的函数?main()功能吗?谁可以给我解释一下这个?
您能否推荐一种方法来确定 USB 设备正在使用哪个驱动程序。某种 USB 等效lspci -k命令。
我尝试更新我的 nVidia 驱动程序,但在运行驱动程序安装时出现错误。
查看错误:
  ERROR: You appear to be running an X server; please exit X before            
         installing.  For further details, please see the section INSTALLING   
         THE NVIDIA DRIVER in the README available on the Linux driver         
         download page at www.nvidia.com.
Run Code Online (Sandbox Code Playgroud)
注意:我尝试通过键入来遵循指南,init 3但仍然没有任何变化.. 如何关闭 X 服务器?
所以我可以更新驱动程序
在lxr.linux.no浏览 linux 2.6.36 源代码,我ioctl()在file_operations. 相反,我发现了两个新调用:unlocked_ioctl()和compat_ioctl()。是什么区别ioctl(),unlocked_ioctl()和compat_ioctl()?
这个问题有两个方面:
首先,您如何手动从 USB 设备上分离驱动程序并连接不同的驱动程序?例如,我有一个连接时自动使用 USB 存储驱动程序的设备。
Vendor Id: xxxx
Product Id: xxxx
...
    Number of Interfaces: 2
    Interface Number: 0
        Name: usb-storage
        Number of Endpoints: 2
        ...
    Interface Number: 1
        Name: (none)
        Number of Endpoints: 2
        ...
Run Code Online (Sandbox Code Playgroud)
我不想使用 USB 存储驱动程序,因此在我的应用程序中,我使用该libusb库来分离 USB 存储驱动程序,然后声明该接口。然后,我可以在我的 USB 设备和我的主机 Linux 系统上运行的应用程序之间发送数据。
如何在应用程序之外手动分离驱动程序?
其次,如何自动分配驱动程序以附加到设备插件上?我目前有一个 udev 规则设置来自动设置设备权限:
SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", MODE="0666"
Run Code Online (Sandbox Code Playgroud)
我可以使用 udev 规则为 USB 设备上的特定接口分配驱动程序吗?例如,如果我希望在接口 0 上自动使用 usbnet 模块而不是 usb-storage,这在 udev 中可能吗?