标签: kernel-modules

FreeBSD 中 rc.conf、loader.conf 和静态内核链接之间的区别

我很好奇:

将模块静态链接到内核而不是通过 rc.conf 等加载到底有什么好处?

例如:

要添加 Linux 模拟,我可以添加linux_enable="YES"到,或者我可以通过添加到我的内核配置/etc/rc.conf将其链接到内核。options COMPAT_LINUX

这实际上有好处吗?如果是这样,那又怎样?

freebsd kernel boot-loader kernel-modules rc

3
推荐指数
1
解决办法
1220
查看次数

lsmod 在我的嵌入式设备上没有返回任何内容

我已将供应商提供的嵌入式 Linux 安装(称为 X-Linux)安装到硬件设备上。我跑去lsmod看加载了哪些模块,但什么也没显示。系统上也没有 /proc/modules 目录。这是什么意思?这是否意味着没有加载驱动程序来与板上的其余设备(以太网、串行等?)进行通信。我不明白这是怎么回事,因为我已经能够配置主板的静态 IP,并且能够ftpget从我的桌面开发机器成功获取文件。我真的不确定发生了什么以及系统的稳定性。这是一个问题还是预期的行为?

drivers embedded kernel-modules

3
推荐指数
1
解决办法
5844
查看次数

什么是 iwlwifi 的“lar_disable”?

例如,我看到很多lar_disable这样的帖子参考。我想知道它有什么作用。modinfo iwlwifi只是说,

parm:           lar_disable:disable LAR functionality (default: N) (bool)
Run Code Online (Sandbox Code Playgroud)

什么是“LAR 功能”?

wifi kernel-modules terminology

3
推荐指数
1
解决办法
3652
查看次数

内核编译:生成modules.dep和map文件

我正在 Debian Stretch 上编译 linux 内核:

cd linux-4.9.59/
make menuconfig
make
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好。

通常,我会发出make modules_install, 将模块复制到/lib/modules/.

但是这个内核是为另一台机器准备的,所以我不想在本地复制模块。此外,我不是以 root 身份编译的,所以/lib/modules/无论如何写入都行不通。

export INSTALL_MOD_PATH="../MY_NEW_KERNEL"
mkdir -vp "${INSTALL_MOD_PATH}

make modules_install
Run Code Online (Sandbox Code Playgroud)

以上将新编译的模块复制到目录../MY_NEW_KERNEL/lib/modules/. 但它不会生成 modules.dep 和 map 文件../MY_NEW_KERNEL/lib/modules/

通常,如果这是当前正在运行的内核,我可以运行depmod以在/lib/modules/. 但是我没有在当前机器上运行这个内核。

甚至当我将 bzImage 和模块复制到目标机器时,我也必须先重新启动到新内核,然后运行depmod.

但问题是,内核无法启动,因为它找不到模块,因为我没有运行depmod.

depmod当内核当前未运行时,如何运行内核模块?

debian kernel-modules linux-kernel

3
推荐指数
1
解决办法
2975
查看次数

lsmod 在 WSL 上运行的 Debian 上给出错误:“无法获取模块列表”

当我运行lsmod或 时sudo lsmod,我收到一条错误消息:

libkmod: ERROR ../libkmod/libkmod-module.c:1655 kmod_module_new_from_loaded: could not open /proc/modules: No such file or directory
Error: could not get list of modules: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我在很多论坛上搜索过,但无法找到解决方案。我在 Linux 的 Windows 子系统上运行 Debian。

我最近还试图编辑该sysctl.conf文件以禁用ipv6。我添加了以下几行:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
Run Code Online (Sandbox Code Playgroud)

当我尝试时sudo sysctl -p,它返回了这个错误:

sysctl: cannot stat /proc/sys/net/ipv6/conf/all/disable_ipv6: No such file or directory
sysctl: cannot stat /proc/sys/net/ipv6/conf/default/disable_ipv6: No such file or directory
sysctl: cannot stat /proc/sys/net/ipv6/conf/lo/disable_ipv6: No …
Run Code Online (Sandbox Code Playgroud)

debian kernel-modules sysctl windows-subsystem-for-linux

3
推荐指数
1
解决办法
4757
查看次数

