在某些情况下,Linux 内核可能会受到污染。例如,将专有视频驱动程序加载到内核中会污染内核。这种情况可能在系统日志、内核错误消息(oops 和 panics)中以及通过诸如 和 之类的工具可见lsmod
,并且会一直保持到系统重新启动。
这是什么意思?它会影响我使用系统的能力吗?它会如何影响我的支持选项?
我正在寻找一些内核模块来加载i2c-dev
和i2c-bcm2708
. 但modprobe
命令返回:
sudo modprobe i2c-dev
modprobe: module i2c-dev not found in modules.dep
Run Code Online (Sandbox Code Playgroud)
如何列出系统中所有可用的模块?它们位于哪个目录中?
当我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
。
现在我想知道内核驱动程序和内核模块之间可能有什么区别?
在 Linux 上,给出:
/dev/sda
,8, 0
,我怎么知道哪个模块/驱动程序在“驱动”它?
我可以深入研究/sys
或/proc
发现吗?
我正在尝试在 Debian Stretch 中安装最新的 NVIDIA 驱动程序。我已经NVIDIA-Linux-x86_64-390.48.run
从这里下载了,但是当我尝试这样做时
sudo sh ./NVIDIA-Linux-x86_64-390.48.run
Run Code Online (Sandbox Code Playgroud)
按照建议,出现错误消息。
ERROR: An NVIDIA kernel module 'nvidia-drm' appears to already be loaded in your kernel. This may be because it is in use (for example, by an X server, a CUDA program, or
the NVIDIA Persistence Daemon), but this may also happen if your kernel was configured without support for module unloading. Please be sure to exit any programs
that may be using the GPU(s) …
Run Code Online (Sandbox Code Playgroud) 您能否推荐一种方法来确定 USB 设备正在使用哪个驱动程序。某种 USB 等效lspci -k
命令。
这个问题有两个方面:
首先,您如何手动从 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 中可能吗?
我的发行版是 Fedora 17 Gnome。每次重新启动/重新启动计算机时,我都需要以 root 身份运行此命令:
modprobe rt2800usb
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它永久?
我想在 Linux(最好是 Ubuntu)中创建一个 USB 到 USB 数据传输系统。为此,我不想使用任何外部硬件或开关(除了这条电缆)。这就像将 USB 驱动器安装到系统一样,但在这种情况下,一个 Linux 系统将安装在另一个系统上。我怎样才能创建这个?
鉴于我的内核编程经验非常基础,是否有任何可用的内核模块?
我正在运行 Ubuntu 12.04 衍生版 (amd64),最近我遇到了非常奇怪的问题。出乎意料的是,X 似乎会完全冻结一段时间(1-3 分钟?),然后系统将重新启动。该系统已超频,但在 Windows 中经过验证非常稳定,这让我相信我遇到了内核恐慌或我的模块之一出现问题。即使在 Linux 中,我也可以运行 LINPACK 并且不会看到崩溃,尽管在 CPU 上施加了可笑的负载。崩溃似乎是随机发生的,即使机器闲置时也是如此。
如何调试导致系统崩溃的原因?
我预感它可能是专有的 NVIDIA 驱动程序,我一直还原到驱动程序的稳定版本 304 版本,但我仍然遇到崩溃。
任何人都可以引导我完成崩溃后的良好调试过程吗?我很乐意启动拇指驱动器并发布我所有的崩溃后配置文件,我只是不确定它们会是什么。我怎样才能找出是什么导致了我的系统崩溃?
这是一堆日志,通常是罪魁祸首。
.xsession 错误:http : //pastebin.com/EEDtVkVm
/var/log/Xorg.0.log:http://pastebin.com/ftsG5VAn
/var/log/kern.log:http://pastebin.com/Hsy7jcHZ
在/ var / log / syslog的:http://pastebin.com/9Fkp3FMz
我什至似乎根本找不到坠机记录。
触发崩溃并不是那么简单,当 GPU 试图一次绘制多个东西时,它似乎会发生。如果我全屏播放 YouTube 视频并让它重复一段时间或滚动浏览大量 GIF 并弹出 Skype 通知,有时它会崩溃。在这个问题上完全摸不着头脑。
CPU 超频到 4.8GHz,但它完全稳定,并且在昨天的 LINPACK 运行和 9 小时的 Prime95 中幸存下来,没有发生一次崩溃。
我已经为我的内核版本 3.2.0-35安装了kdump
、crash
和linux-crashdump
,以及内核调试符号。当我apport-unpack
在崩溃的内核文件上运行,然后crash
在VmCore
故障转储上运行时,我看到的是:
KERNEL: /usr/lib/debug/boot/vmlinux-3.2.0-35-generic
DUMPFILE: …
Run Code Online (Sandbox Code Playgroud) kernel-modules ×10
drivers ×5
kernel ×5
linux ×3
linux-kernel ×2
systemd ×2
usb ×2
crash ×1
debian ×1
kernel-panic ×1
modprobe ×1
nvidia ×1
startup ×1
udev ×1