linux-kernel相关内容
当我们到达Linux内核模块中一个struct file_operations的mmap的回调时,我们可以假设在调用回调之前vma->vm_mm->mm_sem已经被挂起了吗? 还是必须在执行remap_pfn_range之前显式调用down_write(&vma->vm_mm->mmap_sem)? 推荐答案 mmap文件操作处理程序应假定mmap锁在被调用时已被写锁定。mmap文件
..
让我把我的理解。 假设我们有一个系统的32位内存地址空间。因此进程可以访问4 GB范围内的任何内存 如果我们系统中的RAM为4 GB,则内核将其分为1:3。1 GB用于内核,其余3 GB用于用户空间进程。 用户空间进程只能访问该3 GB内存中的系统内存,并且它获得的地址由页表确定。 内核逻辑地址是仅为内核保留的1 GB(大约896MB)内存。这样做正确吗? 内核虚拟地
..
如何获取与系统上安装的内核版本不同的Linux-Header?(Debian)我搜索了整个Web,除了可以下载当前运行的内核的Header之外,我找不到其他任何东西,为什么获取未运行的内核的Header就这么难? 我需要4.16标头来编译LKM,但我在4.9上运行。 推荐答案 您可以从以下位置获取任何标准版本的内核头和源代码: Git克隆https://github.com
..
我使用dma_alloc_coherent分配了多个内核可访问的缓冲区,每个缓冲区的大小都是4MiB。目标是将这些缓冲区映射到一个连续的用户空间虚拟内存。问题是remap_pfn_range似乎不起作用,因为用户空间内存有时工作,有时不工作,或者有时复制缓冲区的页面映射。 // in probe() function dma_alloc_coherent(&pcie->dev, BUF_
..
我有下面的禁闭室。这是否表明SLEC_TEST PID5207是攻击者,或者只是因为内核中的当前宏仍然指向使系统调用我的驱动程序的用户空间进程?此外-IRQ事件戳0...IRQ事件戳到底代表什么?这不可能是自启动以来的中断次数...88798秒后肯定超过了0... 系统是单处理器,已禁用CONFIG_SMP。 [88798.449628] BUG: soft lockup - CPU#
..
我正在开发一个nvme-cli的测试工具(用c编写,可以在Linux上运行)。 出于SSD验证的目的,我们实际上正在寻找将I/O命令发送到特定的提交队列(IO队列对)。我们需要它,因为我们想要线程化,但要实现线程化,我们需要将I/O请求发送到不同的队列,否则I/O请求将被连续处理。 那么在ioctl()中有什么方法可以指定提交队列ID吗? 以下是使用ioctl() 请求NVMe
..
我正在尝试为Kali Linux 2021-W1(Linux内核版本5)上的bind()系统调用设置挂钩,但由于某种原因,调用原始系统调用失败并出现错误。 以下是我的代码: /* includes, license, author... */ void **sys_call_table_addr = (void **) 0xffffffff9e0002c0; int enable_
..
我的内核模块代码需要向用户域程序发送信号,以便将其执行转移到注册的信号处理程序。 事实上,我已经为我的嵌入式板卡开发了一个C程序,当我按下按钮(输入事件)时,LED会亮起和熄灭。另一方面,我刚刚开发了一个简单的Linux模块,包括它的基本功能(打开、关闭、读、写)。 我只是不知道如何修改我的主程序和内核模块以达到我的目标。 我与您分享我的用户空间计划: #include
..
static inline __printf(2, 3) int dev_err(const struct device *dev, const char *fmt, ...) { return 0; } __printf()正在做什么,第三个参数(...)开发错误意味着什么? 我可以想象这个函数是某种泛型函数。它能做什么? 推荐答案 除__printf(2,3)外,几乎所有内容都
..
我遵循了一些教程,这些教程解释了如何编写Linux内核模块,我有点困惑。即使看了official "documentation",我对概念的理解也很差。 创建字符设备(register_chrdev)后,我发现使用以下功能组合是很常见的: class_create class_device_create device_create 我不能理解,什么是类、设备和类、设备
..
我正在尝试生成模块。 但这里有一些问题。 错误:内核配置无效。 缺少INCLUDE/GENERATED/Autocon.h或INCLUDE/CONFIG/Auto.conf。 在内核src上运行‘make oldconfig&;&;make prepare’以修复它。 警告:符号版本转储。/Module.symver 缺少;模块将没有依赖项和modversions.`
..
通常,当进程要等待一些不可用的事件时,我们可以让它们进入休眠状态,并在事件发生后唤醒它们。 下面熟悉的代码可完成此任务: while (!events) { DEFINE_WAIT(wait); prepare_to_wait(&q, &wait, TASK_INTERRUPTIBLE); if (!events) schedule();
..
我正在尝试使用Yocto SDK构建一个Linux内核模块。 但是,我遇到了编译错误,它报告 ./include/uapi/asm-generic/int-ll64.h:12:10: fatal error: asm/bitsperlong.h: No such file or directory #include 这是我的Makefile
..
我是Linux初学者,如果这是您听过的最明显的问题,请原谅。 https://github.com/torvalds/linux/branches/all 推荐答案 主线内核 首先:不要使用GitHub链接(它只是一个镜像)。实际的存储库位于kernel.org。您可能希望使用Linus Torvalds的树,它是torvalds/linux.git。 它被称为主线内
..
这是上一个问题(u-boot: cannot boot linux kernel despite kernel being less than maximum BOOTM_LEN)在同一平台(MIPS VSC7427)上的后续问题。 我正在尝试引导Linux 5.11,而u-boot在";解压缩内核映像时挂起(gzip压缩): U-Boot 2019.10 (Mar 28 20
..
在包含目录/usr/src/linux-headers-5.7.0-kali1-common/include.中包含的KALI内核5.7.0标头上的Linux头文件文件夹中在这个文件夹中,我的头文件包含在子文件夹中,如asm-Generic、Linux、uapi、acpi、crypto等。但是在头文件中,即在linux/module e.h内部,有一个头文件引用,如下所示 #incl
..
较新的Linux内核有一个可调的sysfs/proc/sys/kernel/perf_event_paranoid,允许用户为非根用户调整perf_events的可用功能,数字越大越安全(提供的功能相应较少): 从kernel documenation我们可以看到各种值的以下行为: PERF_EVENT_PARANOID: 控制非特权用户对Performance Events系统的使
..
假设我们有以下代码: if (timeout > jiffies) { /* we did not time out, good ... */ } else { /* we timed out, error ...* } 当Jiffies值不溢出时,此代码工作得很好。 但是,当Jiffie溢出并绕回到零时,此代码无法正常工作。 Linux显然提供了用于处理此溢出问题
..
我在内核源代码树之外编码。有两个模块,第一个模块printt有一个函数printtty()将字符串打印到当前tty,第二个模块hello在初始化时调用printtty()。 我在printt模块中添加了EXPORT_SYMBOL(printtty),insmod ./printt.ko之后printtty()的信息可以在/proc/kallsyms中看到。 模块hello的make进程
..
所以我知道如何创建内核并线性迭代进程,只需包含linux/sched.h并使用以下代码: struct task_struct *task; for_each_process(task) { printk("Name: %s PID: [%d] ", task->comm, task->pid); } 如何使用深度优先搜索打印这些任务?我希望我的输出类似于ps -eLf的输出。
..