标签: linux-device-driver

Linux 内核中的 nr_cpu_ids 与 NR_CPUS

我试图了解 Linux 内核支持多少个处理器。

grep NR_CPUS /boot/config-`uname -r`
Run Code Online (Sandbox Code Playgroud)

将为我提供内核支持的最大处理器数量,我可以使用内核命令行参数 nr_cpus 覆盖该数量。

要查找在线 cpu 的数量,我可以使用 num_online_cpus() 函数

那么nr_cpu_ids是什么?

#include <linux/kernel.h>
#include <linux/module.h>

MODULE_LICENSE("GPL");


static int __init test_hello_init(void)
{
    pr_info("%s: In init NR_CPUs=%d, nr_cpu_ids=%d\n", __func__, NR_CPUS, nr_cpu_ids);
    pr_info("Number of cpus available:%d\n", num_online_cpus());
    return -1;
}

static void __exit test_hello_exit(void)
{
    pr_info("%s: In exit\n", __func__);
}

module_init(test_hello_init);
module_exit(test_hello_exit);

[11548.627338] test_hello_init: In init NR_CPUs=8192, nr_cpu_ids=128
[11548.627340] Number of cpus available:6
Run Code Online (Sandbox Code Playgroud)

NR_CPU 和 ncr_cpu_ids 之间有什么区别。它们不一样吗?

c linux smp linux-device-driver linux-kernel

3
推荐指数
1
解决办法
1764
查看次数

Linux的disable_irq()和local_irq_save()

我有一段代码:

disable_irq(irq_clk);
local_irq_save(flags);
Run Code Online (Sandbox Code Playgroud)

我发现disable_irq()禁用特定中断,而local_irq_save()禁用所有中断。

所以我想知道上面代码的含义。

c linux-device-driver linux-kernel interrupt-handling

3
推荐指数
1
解决办法
3229
查看次数

如何在Linux内核模块中设置字符设备的模式?

我正在创建一个玩井字游戏的角色设备模块。我正在尝试对其进行编程,以便将其/dev/ticactoe模式设置为666,而不是让用户使用该chmod命令。

我的main.c包含以下内容以及和tictactoe的实现(为了简洁而进行了编辑):initexit

static dev_t device_number;
static struct cdev our_cdev;
static struct class* my_class = NULL;

static struct file_operations fops = {
.owner = THIS_MODULE,
.read = tictactoe_read,
.write = tictactoe_write,
.open = tictactoe_open,
.release = tictactoe_release,
};
Run Code Online (Sandbox Code Playgroud)

我有一个tictactoe.h包含以下内容:

#define MODULE_NAME "tictactoe"

