我很好奇:
将模块静态链接到内核而不是通过 rc.conf 等加载到底有什么好处?
例如:
要添加 Linux 模拟,我可以添加linux_enable="YES"到,或者我可以通过添加到我的内核配置/etc/rc.conf将其链接到内核。options COMPAT_LINUX
这实际上有好处吗?如果是这样,那又怎样?
我已将供应商提供的嵌入式 Linux 安装(称为 X-Linux)安装到硬件设备上。我跑去lsmod看加载了哪些模块,但什么也没显示。系统上也没有 /proc/modules 目录。这是什么意思?这是否意味着没有加载驱动程序来与板上的其余设备(以太网、串行等?)进行通信。我不明白这是怎么回事,因为我已经能够配置主板的静态 IP,并且能够ftpget从我的桌面开发机器成功获取文件。我真的不确定发生了什么以及系统的稳定性。这是一个问题还是预期的行为?
例如,我看到很多lar_disable像这样的帖子参考。我想知道它有什么作用。modinfo iwlwifi只是说,
parm: lar_disable:disable LAR functionality (default: N) (bool)
Run Code Online (Sandbox Code Playgroud)
什么是“LAR 功能”?
我正在 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当内核当前未运行时,如何运行内核模块?
当我运行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) 我想将用于签署内核模块的密钥对中的公钥添加到 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 签名并安装在用户的安装上,而无需重建内核?
这两个模块有什么区别
pcspkr: PC 扬声器驱动程序snd_pcsp: PC 扬声器驱动程序不同的教程需要不同的教程
我很想找到减少启动时间的方法,特别是在嵌入式相关环境中。
我已经在某处阅读了一种避免内核加载某些驱动程序或模块的方法,但我完全迷失了,而且我在互联网上找到的所有信息都非常复杂和密集。
任何人都可以提出实现这一目标所需的一般步骤吗?也许我错了,这与内核无关。
嗨,Linux 专家!
我试图找到控制和强调 PCI 设备的最佳方法。我首先编写了一个简单的 bash 脚本,该脚本使用来自 pciutils(lspci 和 setpci)的命令来配置设备并在总线上创建流量
虽然脚本工作得很好,但它们的执行速度似乎比 PCIe 链接速度慢得多,因此很难在总线上产生压力,或在电源模式和链接速度之间快速切换。
我想知道,如果我写了一个内核模块来调用 pci.h 库中的函数,它的执行速度会更快吗?我能否更快地访问 PCI 设备?
任何帮助将不胜感激:)
在内核版本 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 ×10
debian ×2
embedded ×2
kernel ×2
linux ×2
linux-kernel ×2
audio ×1
boot ×1
boot-loader ×1
drivers ×1
freebsd ×1
pci ×1
raspberry-pi ×1
rc ×1
sysctl ×1
terminology ×1
ubuntu ×1
wifi ×1