小编red*_*0ct的帖子

谁能给我最新的netlink编程样本?

我正在编写一个使用netlink的Linux驱动程序来在用户空间和内核空间之间进行通信.但是我找不到一些有用的资料,因为netlink已经从Linux内核> = 2.6.24改变了.谁可以给我一些关于如何创建netlink套接字的建议.提前致谢!

c linux networking linux-kernel

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

cat函数无限次调用read()

我正在研究简单字符设备驱动程序。我已经在模块中实现了读取和写入功能,问题是当我尝试使用设备读取设备文件时,cat /dev/devicefile它将进入无限循环,即反复读取相同的数据。有人可以建议我解决这个问题吗?下面是我的驱动程序代码。

#include<linux/module.h>
#include<linux/fs.h>
#include<linux/string.h>
#include<asm/uaccess.h>
#include<linux/init.h>
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("character device driver");
MODULE_AUTHOR("Srinivas");

static char msg[100]={0};

static int t;

static int dev_open(struct inode *, struct file *);
static int dev_rls(struct inode *, struct file *);
static ssize_t dev_read(struct file *, char *,size_t, loff_t *);
static ssize_t dev_write(struct file *, const char *, size_t,loff_t *);

static struct file_operations fops =
{
    .read = dev_read,
    .open = dev_open,
    .write = dev_write,
    .release = dev_rls,
};
static int himodule( void )
{ …
Run Code Online (Sandbox Code Playgroud)

c linux-device-driver linux-kernel

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

在工作队列中使用spin_lock()vs down_interruptible()

我遇到一种情况,即spin_lock()在多个中断之间的间隔太短的情况下,在工作队列中使用它会使系统挂起。更改spin_lock()down_interruptible()问题后,暂时消失了。

但是,我看到了在内核代码中使用下半部分的实现,而不是使用spin_lock()了互斥锁/信号量(例如,中的irq-function request_threaded_irq())。那是什么原因呢?我最好的猜测是,在这种情况下,互斥体/ sempahore可能会过大。

c mutex interrupt linux-kernel spinlock

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

在Linux中通过perf添加动态跟踪点以获取未列出的功能

我试图用zap_pte_rangemm/memory.c 跟踪函数perf.但功能没有列在perf probe -F.那么有没有办法动态追踪这个功能?即明确添加跟踪点并重新编译内核?

perf probe -a zap_pte_range
Run Code Online (Sandbox Code Playgroud)

得到:

没有找到构建ID为33b15ec444475ee7806331034772f61666fa6719的[kernel.kallsyms],继续没有符号

无法在内核中找到符号zap_pte_range

错误:无法添加事件.

c trace linux-kernel perf

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

Linux 如何删除临时文件?

我一直在研究一些 Linux 实现,并且想到了一个问题。

据我所知,有一个位将文件标记为临时文件。当生成该文件的进程死亡时,内核如何删除它?我认为它可能与文件描述符表有关,但我不确定。

如果有人能一步一步地给出解释,那将会派上用场!

linux temporary-files linux-kernel

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

如何在 Linux 内核中获取锁的全局状态?

我正在为 Linux 内核编写一些代码,我注意到当我需要启用它们时中断被禁用,以便进程可以处理信号。如果我能获得系统中当前持有的所有锁列表,那就太棒了,因为我怀疑某处的锁禁用了中断......这是假设它是一个禁用中断的锁。如果没有,也很高兴知道是如何做到的(或在哪里)。Linux内核是否对此有任何记录?

c linux locking linux-kernel spinlock

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

copy_to_user() 不断地打印消息

我正在学习“Linux 设备驱动程序”。我创建了一个名为char_device. 当我从设备读取数据时,它不断将消息打印到终端,使机器无限崩溃。

驱动中读操作的源码:

static ssize_t my_read(struct file *my_file, char __user *buf, size_t len, loff_t *off) {
    uint8_t *message = "Hello from the kernel world!\n";
    size_t datalen = strlen(message);
    
    if(len > datalen) {
        len = datalen;
    }
    printk(KERN_INFO "Char driver: Read");
    if(copy_to_user(buf, message, len)) {
        return -EFAULT;
    }

    return len;
}
Run Code Online (Sandbox Code Playgroud)

用于读取设备的用户空间命令:

cat /dev/char_device
Run Code Online (Sandbox Code Playgroud)

驱动程序不断打印“来自内核世界的你好!” 到终端的消息。

c linux linux-device-driver linux-kernel printk

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

Linux 内核中进程的年龄

给予struct task_struct合作。确定进程有多老的最佳方法是什么?

用于task_struct保存指向其下一个最小的兄弟姐妹和最大的孩子的特定指针。这在某些内核版本中似乎不再可用。

我专门使用 Android goldfish 内核。我一直在尝试学习如何使用该list_head结构来迭代进程,但我似乎无法弄清楚如何确定每个子进程或兄弟进程的年龄。

那么,什么成员或用法task_struct可以做到这一点?

c linux task linux-kernel android-kernel

0
推荐指数
1
解决办法
2305
查看次数

将uint8_t []转换为IP地址字符串

我目前正在学习C.我的生态系统包括Espressif ESP-32微控制器和Eclipse CDT IDE.

我试图将一个转换uint8_t[]为人类可读的IPv4 address string.到目前为止,我想出了以下代码:

void app_main() {
    uint8_t[] ip = {192, 168, 0, 99};
    dump_ip(ip);
}

void dump_ip(const uint8_t *in) {
    // ip addresses consist of three dots + terminator '\0'
    int size = 4;
    // count amount of chars needed for specific ip address
    for(int i=0; i<4; i++) {
        if(in[i]==0) {
            size ++;
        } else {
            size += ((int)log10(in[i]))+1;
        }
    }
    // allocate memory on heap for an ip address of length …
Run Code Online (Sandbox Code Playgroud)

c ip-address

-1
推荐指数
1
解决办法
284
查看次数