ฉันยังใหม่กับการพัฒนาไดรเวอร์อุปกรณ์ linux ได้ลองใช้มันและฉันไม่สามารถสร้างโมดูลที่ฉันเขียนได้ ฉันกำลังทำงานกับ Ubuntu 20.04 LTS

รหัสโมดูลดังแสดงด้านล่าง:

#include <linux/module.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/kdev_t.h>

#define DEV_MEM_SIZE    512

char device_buffer[DEV_MEM_SIZE];

/*This holds the device number */
dev_t device_number;

/* Cdev variable */
struct cdev pcd_cdev;

loff_t pcd_lseek(struct file *filep, loff_t off, int whence)
{
    return 0;
}

ssize_t pcd_read(struct file *filp, char __user *buff, size_t count, loff_t *f_pos)
{
    return 0;
}

ssize_t pcd_write(struct file *filp, const char __user *buff, size_t count, loff_t *f_pos)
{
    return 0;
}

int pcd_open(struct inode *inode, struct file *filp)
{
    return 0;
}

int pcd_release(struct inode *inode, struct file *filp)
{
    return 0;
}

/* file operatios of the driver */
struct file_operations pcd_fops =
{
    .open = pcd_open,
    .write = pcd_read,
    .read = pcd_read,
    .llseek = pcd_lseek,
    .release = pcd_release,
    .owner = THIS_MODULE

};

struct class *class_pcd;

struct device *device_pcd;

#define pr_fmt(fmt) "%s:" fmt,__func__

static int __init pcd_driver_init(void)
{
    /*1. Dynamically allocate a device number */

    alloc_chrdev_region(&device_number,0,1,"pcd_devices");

    /* 2. Initialize the cdev structure with fops */
    cdev_init(&pcd_cdev,&pcd_fops);

    pcd_cdev.owner = THIS_MODULE;

    /* 3. Register cdev structure with VFS */
    cdev_add(&pcd_cdev,device_number,1);

    /*4. Create device class under /sys/class */
    class_pcd = class_create(THIS_MODULE,"pcd_class");

    /*5. populate the sysfs with device information */
    device_pcd = device_create(class_pcd, NULL, device_number, NULL,"pcd");

    pr_info("Module init was successfull!\n");

    return 0;
}

static void __exit pcd_driver_cleanup()
{
    device_destroy(class_pcd,device_number);
    class_destroy(class_pcd);
    cdev_del(&pcd_cdev);
    unregister_chrdev_region(device_number,1);
    prinfo("module unloaded!\n");
}

module_init(pcd_driver_init);
module_exit(pcd_driver_cleanup);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Deekshith Patil");
MODULE_DESCRIPTION("A pseudo character driver\n!");

ไฟล์ make ของฉันมีดังต่อไปนี้

obj-m := pcd.o

HOST_KERN_DIR = /lib/module//lib/modules/5.13.0-30-generic/build/

all:
    make -C $(HOST_KERN_DIR) M=$(PWD) modules

ข้อความแสดงข้อผิดพลาดที่ฉันได้รับหลังจากฉันสร้างโมดูลโดยใช้ "make all" ดังที่แสดงด้านล่าง

make -C /lib/module//lib/modules/5.13.0-30-generic/build/ M=/home/deekshith/Documents/Udemy-LDD-Fastbit/002pseudo_char_driver modules
make[1]: *** /lib/module//lib/modules/5.13.0-30-generic/build/: No such file or directory.  Stop.
make: *** [Makefile:6: all] Error 2
ไม่พบคำตอบ