驱动程序函数不会在c中执行,但其他函数会执行

驱动程序函数不会在c中执行,但其他函数会执行,c,linux-kernel,C,Linux Kernel,我正在做一个设备驱动程序。我添加了与read和llseek最相关的代码。我可以很好地进入并使用read。但由于某些原因,无法输入llseek。我把它作为llseek列在文件操作中,并将它与我想要的函数匹配,参数看起来不错吗 在dmesg中,我得到内部读取,但没有内部搜索,也没有错误。终端或编译过程中也没有错误。我也不太了解c 主要 在我的设备驱动程序中: loff_t simple_char_driver_seek (struct file *pfile, loff_t offset, int

我正在做一个设备驱动程序。我添加了与read和llseek最相关的代码。我可以很好地进入并使用read。但由于某些原因,无法输入llseek。我把它作为llseek列在文件操作中,并将它与我想要的函数匹配,参数看起来不错吗

在dmesg中,我得到内部读取,但没有内部搜索,也没有错误。终端或编译过程中也没有错误。我也不太了解c

主要

在我的设备驱动程序中:

loff_t simple_char_driver_seek (struct file *pfile, loff_t offset, int whence)
{
    printk(KERN_ALERT "Inside SEEK");
    return 0;
}

ssize_t simple_char_driver_read (struct file *pfile, char __user *buffer, size_t length, loff_t *offset)
{
    printk(KERN_ALERT "Inside READ");
    return 0;
}

struct file_operations simple_char_driver_file_operations = {

    .owner   = THIS_MODULE,
    .open    = simple_char_driver_open,
    .release = simple_char_driver_close,
    .read    = simple_char_driver_read,
    .write   = simple_char_driver_write,
    .llseek  = simple_char_driver_seek,
};

关于你的第二个问题: printk是行缓冲的。这意味着缓冲区将被刷新,内容将在遇到换行符时发送到日志文件\n。否则,它将仅在程序退出时执行。
所以在printk语句中使用“\n”。

我对内核驱动程序很生疏,但这可能只是printk调用结束时缺少“\n”的情况吗?你们试过用strace调试吗?另外,我假设simple\u char\u driver\u read,simple\u char\u driver\u seek有返回语句?是的,有返回语句,我拿出了很多代码来简化它。我将添加return语句,但它们附带了框架代码,可能不是问题所在。我还试图找出如何调试。你是对的,如果你有骨架返回语句,它们不太可能是问题所在。我记得在printk下缓冲是不直观的,所以尝试一些额外的新行“\n”,或者甚至额外的printk语句来强制刷新可能会有所帮助。在strace下运行man strace跟踪系统调用和信号,因此它可能会帮助您了解正在发生的情况。可能是我刚刚添加到所有调用和信号中的重复项,但仍然没有到达llseekar在使用scanf读取后,您能打印出从何处来的信息吗?哦,我忘了这些变量仍然是指针,它们应该作为*偏移量和*位置发送。当然,这两个变量是我最后唯一没有打印出来的东西。它起作用了。
loff_t simple_char_driver_seek (struct file *pfile, loff_t offset, int whence)
{
    printk(KERN_ALERT "Inside SEEK");
    return 0;
}

ssize_t simple_char_driver_read (struct file *pfile, char __user *buffer, size_t length, loff_t *offset)
{
    printk(KERN_ALERT "Inside READ");
    return 0;
}

struct file_operations simple_char_driver_file_operations = {

    .owner   = THIS_MODULE,
    .open    = simple_char_driver_open,
    .release = simple_char_driver_close,
    .read    = simple_char_driver_read,
    .write   = simple_char_driver_write,
    .llseek  = simple_char_driver_seek,
};