我想在 linux 内核 3.2.x 中添加一个特定的新系统调用,但作为可加载的内核模块(因为我不想一次又一次地重新编译内核)
我阅读了互联网和 SO 上的许多帖子,有些地方声称将系统调用实现为可加载模块是不可能的,而其他人则说这是可能的。
是哪个?如果可能,如何实现?
我已经编译了一个 linux 内核,我想在 QEMU 中调试它。我通过执行命令创建了一个文件来启动
$ qemu-img create -f raw disk.img 200M
$ mkfs.ext2 -F disk.img
# mkdir /mnt/rootfs
# mount -o loop disk.img /mnt/rootfs
Run Code Online (Sandbox Code Playgroud)
然后我做了qemu -kernel bzImage -initrd disk.img并得到了下面的屏幕,上面写着:
Kernel panic - not syncing: VFS: unable to mount root fs on unknown block
Run Code Online (Sandbox Code Playgroud)

我做错了什么,我能做些什么来解决它?
我已经使用buildroot和busybox开发了我自己的小型 linux 文件系统。我使用linux-2.6.38.8内核根据需要为目标系统(X86)配置和交叉编译。现在文件系统已经构建,但它只有busybox shell,不支持GUI。它没有任何包管理器也是。现在我想在它上面启用 GUI。我检查了/etc但没有任何x11目录或x11.conf文件。它也不支持startx。
How can I install x11(XFree86 or Xorg) on my system Explicitly.
I also want to install a package-manager for my system.
Run Code Online (Sandbox Code Playgroud)
如何做到这一点?
我正在寻找 GRUB2 最终跳转到内核代码并因此在 x86 系统上移交执行的代码行?我猜它在一个汇编程序文件中,因为这是非常低架构的东西。我查看了源文件,在boot.S 的第 455 行/grub-core/boot/i386/pc/*.S找到了一个JMP,但可能是内存中 GRUB2 内核的地址,而不是 linux 内核。kernel_address
任何具有汇编和 GRUB2 知识的人都可以帮助我吗?
我只是想了解modinfo描述内核模块的输出。例如,在 module 的情况下i915,输出如下所示:
$ modinfo i915
filename: /lib/modules/4.2.0-1-amd64/kernel/drivers/gpu/drm/i915/i915.ko
license: GPL and additional rights
description: Intel Graphics
author: Intel Corporation
[...]
firmware: i915/skl_dmc_ver1.bin
alias: pci:v00008086d00005A84sv*sd*bc03sc*i*
[...]
depends: drm_kms_helper,drm,video,button,i2c-algo-bit
intree: Y
vermagic: 4.2.0-1-amd64 SMP mod_unload modversions
parm: modeset:Use kernel modesetting [KMS] (0=DRM_I915_KMS from .config, 1=on, -1=force vga console preference [default]) (int)
[...]
Run Code Online (Sandbox Code Playgroud)
我能够理解一些领域,但我不知道以下是什么意思:
firmwarealiasintreevermagic有谁知道如何解释它们?
我理解无文件恶意软件的定义:
不基于文件而仅存在于内存中的恶意代码……更具体地说,无文件恶意代码……将自身附加到内存中的活动进程中……
有人可以解释一下这个附加到内存中的活动进程是如何工作的吗?
此外,针对此类攻击有哪些(内核)保护/强化可用?
在 Linux 操作系统中,PID 是否有可能被重用?
例如,一个 PID 被命名为 2252。这个 PID 是死的并从内核进程表中删除。进程表是否有可能为新进程重新使用相同的 PID,或者它不会在任何即将到来的进程中使用?
为什么 Linux 允许 'init=/bin/bash'?
我读了这个,答案是说它是运行这个初始化程序的内核。
然后我开始怀疑,Linux通常带有一个initramfs,它最终会mount和pivot_root到真正的根文件系统。那么这个init论点是什么意思呢?initramfs中的路径?或者就像我猜的那样,它不是由内核读取,而是由 initramfs 的 init 来执行真正的 init。
另外,root=UUID=xxxx论点,是真正由内核读取还是仅由 initramfs 的 init 读取以找到真正的根文件系统?
似乎我可以将我想要的任何参数作为内核参数传递,那么它们是否都被内核读取,或者至少其中一些只对用户空间程序有意义?
我最近购买了一台新的笔记本电脑,它配备了用于 Wi-Fi 和蓝牙连接的 Intel Wireless-AX200 网络设备。我安装了elementary OS 5.0“Juno”以及最新的稳定Linux内核(5.1.1),因为我听说它应该支持上述网络设备
但是,我似乎无法/lib/firmware在 5.1.1 源内或内找到与设备相关的任何驱动程序(寻找任何以“iwlwifi”为前缀的内容)。
仔细查看会lspci发现以下设备,其中没有一个似乎是无线或蓝牙设备:
00:00.0 Host bridge: Intel Corporation 8th Gen Core Processor Host Bridge/DRAM Registers (rev 07)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x16) (rev 07)
00:02.0 VGA compatible controller: Intel Corporation Device 3e9b
00:04.0 Signal processing controller: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem (rev 07)
00:12.0 Signal processing controller: Intel Corporation Cannon …Run Code Online (Sandbox Code Playgroud) 我有带电池电源的计算机,可以在断电后运行计算机大约一分钟。我想在断电后立即触发挂起到磁盘,以便稍后恢复。initrd(默认 Devuan initrd)在交换分区中寻找挂起签名,并在找到签名时从它恢复。我不确定在将数据写入交换分区时电源完全中断时会发生什么。当电池出现故障或系统在挂起时挂起时,可能会发生这种情况。系统会从损坏的交换分区恢复还是忽略交换分区?我认为第二个选项更好 - 错误卸载文件系统比损坏系统状态更好。
签名是在其他数据之后还是之前写入交换分区?它使用校验和吗?
linux-kernel ×10
linux ×5
kernel ×2
process ×2
assembly ×1
boot ×1
buildroot ×1
corruption ×1
grub2 ×1
initrd ×1
intel ×1
iwlwifi ×1
malware ×1
networking ×1
qemu ×1
suspend ×1
system-calls ×1
ups ×1
x11 ×1