int tictactoe_open(struct inode *pinode, struct file *pfile);
ssize_t tictactoe_read(struct file *pfile, char __user *buffer, size_t length, loff_t *offset);
ssize_t tictactoe_write(struct file *pfile, const char __user …
Run Code Online (Sandbox Code Playgroud)

c device-driver kernel-module linux-device-driver linux-kernel

3
推荐指数
1
解决办法
2308
查看次数

Linux内核堆栈

什么样的数据存储在进程的内核模式堆栈中?流程"用户模式"调用链是否存储在内核堆栈中?

谢谢,vIjay

linux linux-device-driver linux-kernel

2
推荐指数
1
解决办法
2476
查看次数

捕获显示/监视图像,在Linux上发送键盘输入

我需要处理发送到笔记本电脑视频显示器的图像,我需要使用C++或shell程序将键盘输入发送到我的Linux系统.

我的目标是处理属于FPS游戏的图像,然后根据这些图像在游戏中进行操作(因此键盘输入).我没有尝试理解(如果它甚至可能)如何使用某些API与游戏X或Y进行交互,我认为这是与任何游戏进行交互的最快捷方式,劫持Linux输入和输出.

没有任何内核或设备驱动程序黑客攻击,有没有办法做到这一点?之前我使用recordmydesktop将我的桌面记录为视频,我想我可以破解其代码并尝试从中进行逆向工程.还有其他想法吗?我在Ubuntu 11上.

相关问题

linux x11 linux-device-driver linux-kernel function-interposition

2
推荐指数
1
解决办法
1248
查看次数

kprobe vs uprobe系统调用interposition

我想通过使用Utrace编写系统调用插入.我知道Utrace项目已被放弃,但其部分代码用于kprobe和uprobe.

我还不太了解这些是如何运作的.特别是uprobe您能解释一下他们之间存在什么差异?我可以使用uprobe而无需编写模块来检查哪些是系统调用的实际参数?

谢谢

linux selinux system-calls linux-device-driver linux-kernel

2
推荐指数
1
解决办法
1616
查看次数

在用户空间程序中包含ioctl代码

用户空间程序是否存在包含ioctl内核模块中使用的代码的常见做法.

mydev.h:

#ifndef MYDEV_H
#define MYDEV_H

#define <linux/ioctl.h>

#define MYDEV_IOC_MAGIC 'C'

#define MYDEV_IOC_FOO   _IO(MYDEV_IOC_MAGIC, 0)
#define MYDEV_IOC_BAR   _IOW(MYDEV_IOC_MAGIC, 1, int)

#endif
Run Code Online (Sandbox Code Playgroud)

我通常将我的ioctl代码放在一个标题中,我将其包含在我的内核模块代码中.我考虑在我的用户空间应用程序中包含此标题,但我意识到大多数系统(例如没有导出的内核头文件的系统)可能不存在linux/ioctl.h文件路径.

解决方案似乎是将include行更改为:#include <sys/ioctl.h>; 但后来我无法将此标头用于我的内核模块.

有没有更好的解决方案来解决这个问题,或者通常有两个独立但几乎相同的头文件?

c linux ioctl linux-device-driver linux-kernel

2
推荐指数
1
解决办法
2662
查看次数

什么是linux中的net_generic函数包括/ net/net_namespace.h?

我是Linux开发的新手.我正在研究一个示例Linux网络驱动程序教程,并遇到了net_generic(const struct net*net,int id)函数.有人可以解释一下net_generic(const struct net*net,int id)的使用我谷歌为它但只找到了头文件.任何人都可以在我可以参考的资源(网站或书籍)上指向我.谢谢

linux linux-device-driver linux-kernel

2
推荐指数
1
解决办法
1198
查看次数

找不到模块:modprobe

我编写了一个简单的hello world内核模块,编译并安装在/lib/modules/kernel_version/extra/路径中.

随着insmod它正确加载,但modprobe我得到一个错误

modprobe: FATAL: Module hello_world.ko not found.
Run Code Online (Sandbox Code Playgroud)

我已经安装了所有必需品.

这是Makefile的编译和安装:

make -C /lib/modules/$(shell uname -r)/build M=$(PWD)  modules
make -C /lib/modules/$(shell uname -r)/build  M=$(PWD)  modules_install
Run Code Online (Sandbox Code Playgroud)

请告诉我如何完成.

提前致谢.

c linux kernel-module linux-device-driver linux-kernel

2
推荐指数
1
解决办法
1万
查看次数

如何使用checkpatch.pl脚本为我们自己的c文件验证编码风格

我写了一个示例chardriver.我想验证编码风格是否与linux内核编码风格相匹配.

我这样做了:

root @vkalyanam-Lenovo-B41-80:〜/ linux/scripts#./ checkpatch.pl --no-tree --fix mychardriver.c

错误:似乎不是统一差异格式补丁

总计:1个错误,0个警告,0个行检查

mychardriver.c有样式问题,请查看.

注意:如果任何错误是误报,请报告

他们到维护者,请参阅MAINTAINERS中的CHECKPATCH.

你能帮我解决一下关于统一差异格式补丁的上述错误吗?我的确切要求是验证我自己的char驱动程序文件是否与linux内核编码风格匹配.

linux linux-device-driver linux-kernel

2
推荐指数
2
解决办法
3487
查看次数