linux-kernel相关内容

是否在保留mmap_sem的情况下调用mmap回调?

当我们到达Linux内核模块中一个struct file_operations的mmap的回调时,我们可以假设在调用回调之前vma->vm_mm->mm_sem已经被挂起了吗? 还是必须在执行remap_pfn_range之前显式调用down_write(&vma->vm_mm->mmap_sem)? 推荐答案 mmap文件操作处理程序应假定mmap锁在被调用时已被写锁定。mmap文件 ..
发布时间:2022-04-05 09:26:05 其他开发

内核逻辑地址空间、内核虚拟地址空间和用户虚拟地址空间有什么不同

让我把我的理解。 假设我们有一个系统的32位内存地址空间。因此进程可以访问4 GB范围内的任何内存 如果我们系统中的RAM为4 GB,则内核将其分为1:3。1 GB用于内核,其余3 GB用于用户空间进程。 用户空间进程只能访问该3 GB内存中的系统内存,并且它获得的地址由页表确定。 内核逻辑地址是仅为内核保留的1 GB(大约896MB)内存。这样做正确吗? 内核虚拟地 ..

Linux-不同于安装的内核版本的标头

如何获取与系统上安装的内核版本不同的Linux-Header?(Debian)我搜索了整个Web,除了可以下载当前运行的内核的Header之外,我找不到其他任何东西,为什么获取未运行的内核的Header就这么难? 我需要4.16标头来编译LKM,但我在4.9上运行。 推荐答案 您可以从以下位置获取任何标准版本的内核头和源代码: Git克隆https://github.com ..
发布时间:2022-04-05 09:21:43 其他开发

将多个内核缓冲区映射到连续的用户空间缓冲区?

我使用dma_alloc_coherent分配了多个内核可访问的缓冲区,每个缓冲区的大小都是4MiB。目标是将这些缓冲区映射到一个连续的用户空间虚拟内存。问题是remap_pfn_range似乎不起作用,因为用户空间内存有时工作,有时不工作,或者有时复制缓冲区的页面映射。 // in probe() function dma_alloc_coherent(&pcie->dev, BUF_ ..
发布时间:2022-04-05 09:15:48 服务器开发

如何区分内核中的软锁定和用户空间中的软锁定?

我有下面的禁闭室。这是否表明SLEC_TEST PID5207是攻击者,或者只是因为内核中的当前宏仍然指向使系统调用我的驱动程序的用户空间进程?此外-IRQ事件戳0...IRQ事件戳到底代表什么?这不可能是自启动以来的中断次数...88798秒后肯定超过了0... 系统是单处理器,已禁用CONFIG_SMP。 [88798.449628] BUG: soft lockup - CPU# ..
发布时间:2022-04-05 09:13:21 服务器开发

Linux中的ioctl()是否可以为NVMe IO请求指定提交队列ID

我正在开发一个nvme-cli的测试工具(用c编写,可以在Linux上运行)。 出于SSD验证的目的,我们实际上正在寻找将I/O命令发送到特定的提交队列(IO队列对)。我们需要它,因为我们想要线程化,但要实现线程化,我们需要将I/O请求发送到不同的队列,否则I/O请求将被连续处理。 那么在ioctl()中有什么方法可以指定提交队列ID吗? 以下是使用ioctl() 请求NVMe ..

如何从Linux内核空间向用户空间发送信号以通知输入硬件事件

我的内核模块代码需要向用户域程序发送信号,以便将其执行转移到注册的信号处理程序。 事实上,我已经为我的嵌入式板卡开发了一个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)外,几乎所有内容都 ..
发布时间:2022-04-05 09:00:58 其他开发

班级和班级装置的用途是什么?

我遵循了一些教程,这些教程解释了如何编写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.` ..
发布时间:2022-04-04 23:56:44 其他开发

为什么Linux内核存储库只有一个分支?

我是Linux初学者,如果这是您听过的最明显的问题,请原谅。 https://github.com/torvalds/linux/branches/all 推荐答案 主线内核 首先:不要使用GitHub链接(它只是一个镜像)。实际的存储库位于kernel.org。您可能希望使用Linus Torvalds的树,它是torvalds/linux.git。 它被称为主线内 ..
发布时间:2022-04-02 18:20:59 服务器开发

ASM与ASM-Linux标头中的通用-它们是相同的吗

在包含目录/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 ..
发布时间:2022-03-24 23:07:12 服务器开发

PERF_EVENT_PARANOID==1实际上对x86 PERF施加了什么限制?

较新的Linux内核有一个可调的sysfs/proc/sys/kernel/perf_event_paranoid,允许用户为非根用户调整perf_events的可用功能,数字越大越安全(提供的功能相应较少): 从kernel documenation我们可以看到各种值的以下行为: PERF_EVENT_PARANOID: 控制非特权用户对Performance Events系统的使 ..
发布时间:2022-03-23 18:46:30 其他开发

Linux如何处理Jiffies中的溢出?

假设我们有以下代码: if (timeout > jiffies) { /* we did not time out, good ... */ } else { /* we timed out, error ...* } 当Jiffies值不溢出时,此代码工作得很好。 但是,当Jiffie溢出并绕回到零时,此代码无法正常工作。 Linux显然提供了用于处理此溢出问题 ..
发布时间:2022-03-22 10:21:03 服务器开发

如何从外部模块导出符号?

我在内核源代码树之外编码。有两个模块,第一个模块printt有一个函数printtty()将字符串打印到当前tty,第二个模块hello在初始化时调用printtty()。 我在printt模块中添加了EXPORT_SYMBOL(printtty),insmod ./printt.ko之后printtty()的信息可以在/proc/kallsyms中看到。 模块hello的make进程 ..
发布时间:2022-02-26 10:56:36 服务器开发