几天前,我将 openSUSE 12.3 系统从内核 3.9.8-1.gf3348a8-desktop 更新到 3.10.0-1.g3dcd746-desktop,从那时起,我的 i7 3520M 默认启用 Turbo 模式,并且不会降低速度闲置时。它始终以 3.6GHz 运行。
该intel_pstate模块默认启用,因此任何用户空间设置都将被忽略(按预期)。我的机器上不再安装 cpufreq 或 cpupower 等工具。
启动 3.9.8 内核仍然显示其旧行为,即 CPU 按预期进行节流。此外,添加intel_pstate=disable到内核命令行会停用 intel_pstate 模块,从而实现所需的 CPU 节流行为。
另一个不太感兴趣的点是,如果 CPU 受到限制(即内核 3.9.8 或禁用 intel_pstate),我将无法触发 CPU 的 Turbo 模式。
任何帮助表示赞赏。
我偶尔会有需要在维护窗口中使用的防火墙规则,但不希望在其余时间处于活动状态(因此会消耗 CPU 周期或减慢网络接口速度)。我在需要时添加规则,然后想要将其清除并阻止 iptables 对流经过滤器链的数据包和字节进行计数。
我第一次在详细模式下检查 iptables 时,数据包和字节计数始终为零。例如:
$ sudo iptables -L -n -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Run Code Online (Sandbox Code Playgroud)
然而,一旦过滤器表被初始化,刷新表或重置计数器并不会阻止表继续对数据包和字节进行计数。例如:
$ sudo iptables -F; sleep 5; sudo iptables -L -n …Run Code Online (Sandbox Code Playgroud) 在正在运行的 Linux 系统上,有什么可移植的(在 Linux 发行版中)方法来找出当前内核已编译(不通过模块)支持哪些文件系统?
以我当前的 Ubuntu x86_64 内核为例3.11.0-24-generic #41-Ubuntu:例如,它有 no /proc/config.gz,否则这将是我的第一个想法。
我感兴趣的原因是我想(以编程方式)使用当前内核和内核能够加载/安装的初始 ramdisk 构建一个救援环境。
/proc/filesystems 是不是就跟 比较一样简单lsmod?
如果是这样:模块是否始终具有lsmod与文件系统名称(中的最后一列)完全相同的名称(输出的第一列/proc/filesystems)?
是否有一种更现代的方式,例如/sys代替/proc寻找信息?
我目前的方法如下。有人可以确认它是正确的,或者建议如何做吗?:
for fscand in $(awk '{print $NF}' /proc/filesystems)
do
if test $(lsmod | grep -c -e '^'${fscand}'[^a-z0-9_-]') -eq 0
then
candlist="${fscand} ${candlist}"
fi
done
for fscand in $candlist
do
echo $fscand is compiled-in
done
Run Code Online (Sandbox Code Playgroud) 我正在尝试解决无线连接的一些问题,并尝试在此过程中学习一些东西。从这里和这里我了解了两种不同的方式来了解我的无线驱动程序。事实是,我得到两个不同的结果:
第一种方法sudo lshw -C network给了我以下内容:
configuration: broadcast=yes driver=brcmsmac
Run Code Online (Sandbox Code Playgroud)
而第二个lspci -knn | grep Net -A2给了我这个:
Kernel driver in use: bcma-pci-bridge
Run Code Online (Sandbox Code Playgroud)
从我的驱动程序列表中,我可以找到brcmsmac和bcma:
> lsmod | grep brcmsmac
brcmsmac 563061 0
cordic 12574 1 brcmsmac
brcmutil 15579 1 brcmsmac
mac80211 652777 1 brcmsmac
cfg80211 498458 2 brcmsmac,mac80211
bcma 52320 2 brcmsmac
Run Code Online (Sandbox Code Playgroud)
那么,这两个人到底在做什么呢?
我正在使用 grsecurity 内核,它不允许自动加载内核,因此多个 systemd 服务无法工作。手动加载模块并modprobe重新启动模块后,一切正常,但这是一个相当肮脏的解决方案。我想在启动过程中“正确”地做到这一点。
操作系统是带有 grsec 内核的 Arch linux。
我正在尝试解决一个问题: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 强制加载模块吗?
我总是读到 Linux 内核不可分页。
如果我没记错的话,Windows 会在分页部分(分页池)和非分页部分(非分页池)中分配系统虚拟内存。
非分页部分直接映射到物理内存并一直留在那里,因为它负责处理内核必须完成的最重要的任务,而不太重要的部分可能不会。相反,Linux 内核被划分为可加载的模块,但我没有收集到有关如何实现这些模块的信息。
我不明白它们是否被分页,因此您可以暂时将它们传输到磁盘。我通常读到的是我们可以通过卸载它们来“释放”内存,这对我来说仍然是什么意思。
当我在这篇文章中写下“分页”或“可分页”时,我暗示您可以在磁盘上交换这些页面。我解决了这个问题,因为通常 Linux 内核被认为是分页的,但它不能被换出
因此,我在 debian buster 10 系统上安装了virtualbox,但遇到错误提示我手动加载一些内核模块。
sudo ./vboxconfig
[sudo] password for user:
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: You must sign these kernel modules before using VirtualBox:
vboxdrv vboxnetflt vboxnetadp
See the documenatation for your Linux distribution..
vboxdrv.sh: Building VirtualBox kernel modules
Run Code Online (Sandbox Code Playgroud)
所以我只需要一些帮助来加载 vboxdrv、vboxnetflt 和 vboxnetadp 内核模块来完成我的虚拟机安装,我不太确定这是如何完成的。我正在使用启用了安全启动的 UEFI 系统。
我使用一个sudoers文件,其中(除了其他项目)包含以下几行:
homebridge ALL=(ALL) NOPASSWD: /sbin/modprobe -r bcm2835-v4l2, /sbin/modprobe bcm2835-v4l2, /sbin/reboot
%sudo ALL=(ALL) NOPASSWD: /sbin/modprobe -r bcm2835-v4l2, /sbin/modprobe bcm2835-v4l2, /sbin/reboot
Run Code Online (Sandbox Code Playgroud)
当我/usr/bin/sudo /sbin/modprobe -r bcm2835-v4l2使用普通用户执行以下命令时,无需输入密码即可正常工作。
当我也/usr/bin/sudo /sbin/modprobe -r bcm2835-v4l2使用sudoers 中提到的homebridge用户运行时,命令失败并输出:(modprobe: ERROR: ../libkmod/libkmod-module.c:793 kmod_module_remove_module() could not remove 'bcm2835_v4l2': Operation not permitted,但我也没有被要求输入密码)
我能够/usr/bin/sudo /sbin/reboot使用homebridge用户成功执行命令,并且不需要输入密码。
homebridge用户运行命令?更新 1:
不幸的是,dmesg使用homebridge用户尝试失败时不包含其他条目,但使用普通用户时包含以下内容:bcm2835-v4l2-0: unregistering video0
我切换到bcm2835_v4l2而不是bcm2835-v4l2,但这似乎对该问题没有影响。执行lsmod | grep …
kernel-modules ×10
kernel ×2
linux-kernel ×2
bash ×1
broadcom ×1
debian ×1
drivers ×1
filesystems ×1
grsecurity ×1
intel ×1
iptables ×1
opensuse ×1
permissions ×1
proc ×1
startup ×1
sudo ×1
swap ×1
sysfs ×1
systemd ×1
usb ×1
virtualbox ×1
wifi ×1