我目前正在尝试为专有设备重建内核。为此,我需要为设备生成内核配置。虽然我可以通过反复试验来做到这一点,但最好看看我是否可以从正在运行的主机中提取配置。
话虽如此,正在运行的内核不是用编译的CONFIG_IKCONFIG
(因此也不CONFIG_IKCONFIG_PROC
是)。这意味着没有/proc/config.gz
提取。
此外,他们也没有费心将配置打包/boot
。因此,通常存储内核配置的两个常见位置是不走运的。
大多数东西都是静态编译到这个内核中的:
# cat /proc/modules
linux_user_bde 12327 0 - Live 0xf8536000 (PO)
linux_kernel_bde 29225 1 linux_user_bde, Live 0xf8524000 (PO)
pciDrv 1448 0 - Live 0xf8510000 (O)
iTCO_wdt 4456 0 - Live 0xf83fb000
iTCO_vendor_support 2003 1 iTCO_wdt, Live 0xf83f7000
i2c_dev 5443 0 - Live 0xf83f2000
i2c_i801 9421 0 - Live 0xf83eb000
i2c_core 20859 3 i2cscan,i2c_dev,i2c_i801, Live 0xf83e0000
igb 148294 0 - Live 0xf83ae000 (O)
dca 4665 0 - Live 0xf804c000
# …
Run Code Online (Sandbox Code Playgroud) 在启动时我看到:
:: running hook [encrypt]
A password is required to access the volume:
Command requires device and mapped name as arguments
Command requires device and mapped name as arguments
Command requires device and mapped name as arguments
Run Code Online (Sandbox Code Playgroud)
最后一条消息每秒重复一次。
我没有机会输入密码。
我正在运行基于 Arch 的 Manjaro。
我究竟做错了什么?
尝试永久更改某些虚拟机内核参数,我创建了/etc/sysctl.d/01-custom.conf
配置文件,如红帽知识库文章中所述。这是它的内容:
# cat /etc/sysctl.d/01-custom.conf
vm.swappiness=10
vm.dirty_ratio=20
vm.vfs_cache_pressure=200
Run Code Online (Sandbox Code Playgroud)
但重新启动后仅vm.vfs_cache_pressure
发生更改并swappines
具有dirty_ratio
以前的值。
# sysctl vm.swappiness
vm.swappiness = 30
# sysctl vm.dirty_ratio
vm.dirty_ratio = 30
Run Code Online (Sandbox Code Playgroud)
文件中的参数/etc/sysctl.conf
没有变化vm.dirty_ratio
,vm.swappines
也设置为 10。这是否意味着系统从其他地方获取这些值?/etc/sysctl.d
除了我的配置文件和链接之外,没有任何配置文件/etc/sysctl.conf
:
# ll /etc/sysctl.d/
total 4
-rw-r--r-- 1 root root 147 May 30 04:40 01-custom.conf
lrwxrwxrwx. 1 root root 14 Apr 3 15:00 99-sysctl.conf -> ../sysctl.conf
Run Code Online (Sandbox Code Playgroud)
更新:
sysctl --system
显示我的配置中的值已被获取。vm.swappines
和没有vm.dirty_ratio
设置为 30。
在这篇文章中,有一些关于为什么在“used by”列中lsmod
显示-2
的解释。这个想法是CONFIG_MODULE_UNLOAD
没有设置内核配置选项。
但是,如果在我当前的内核中设置时仅lsmod
显示-1
一个特定模块CONFIG_MODULE_UNLOAD
怎么办?如何调试这个混乱?
这是在 Linux 操作系统上。
我发现在某些机器上,在过滤net.bridge.bridge-nf-call-iptables
之前变量并不存在。我还看到有些机器加载了模块并且本身引入了这个变量。modprobe
br_netfilter
bridge
有没有办法知道我应该加载哪个模块才能获取特定变量?
我的戴尔笔记本电脑上有一个内置网络摄像头。我没有看到它与 一起列出lspci
,但它有效。
我使用的是自编译内核,以下是我启用的选项:
# zcat /proc/config.gz | grep -v '^#' | egrep '(MEDIA|VIDEO)'
CONFIG_ACPI_VIDEO=y
CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_SUPPORT_FILTER=y
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_VIDEO_DEV=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_VIDEO_V4L2=y
CONFIG_VIDEO_V4L2_I2C=y
CONFIG_MEDIA_USB_SUPPORT=y
CONFIG_USB_VIDEO_CLASS=y
CONFIG_VIDEOBUF2_CORE=y
CONFIG_VIDEOBUF2_V4L2=y
CONFIG_VIDEOBUF2_MEMOPS=y
CONFIG_VIDEOBUF2_VMALLOC=y
CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y
Run Code Online (Sandbox Code Playgroud)
我的内核中的所有选项都是静态编译的,并且我没有使用可加载模块。
如何通过向内核启动选项传递/附加某些内容来在启动时禁用网络摄像头?
我想在启动时决定是否要在支持网络摄像头的情况下启动内核,或者不支持网络摄像头。
是否可以在不重新启动的情况下在运行时更改此值?我并不总是有这个问题,当我现在暂停时,我遇到了失败并且
暂停控制台(
no_console_suspend
用于调试)
我想现在调试,而不必重新启动并重新创建问题。
我在我的系统日志中kernel.perf_event_max_sample_rate
看到发生了变化。
我想知道我是否可以编写一个快速脚本来每隔几分钟记录一次这个变量。目前是:
sysctl -a | grep kernel.perf_event_max_sample_rate
Run Code Online (Sandbox Code Playgroud)
在手册页 sysctl 中说
sysctl
- 在运行时配置内核参数
这是否意味着我的脚本将获得内核启动时设置的参数?它会带来变化吗?
kernel ×3
linux ×3
linux-kernel ×3
sysctl ×2
boot ×1
camera ×1
dm-crypt ×1
mkinitcpio ×1
modprobe ×1
options ×1
perf-event ×1
rhel ×1