是否可以在没有 initrd.img 的情况下启动 linux?我计划将默认驱动程序添加为内核本身的一部分,并完全避免使用 initrd。
哪些模块应该成为内核的一部分而不是可加载模块?
假设我有一个名为“mptsas”的模块。我怎样才能找出对应于该模块的内核配置菜单条目(在 /usr/src/linux 中创建 menuconfig)?
“对应”是指哪个菜单项将适当的模块编译到内核中。

//编辑:它工作得很好:

在 Gnome 密钥环的 Gentoo 安装过程中,我被告知要打开 EXT4 安全标签,内核文档中对此进行了描述:
安全标签支持由 SELinux 等安全模块实现的替代访问控制模型。此选项为 ext4 文件系统中的文件安全标签启用扩展属性处理程序。
该文档并没有多大帮助,因为我现在了解到它启用了一个属性处理程序,该处理程序将反过来为 ext4 文件系统启用安全标签。我可以从功能的名称中推断出这一点。那些标签是什么?他们如何提高安全性?
直接相关:防止 usbhid 声称新奇的 USB 设备,以便我可以用 libusb 控制它?
我想从使用 libusb-0.1 的程序访问 RFID 阅读器(用作 HID 设备)。在代码中,内核驱动程序正确分离usb_detach_kernel_driver_np(没有错误),但似乎每当我的程序尝试访问 USB 设备时,usbhid 模块都会回收它。以下错误总是出现在dmesg:
usb 1-1.3:usbfs:usbhid 声明的接口 0,而“MyProgram”设置配置 #1
我添加了以下 udev 规则,重新启动 udevd 并重新插入设备,但没有效果。它应该将设备列入黑名单,以免被 usbhid 使用。
# I anonymized the vendor/product IDs here
ATTRS{idVendor}=="dead", ATTRS{idProduct}=="beef", OPTIONS=="ignore_device"
Run Code Online (Sandbox Code Playgroud)
除了 dmesg 输出,我可以看到/sys/bus/usb/drivers/usbhid/设备1-1.3:1.0每次都会重新创建,因此黑名单似乎不起作用。
还有什么我可以尝试的吗?操作系统是 Raspbian(在 Raspberry Pi 上),内核为 3.2.27。
我试图了解使用 Linux 内核模块的缺点。我了解使用它们的好处:能够将代码动态插入到正在运行的系统中,而无需重新编译和重新启动基本系统。鉴于这种强大的优势,我猜测大部分内核代码应该在内核模块中,而不是作为基本内核的一部分,但情况似乎并非如此——大量的核心子系统(如内存管理)仍然进入基础内核。
我能想到的一个原因是内核模块在引导过程中加载得很晚,因此核心功能必须在基本内核中。我阅读的另一个原因是关于碎片化。
我真的不明白为什么内核模块会导致内存碎片,有人可以解释一下吗?使用内核模块还有其他缺点吗?
我不想在启动时在我的 debian 机器上加载内核模块 nouveau,所以我将以下内容放在 /etc/modprobe.d/blacklist.conf 中:
blacklist ttm
blacklist drm
blacklist nouveau
Run Code Online (Sandbox Code Playgroud)
我什至做了一个,update-initramfs -u但每次启动时都会加载这三个模块。
有谁知道为什么以及如何解决这个问题。
我想hello.ko在 Ubuntu 12.04 中启动时加载我的内核模块。我把它放进去/lib/modules/3.8.0-31-generic/kernel/ubuntu/hello.ko,跑了depmod -a,然后在/etc/modules.
但是,当我重新启动时,lsmod. 其中/var/log/upstart/module-init-tools.log有一个字符串“致命:未找到模块 hello”。
如果我运行modprobe hello一切正常。怎么了/etc/modules?它在哪里试图找到模块?
我的系统上安装了多个 DKMS 模块,其中一些是我的,还有一些属于非常重要的维护包,例如 Oracle 的 VirtualBox 5。
我发现在每次内核升级时,所有 DKMS 模块都会损坏并且没有安装在新内核中。我认为这是我自己模块中代表我的错误配置,但是现在我看到 VirtualBox 也损坏了,我怀疑是其他原因。
如何调试为什么 DKMS 没有在较新的内核版本中安装模块?
我使用的是内核 3.19,Ubuntu 14.04。
内核升级后dkms status没有输出任何内容,这意味着我的 DKMS 模块都没有正确安装。
我正在尝试解决一个问题:USB 鼠标在新安装的 linux 上不起作用。
我怀疑问题在于我的 USB 硬件没有合适的内核模块/驱动程序。的确:
$ lspci -knn
...
01:00.0 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD] Device [1022:43b9] (rev 02)
Subsystem: ASMedia Technology Inc. Device [1b21:1142]
01:00.1 SATA controller [0106]: Advanced Micro Devices, Inc. [AMD] Device [1022:43b5] (rev 02)
Subsystem: ASMedia Technology Inc. Device [1b21:1062]
Kernel driver in use: ahci
...
Run Code Online (Sandbox Code Playgroud)
如您所见,没有为 USB 控制器设备报告内核驱动程序(我想应该以类似于为 SATA 控制器报告的驱动程序的方式报告)
因此,我需要使用适合我设备的模块重建内核。但是我怎样才能找出我应该构建什么模块呢?我有识别我的设备的信息:它是供应商 ID 和硬件 ID ([1b21:43b9])。给定这些信息,如何找出对应的内核模块名称?
我想在我的系统(Debian 9)上启动时加载一个自定义内核模块。这个模块的 vermagic 字符串与我的内核版本不完全匹配,但我可以使用modprobe -f module_nameor加载它insmod -f /path/to/module,它似乎工作正常。
如果我只是将模块的名称添加到/etc/modules-load.d/modules.conf它不起作用,则 systemctl 显示 systemd-modules-load.service 在尝试加载模块时出错。
我可以告诉 systemd 强制加载模块吗?