如何在不重新编译的情况下将公钥添加到内核的系统密钥环中?

我想将用于签署内核模块的密钥对中的公钥添加到 system_keyring 中。然而,有一个问题:

通过命令cat /proc/keys | grep system_keyring,我得到了system_keyring的条目(ID)。但是,当尝试使用以下命令添加我的公钥时:keyctl padd asymmetric "" 0xXXXXXXXX</test/signing_key.x509,我收到“权限被拒绝”错误。

我认为这是由于“module_signing.txt”中描述的限制https://01.org/linuxgraphics/gfx-docs/drm/admin-guide/module-signing.html

但请注意,如果新密钥的 X.509 包装器由添加密钥时已驻留在 .system_keyring 中的密钥有效签名,则内核将仅允许将密钥添加到 .system_keyring 中。

但是,我找不到任何文档来描述如何使用已驻留在 .system_keyring 中的密钥对“X.509 包装器”进行签名。

另外,我认为该密钥环中的密钥只是公钥。因此,即使我可以从密钥环中提取公钥并使用该公钥签署“X.509 包装器”,我什至认为它不会起作用。

无论如何,这里需要一些帮助。或者,即使有东西可以给我一个提示,告诉我如何将我的内核模块提交到 RedHat,以便它可以由 RedHat 签名并安装在用户的安装上,而无需重建内核?

linux kernel kernel-modules key-authentication

3
推荐指数
1
解决办法
8152
查看次数

PC 扬声器的 Linux 模块:pcspkr 与 snd_pcsp

这两个模块有什么区别

  • pcspkr: PC 扬声器驱动程序
  • snd_pcsp: PC 扬声器驱动程序

不同的教程需要不同的教程

linux ubuntu audio kernel-modules

3
推荐指数
1
解决办法
4086
查看次数

减少启动时间

我很想找到减少启动时间的方法,特别是在嵌入式相关环境中。

我已经在某处阅读了一种避免内核加载某些驱动程序或模块的方法,但我完全迷失了,而且我在互联网上找到的所有信息都非常复杂和密集。

任何人都可以提出实现这一目标所需的一般步骤吗?也许我错了,这与内核无关。

boot embedded kernel-modules raspberry-pi beagleboneblack

3
推荐指数
1
解决办法
1601
查看次数

PCI 硬件访问速度 - 内核与用户空间

嗨,Linux 专家!

我试图找到控制和强调 PCI 设备的最佳方法。我首先编写了一个简单的 bash 脚本,该脚本使用来自 pciutils(lspci 和 setpci)的命令来配置设备并在总线上创建流量

虽然脚本工作得很好,但它们的执行速度似乎比 PCIe 链接速度慢得多,因此很难在总线上产生压力,或在电源模式和链接速度之间快速切换。

我想知道,如果我写了一个内核模块来调用 pci.h 库中的函数,它的执行速度会更快吗?我能否更快地访问 PCI 设备?

任何帮助将不胜感激:)

pci kernel-modules

3
推荐指数
1
解决办法
166
查看次数

Linux 内核从 5.0 版本开始有 CR0 保护吗?

在内核版本 2.X 到 4.X 中,您可以使用以下命令轻松覆盖内核模块中的第 16 个CR0位:

write_cr0(read_cr0() & (~ 0x10000));
Run Code Online (Sandbox Code Playgroud)

这样它就可以删除系统调用表上的写保护。然而现在,在 5.X 版本上,这似乎不会覆盖 CR0 位。如果您在使用上述技巧后尝试劫持系统调用表,

sys_call_table = (void *)kallsyms_lookup_name("sys_call_table");
write_cr0(read_cr0() & (~0x10000));
iamhere("Saving the old call..");
old_open = sys_call_table[__NR_open];
iamhere("Setting the new one..");
sys_call_table[__NR_open] = hijacked_open;
write_cr0(read_cr0() | 0x10000);
Run Code Online (Sandbox Code Playgroud)

您会收到 0x0003 权限违规错误。
错误

所以,我的问题是:新的内核模式保护措施是否已到位?如果是这样,对于 rootkit 的情况,是否还有任何可能的方法可以绕过它?

kernel-modules linux-kernel

3
推荐指数
1
解决办法
879
查看次数