неявное объявление blk_init_queue - PullRequest
0 голосов
/ 18 февраля 2020

Я пытался написать базовый c блочный драйвер по этой ссылке:

https://linux-kernel-labs.github.io/master/labs/block_device_drivers.html

Я написал следующий код:

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/genhd.h>
#include <linux/blkdev.h>


MODULE_LICENSE("GPL");
#define BLK_DEV_NAME        "my_block"
#define MY_BLOCK_MINORS       1


int major;
struct gendisk *gd;
struct request_queue *queue;    /* The device request queue */
spinlock_t lock;                /* For mutual exclusion */


struct block_device_operations my_block_ops = {
    .owner = THIS_MODULE
};

static void my_block_request(struct request_queue *q)
{
    pr_info("%s\n", __func__);
}

static int test_hello_init(void)
{
    major = register_blkdev(0, BLK_DEV_NAME);
    pr_info("major = %d\n", major);
    spin_lock_init(&lock);
    queue = blk_init_queue(my_block_request, &lock);
    if (!queue) {
        pr_err("blk_init_queue failed\n");
        return -ENOMEM;
    }
    blk_queue_logical_block_size(queue, 512);
    gd = alloc_disk(MY_BLOCK_MINORS);   
    if (!gd) {
        pr_err("alloc_disk failure\n");
        return -ENOMEM;
    } 
    gd->major = major;
    gd->first_minor = 0;
    gd->fops = &my_block_ops;
    gd->queue = queue;
    snprintf (gd->disk_name, 32, "myblock");
    add_disk(gd);
    pr_info("adding disk successful\n");
    return 0;
}

static void test_hello_exit(void)
{
    unregister_blkdev(major, BLK_DEV_NAME);
    if (gd) {
        del_gendisk(gd);
    }
}
module_init(test_hello_init);
module_exit(test_hello_exit);

Я получаю следующую ошибку при компиляции кода:

error: implicit declaration of function ‘blk_init_queue’; did you mean ‘blk_put_queue’? [-Werror=implicit-function-declaration]
     queue = blk_init_queue(my_block_request, &lock);
             ^~~~~~~~~~~~~~
             blk_put_queue

Похоже, этот API был удален из последней версии ядра. Может ли кто-нибудь предоставить альтернативный API или ссылку на блочный драйвер basi c.

...